// // game_dispatch_test.cxx // engine-test // // Created by Sam Jaffe on 7/10/19. // Copyright © 2019 Sam Jaffe. All rights reserved. // #include #include #include "game/engine/events.hpp" #include "game/engine/game_dispatch.hpp" #include "game/engine/scene.hpp" #include "game/graphics/renderer.hpp" #include "mock_renderer.h" struct mock_scene : engine::scene { mock_scene(std::shared_ptr game) : engine::scene("mock", game) {} MOCK_METHOD1(update, void(float)); MOCK_METHOD1(render, void(graphics::renderer &)); MOCK_METHOD1(handle_key_event, void(engine::event::key_event)); MOCK_METHOD1(handle_mouse_event, void(engine::event::mouse_event)); }; class GameDispatchTest : public testing::Test { protected: void SetUp() override; void TearDown() override; mock_scene & scene() const { return *scene_; } engine::game_dispatch & game() const { return *dispatch_; } private: std::shared_ptr renderer_; std::shared_ptr dispatch_; std::shared_ptr scene_; }; void GameDispatchTest::SetUp() { renderer_.reset(new stub_renderer); dispatch_.reset(new engine::game_dispatch(renderer_)); scene_.reset(new mock_scene(dispatch_)); game().register_scene(scene_); game().activate_scene("mock"); } void GameDispatchTest::TearDown() { scene_.reset(); dispatch_.reset(); renderer_.reset(); } using testing::AnyNumber; using testing::Ge; using testing::Lt; using testing::_; TEST_F(GameDispatchTest, UpdateDispatchesToCurrentScene) { EXPECT_CALL(scene(), update(_)).Times(1); game().update(); } TEST_F(GameDispatchTest, UpdateIsCappedInFrequencyByFPSParam) { EXPECT_CALL(scene(), update(Ge(1.0 / 60.0))).Times(AnyNumber()); EXPECT_CALL(scene(), update(Lt(1.0 / 60.0))).Times(0); for (int i = 0; i < 10; i++) { game().update(); } } TEST_F(GameDispatchTest, RenderDispatchesToCurrentScene) { EXPECT_CALL(scene(), render(_)).Times(1); game().render(); }