瀏覽代碼

Set up testing skeleton for engine::scene

Sam Jaffe 6 年之前
父節點
當前提交
ba3029284a
共有 3 個文件被更改,包括 67 次插入0 次删除
  1. 4 0
      engine/engine.xcodeproj/project.pbxproj
  2. 1 0
      engine/src/scene.cpp
  3. 62 0
      engine/test/scene_test.cxx

+ 4 - 0
engine/engine.xcodeproj/project.pbxproj

@@ -23,6 +23,7 @@
 		CD8064F722D22BF500B9B4E4 /* libgameutils.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CD7E87782295FAB400D877FE /* libgameutils.dylib */; };
 		CD8064F922D2984400B9B4E4 /* fps_counter_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD8064F822D2984400B9B4E4 /* fps_counter_test.cxx */; };
 		CD8064FB22D69CAE00B9B4E4 /* game_dispatch_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD8064FA22D69CAE00B9B4E4 /* game_dispatch_test.cxx */; };
+		CD8064FD22D9456100B9B4E4 /* scene_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD8064FC22D9456100B9B4E4 /* scene_test.cxx */; };
 		CDB1F8C81D7A312B00700C6B /* game_dispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDB1F8C61D7A312B00700C6B /* game_dispatch.cpp */; settings = {COMPILER_FLAGS = "-fvisibility=default"; }; };
 		CDB1F8CC1D7A319A00700C6B /* scene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDB1F8CA1D7A319A00700C6B /* scene.cpp */; settings = {COMPILER_FLAGS = "-fvisibility=default"; }; };
 		CDB1F8D21D7A32A300700C6B /* events.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDB1F8D01D7A32A300700C6B /* events.cpp */; settings = {COMPILER_FLAGS = "-fvisibility=default"; }; };
@@ -91,6 +92,7 @@
 		CD8064F522D228D300B9B4E4 /* text_engine_test.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = text_engine_test.cxx; sourceTree = "<group>"; };
 		CD8064F822D2984400B9B4E4 /* fps_counter_test.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = fps_counter_test.cxx; sourceTree = "<group>"; };
 		CD8064FA22D69CAE00B9B4E4 /* game_dispatch_test.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = game_dispatch_test.cxx; sourceTree = "<group>"; };
+		CD8064FC22D9456100B9B4E4 /* scene_test.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = scene_test.cxx; sourceTree = "<group>"; };
 		CDA34D8422515C99008036A7 /* game */ = {isa = PBXFileReference; lastKnownFileType = folder; name = game; path = include/game; sourceTree = "<group>"; };
 		CDB1F8AE1D7A30CD00700C6B /* libengine.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libengine.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
 		CDB1F8C61D7A312B00700C6B /* game_dispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_dispatch.cpp; sourceTree = "<group>"; };
@@ -163,6 +165,7 @@
 				CD8064F322D2284500B9B4E4 /* data */,
 				CDED9C4C22A4112200AE5CE5 /* mock_renderer.h */,
 				CDED9C5022A4114F00AE5CE5 /* serial_test.cxx */,
+				CD8064FC22D9456100B9B4E4 /* scene_test.cxx */,
 				CD8064F522D228D300B9B4E4 /* text_engine_test.cxx */,
 				CD8064FA22D69CAE00B9B4E4 /* game_dispatch_test.cxx */,
 				CD8064F822D2984400B9B4E4 /* fps_counter_test.cxx */,
@@ -367,6 +370,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				CD8064F922D2984400B9B4E4 /* fps_counter_test.cxx in Sources */,
+				CD8064FD22D9456100B9B4E4 /* scene_test.cxx in Sources */,
 				CD8064F622D228D300B9B4E4 /* text_engine_test.cxx in Sources */,
 				CDED9C5122A4114F00AE5CE5 /* serial_test.cxx in Sources */,
 				CD8064FB22D69CAE00B9B4E4 /* game_dispatch_test.cxx in Sources */,

+ 1 - 0
engine/src/scene.cpp

@@ -56,6 +56,7 @@ graphics::manager const & scene::graphics_manager() const {
 }
 
 void scene::handle_key_event(event::key_event evt) {
+  // TODO (sjaffe): Handle quit binding correctly... (don't test this)
   if (evt.type & event::PRESSED_MASK && evt.key == keys::QUIT) {
     dispatch_.lock()->quit();
   }

+ 62 - 0
engine/test/scene_test.cxx

@@ -0,0 +1,62 @@
+//
+//  scene_test.cxx
+//  engine-test
+//
+//  Created by Sam Jaffe on 7/12/19.
+//  Copyright © 2019 Sam Jaffe. All rights reserved.
+//
+
+#include <gmock/gmock.h>
+
+#include "game/engine/entity.hpp"
+#include "game/engine/game_dispatch.hpp"
+#include "game/engine/scene.hpp"
+
+#include "mock_renderer.h"
+
+struct test_scene : engine::scene {
+  using engine::scene::scene;
+
+  void update(float) override { check_collisions(); }
+  void render(graphics::renderer &) override {}
+  void handle_key_event(engine::event::key_event) override {}
+  void handle_mouse_event(engine::event::mouse_event) override {}
+
+  void add_with(engine::collision_t t, engine::collidable & c) {
+    colliders[t].push_back(&c);
+  }
+  void add_as(engine::collision_t t, engine::collidable & c) {
+    collidables[t].push_back(&c);
+  }
+};
+
+struct mock_collidable : engine::collidable {
+  mock_collidable(math::dim2::rectangle bounds)
+      : engine::collidable({bounds, bounds, cast<graphics::material>(1), {}}) {}
+  MOCK_METHOD1(collide, void(engine::collidable const &));
+};
+
+class SceneTest : public testing::Test {
+protected:
+  void SetUp() override;
+  void TearDown() override;
+
+  test_scene & scene() const { return *scene_; }
+  engine::game_dispatch & game() const { return *dispatch_; }
+
+  std::shared_ptr<stub_renderer> renderer_;
+  std::shared_ptr<engine::game_dispatch> dispatch_;
+  std::shared_ptr<test_scene> scene_;
+};
+
+void SceneTest::SetUp() {
+  renderer_.reset(new stub_renderer);
+  dispatch_.reset(new engine::game_dispatch(renderer_));
+  scene_.reset(new test_scene("test", dispatch_));
+}
+
+void SceneTest::TearDown() {
+  scene_.reset();
+  dispatch_.reset();
+  renderer_.reset();
+}