game_dispatch_test.cxx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. //
  2. // game_dispatch_test.cxx
  3. // engine-test
  4. //
  5. // Created by Sam Jaffe on 7/10/19.
  6. // Copyright © 2019 Sam Jaffe. All rights reserved.
  7. //
  8. #include <memory>
  9. #include <gmock/gmock.h>
  10. #include "game/engine/events.hpp"
  11. #include "game/engine/game_dispatch.hpp"
  12. #include "game/engine/scene.hpp"
  13. #include "game/graphics/renderer.hpp"
  14. #include "mock_renderer.h"
  15. struct mock_scene : engine::scene {
  16. mock_scene(std::shared_ptr<engine::game_dispatch> game)
  17. : engine::scene("mock", game) {}
  18. MOCK_METHOD1(update, void(float));
  19. MOCK_METHOD1(render, void(graphics::renderer &));
  20. MOCK_METHOD1(handle_key_event, void(engine::event::key_event));
  21. MOCK_METHOD1(handle_mouse_event, void(engine::event::mouse_event));
  22. };
  23. class GameDispatchTest : public testing::Test {
  24. protected:
  25. void SetUp() override;
  26. void TearDown() override;
  27. mock_scene & scene() const { return *scene_; }
  28. engine::game_dispatch & game() const { return *dispatch_; }
  29. private:
  30. std::shared_ptr<stub_renderer> renderer_;
  31. std::shared_ptr<engine::game_dispatch> dispatch_;
  32. std::shared_ptr<mock_scene> scene_;
  33. };
  34. void GameDispatchTest::SetUp() {
  35. renderer_.reset(new stub_renderer);
  36. dispatch_.reset(new engine::game_dispatch(renderer_));
  37. scene_.reset(new mock_scene(dispatch_));
  38. game().register_scene(scene_);
  39. game().activate_scene("mock");
  40. }
  41. void GameDispatchTest::TearDown() {
  42. scene_.reset();
  43. dispatch_.reset();
  44. renderer_.reset();
  45. }
  46. using testing::AnyNumber;
  47. using testing::Ge;
  48. using testing::Lt;
  49. using testing::_;
  50. TEST_F(GameDispatchTest, UpdateDispatchesToCurrentScene) {
  51. EXPECT_CALL(scene(), update(_)).Times(1);
  52. game().update();
  53. }
  54. TEST_F(GameDispatchTest, UpdateIsCappedInFrequencyByFPSParam) {
  55. EXPECT_CALL(scene(), update(Ge(1.0 / 60.0))).Times(AnyNumber());
  56. EXPECT_CALL(scene(), update(Lt(1.0 / 60.0))).Times(0);
  57. for (int i = 0; i < 10; i++) {
  58. game().update();
  59. }
  60. }
  61. TEST_F(GameDispatchTest, RenderDispatchesToCurrentScene) {
  62. EXPECT_CALL(scene(), render(_)).Times(1);
  63. game().render();
  64. }