diff options
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/AudioTest.cpp | 9 | ||||
| -rw-r--r-- | src/test/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | src/test/ECSTest.cpp | 79 | ||||
| -rw-r--r-- | src/test/ResourceManagerTest.cpp | 10 | ||||
| -rw-r--r-- | src/test/SaveManagerTest.cpp | 40 | ||||
| -rw-r--r-- | src/test/ScriptECSTest.cpp | 41 | ||||
| -rw-r--r-- | src/test/ScriptEventTest.cpp | 2 | ||||
| -rw-r--r-- | src/test/ScriptSaveManagerTest.cpp | 35 | ||||
| -rw-r--r-- | src/test/ScriptSceneTest.cpp | 2 | ||||
| -rw-r--r-- | src/test/ScriptTest.cpp | 2 | ||||
| -rw-r--r-- | src/test/ScriptTest.h | 2 | ||||
| -rw-r--r-- | src/test/Vector2Test.cpp | 148 | 
12 files changed, 369 insertions, 4 deletions
| diff --git a/src/test/AudioTest.cpp b/src/test/AudioTest.cpp index 774fdb8..48bba1b 100644 --- a/src/test/AudioTest.cpp +++ b/src/test/AudioTest.cpp @@ -150,3 +150,12 @@ TEST_F(AudioTest, PlayOnActive) {  		system.update();  	}  } + +TEST_F(AudioTest, PlayImmediately) { +	component.play_on_awake = false; +	component.play(); + +	EXPECT_CALL(context, play(_)).Times(1); + +	system.update(); +} diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index 9f986a0..7196404 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -19,4 +19,7 @@ target_sources(test_main PUBLIC  	ScriptEventTest.cpp  	ScriptSceneTest.cpp  	Profiling.cpp +	SaveManagerTest.cpp +	ScriptSaveManagerTest.cpp +	ScriptECSTest.cpp  ) diff --git a/src/test/ECSTest.cpp b/src/test/ECSTest.cpp index 3e6c61c..af2b7b0 100644 --- a/src/test/ECSTest.cpp +++ b/src/test/ECSTest.cpp @@ -1,6 +1,7 @@  #include <gtest/gtest.h>  #define protected public +#define private public  #include <crepe/api/GameObject.h>  #include <crepe/api/Metadata.h> @@ -16,6 +17,10 @@ class ECSTest : public ::testing::Test {  public:  	ComponentManager mgr{m}; + +	class TestComponent : public Component { +		using Component::Component; +	};  };  TEST_F(ECSTest, createGameObject) { @@ -387,3 +392,77 @@ TEST_F(ECSTest, resetPersistent) {  	EXPECT_EQ(metadata.size(), 0);  	EXPECT_EQ(transform.size(), 0);  } + +TEST_F(ECSTest, IDByName) { +	GameObject foo = mgr.new_object("foo"); +	GameObject bar = mgr.new_object("bar"); + +	{ +		auto objects = mgr.get_objects_by_name(""); +		EXPECT_EQ(objects.size(), 0); +	} + +	{ +		auto objects = mgr.get_objects_by_name("foo"); +		EXPECT_EQ(objects.size(), 1); +		EXPECT_TRUE(objects.contains(foo.id)); +	} +} + +TEST_F(ECSTest, IDByTag) { +	GameObject foo = mgr.new_object("foo", "common tag"); +	GameObject bar = mgr.new_object("bar", "common tag"); + +	{ +		auto objects = mgr.get_objects_by_tag(""); +		EXPECT_EQ(objects.size(), 0); +	} + +	{ +		auto objects = mgr.get_objects_by_tag("common tag"); +		EXPECT_EQ(objects.size(), 2); +		EXPECT_TRUE(objects.contains(foo.id)); +		EXPECT_TRUE(objects.contains(bar.id)); +	} +} + +TEST_F(ECSTest, ComponentsByName) { +	GameObject foo = mgr.new_object("foo"); +	foo.add_component<TestComponent>(); +	GameObject bar = mgr.new_object("bar"); +	bar.add_component<TestComponent>(); +	bar.add_component<TestComponent>(); + +	{ +		auto objects = mgr.get_components_by_name<TestComponent>(""); +		EXPECT_EQ(objects.size(), 0); +	} + +	{ +		auto objects = mgr.get_components_by_name<TestComponent>("foo"); +		EXPECT_EQ(objects.size(), 1); +	} + +	{ +		auto objects = mgr.get_components_by_name<TestComponent>("bar"); +		EXPECT_EQ(objects.size(), 2); +	} +} + +TEST_F(ECSTest, ComponentsByTag) { +	GameObject foo = mgr.new_object("foo", "common tag"); +	foo.add_component<TestComponent>(); +	GameObject bar = mgr.new_object("bar", "common tag"); +	bar.add_component<TestComponent>(); +	bar.add_component<TestComponent>(); + +	{ +		auto objects = mgr.get_components_by_tag<TestComponent>(""); +		EXPECT_EQ(objects.size(), 0); +	} + +	{ +		auto objects = mgr.get_components_by_tag<TestComponent>("common tag"); +		EXPECT_EQ(objects.size(), 3); +	} +} diff --git a/src/test/ResourceManagerTest.cpp b/src/test/ResourceManagerTest.cpp index b6be3c0..44a5921 100644 --- a/src/test/ResourceManagerTest.cpp +++ b/src/test/ResourceManagerTest.cpp @@ -17,6 +17,10 @@ class ResourceManagerTest : public Test {  public:  	ResourceManager resource_manager{mediator}; +	class Unrelated : public Resource { +		using Resource::Resource; +	}; +  	Asset asset_a{"asset/texture/img.png"};  	Asset asset_b{"asset/texture/ERROR.png"}; @@ -69,3 +73,9 @@ TEST_F(ResourceManagerTest, Persistent) {  	resource_manager.clear_all();  	EXPECT_EQ(TestResource::instances, 0);  } + +TEST_F(ResourceManagerTest, UnmatchedType) { +	EXPECT_NO_THROW({ resource_manager.get<TestResource>(asset_a); }); + +	EXPECT_THROW({ resource_manager.get<Unrelated>(asset_a); }, runtime_error); +} diff --git a/src/test/SaveManagerTest.cpp b/src/test/SaveManagerTest.cpp new file mode 100644 index 0000000..e9b0c29 --- /dev/null +++ b/src/test/SaveManagerTest.cpp @@ -0,0 +1,40 @@ +#include <gtest/gtest.h> + +#include <crepe/ValueBroker.h> +#include <crepe/facade/DB.h> +#include <crepe/manager/SaveManager.h> + +using namespace std; +using namespace crepe; +using namespace testing; + +class SaveManagerTest : public Test { +	Mediator m; +	class TestSaveManager : public SaveManager { +		using SaveManager::SaveManager; + +		// in-memory database for testing +		DB db{}; +		virtual DB & get_db() override { return this->db; } +	}; + +public: +	TestSaveManager mgr{m}; +}; + +TEST_F(SaveManagerTest, ReadWrite) { +	ASSERT_FALSE(mgr.has("foo")); +	mgr.set<string>("foo", "bar"); +	ASSERT_TRUE(mgr.has("foo")); + +	ValueBroker value = mgr.get<string>("foo"); +	EXPECT_EQ(value.get(), "bar"); +} + +TEST_F(SaveManagerTest, DefaultValue) { +	ValueBroker value = mgr.get<int>("foo", 3); + +	ASSERT_EQ(value.get(), 3); +	value.set(5); +	ASSERT_EQ(value.get(), 5); +} diff --git a/src/test/ScriptECSTest.cpp b/src/test/ScriptECSTest.cpp new file mode 100644 index 0000000..1ec33ba --- /dev/null +++ b/src/test/ScriptECSTest.cpp @@ -0,0 +1,41 @@ +#include <gtest/gtest.h> + +#define protected public + +#include <crepe/api/BehaviorScript.h> +#include <crepe/api/GameObject.h> +#include <crepe/api/Metadata.h> +#include <crepe/api/Script.h> +#include <crepe/manager/ComponentManager.h> +#include <crepe/system/ScriptSystem.h> + +#include "ScriptTest.h" + +using namespace std; +using namespace crepe; +using namespace testing; + +class ScriptECSTest : public ScriptTest { +public: +	class TestComponent : public Component { +		using Component::Component; +	}; +}; + +TEST_F(ScriptECSTest, GetOwnComponent) { +	MyScript & script = this->script; +	Metadata & metadata = script.get_component<Metadata>(); + +	EXPECT_EQ(metadata.name, OBJ_NAME); +} + +TEST_F(ScriptECSTest, GetOwnComponents) { +	const unsigned COUNT = 4; + +	for (unsigned i = 0; i < COUNT; i++) entity.add_component<TestComponent>(); + +	MyScript & script = this->script; +	RefVector<TestComponent> components = script.get_components<TestComponent>(); + +	EXPECT_EQ(components.size(), COUNT); +} diff --git a/src/test/ScriptEventTest.cpp b/src/test/ScriptEventTest.cpp index 5da31e7..c1b4028 100644 --- a/src/test/ScriptEventTest.cpp +++ b/src/test/ScriptEventTest.cpp @@ -26,7 +26,7 @@ public:  	class MyEvent : public Event {};  }; -TEST_F(ScriptEventTest, Inactive) { +TEST_F(ScriptEventTest, Default) {  	BehaviorScript & behaviorscript = this->behaviorscript;  	MyScript & script = this->script;  	EventManager & evmgr = this->event_manager; diff --git a/src/test/ScriptSaveManagerTest.cpp b/src/test/ScriptSaveManagerTest.cpp new file mode 100644 index 0000000..64403c4 --- /dev/null +++ b/src/test/ScriptSaveManagerTest.cpp @@ -0,0 +1,35 @@ +#include <gtest/gtest.h> + +// stupid hack to allow access to private/protected members under test +#define private public +#define protected public + +#include <crepe/facade/DB.h> +#include <crepe/manager/SaveManager.h> + +#include "ScriptTest.h" + +using namespace std; +using namespace crepe; +using namespace testing; + +class ScriptSaveManagerTest : public ScriptTest { +public: +	class TestSaveManager : public SaveManager { +		using SaveManager::SaveManager; + +		// in-memory database for testing +		DB db{}; +		virtual DB & get_db() override { return this->db; } +	}; + +	TestSaveManager save_mgr{mediator}; +}; + +TEST_F(ScriptSaveManagerTest, GetSaveManager) { +	MyScript & script = this->script; + +	SaveManager & mgr = script.get_save_manager(); + +	EXPECT_EQ(&mgr, &save_mgr); +} diff --git a/src/test/ScriptSceneTest.cpp b/src/test/ScriptSceneTest.cpp index 9ee1e52..2568049 100644 --- a/src/test/ScriptSceneTest.cpp +++ b/src/test/ScriptSceneTest.cpp @@ -18,7 +18,7 @@ public:  	class MyScene : public Scene {};  }; -TEST_F(ScriptSceneTest, Inactive) { +TEST_F(ScriptSceneTest, Default) {  	BehaviorScript & behaviorscript = this->behaviorscript;  	MyScript & script = this->script; diff --git a/src/test/ScriptTest.cpp b/src/test/ScriptTest.cpp index 1d2d6dd..acdae70 100644 --- a/src/test/ScriptTest.cpp +++ b/src/test/ScriptTest.cpp @@ -6,7 +6,6 @@  #define protected public  #include "ScriptTest.h" -#include <crepe/api/GameObject.h>  using namespace std;  using namespace crepe; @@ -14,7 +13,6 @@ using namespace testing;  void ScriptTest::SetUp() {  	auto & mgr = this->component_manager; -	GameObject entity = mgr.new_object("name");  	BehaviorScript & component = entity.add_component<BehaviorScript>();  	this->behaviorscript = component; diff --git a/src/test/ScriptTest.h b/src/test/ScriptTest.h index 1bbfdd3..309e016 100644 --- a/src/test/ScriptTest.h +++ b/src/test/ScriptTest.h @@ -11,10 +11,12 @@  class ScriptTest : public testing::Test {  protected:  	crepe::Mediator mediator; +	static constexpr const char * OBJ_NAME = "foo";  public:  	crepe::ComponentManager component_manager{mediator};  	crepe::ScriptSystem system{mediator}; +	crepe::GameObject entity = component_manager.new_object(OBJ_NAME);  	class MyScript : public crepe::Script {  		// NOTE: explicitly stating `public:` is not required on actual scripts diff --git a/src/test/Vector2Test.cpp b/src/test/Vector2Test.cpp index 17bca41..1e21af9 100644 --- a/src/test/Vector2Test.cpp +++ b/src/test/Vector2Test.cpp @@ -382,3 +382,151 @@ TEST_F(Vector2Test, NotEquals) {  	EXPECT_FALSE(long_vec1 != long_vec1);  	EXPECT_TRUE(long_vec1 != long_vec2);  } + +TEST_F(Vector2Test, Truncate) { +	Vector2<int> vec = {3, 4}; +	vec.truncate(3); +	EXPECT_EQ(vec.x, 0); +	EXPECT_EQ(vec.y, 0); + +	Vector2<double> vec2 = {3.0, 4.0}; +	vec2.truncate(3.0); +	EXPECT_FLOAT_EQ(vec2.x, 1.8); +	EXPECT_FLOAT_EQ(vec2.y, 2.4); + +	Vector2<long> vec3 = {3, 4}; +	vec3.truncate(3); +	EXPECT_EQ(vec3.x, 0); +	EXPECT_EQ(vec3.y, 0); + +	Vector2<float> vec4 = {3.0f, 4.0f}; +	vec4.truncate(3.0f); +	EXPECT_FLOAT_EQ(vec4.x, 1.8f); +	EXPECT_FLOAT_EQ(vec4.y, 2.4f); +} + +TEST_F(Vector2Test, Normalize) { +	Vector2<int> vec = {3, 4}; +	vec.normalize(); +	EXPECT_EQ(vec.x, 0); +	EXPECT_EQ(vec.y, 0); + +	Vector2<double> vec2 = {3.0, 4.0}; +	vec2.normalize(); +	EXPECT_FLOAT_EQ(vec2.x, 0.6); +	EXPECT_FLOAT_EQ(vec2.y, 0.8); + +	Vector2<long> vec3 = {3, 4}; +	vec3.normalize(); +	EXPECT_EQ(vec3.x, 0); +	EXPECT_EQ(vec3.y, 0); + +	Vector2<float> vec4 = {3.0f, 4.0f}; +	vec4.normalize(); +	EXPECT_FLOAT_EQ(vec4.x, 0.6f); +	EXPECT_FLOAT_EQ(vec4.y, 0.8f); +} + +TEST_F(Vector2Test, Length) { +	Vector2<int> vec = {3, 4}; +	EXPECT_EQ(vec.length(), 5); + +	Vector2<double> vec2 = {3.0, 4.0}; +	EXPECT_FLOAT_EQ(vec2.length(), 5.0); + +	Vector2<long> vec3 = {3, 4}; +	EXPECT_EQ(vec3.length(), 5); + +	Vector2<float> vec4 = {3.0f, 4.0f}; +	EXPECT_FLOAT_EQ(vec4.length(), 5.0f); +} + +TEST_F(Vector2Test, LengthSquared) { +	Vector2<int> vec = {3, 4}; +	EXPECT_EQ(vec.length_squared(), 25); + +	Vector2<double> vec2 = {3.0, 4.0}; +	EXPECT_FLOAT_EQ(vec2.length_squared(), 25.0); + +	Vector2<long> vec3 = {3, 4}; +	EXPECT_EQ(vec3.length_squared(), 25); + +	Vector2<float> vec4 = {3.0f, 4.0f}; +	EXPECT_FLOAT_EQ(vec4.length_squared(), 25.0f); +} + +TEST_F(Vector2Test, Dot) { +	Vector2<int> vec1 = {3, 4}; +	Vector2<int> vec2 = {5, 6}; +	EXPECT_EQ(vec1.dot(vec2), 39); + +	Vector2<double> vec3 = {3.0, 4.0}; +	Vector2<double> vec4 = {5.0, 6.0}; +	EXPECT_FLOAT_EQ(vec3.dot(vec4), 39.0); + +	Vector2<long> vec5 = {3, 4}; +	Vector2<long> vec6 = {5, 6}; +	EXPECT_EQ(vec5.dot(vec6), 39); + +	Vector2<float> vec7 = {3.0f, 4.0f}; +	Vector2<float> vec8 = {5.0f, 6.0f}; +	EXPECT_FLOAT_EQ(vec7.dot(vec8), 39.0f); +} + +TEST_F(Vector2Test, Distance) { +	Vector2<int> vec1 = {1, 1}; +	Vector2<int> vec2 = {4, 5}; +	EXPECT_EQ(vec1.distance(vec2), 5); + +	Vector2<double> vec3 = {1.0, 1.0}; +	Vector2<double> vec4 = {4.0, 5.0}; +	EXPECT_FLOAT_EQ(vec3.distance(vec4), 5.0); + +	Vector2<long> vec5 = {1, 1}; +	Vector2<long> vec6 = {4, 5}; +	EXPECT_EQ(vec5.distance(vec6), 5); + +	Vector2<float> vec7 = {1.0f, 1.0f}; +	Vector2<float> vec8 = {4.0f, 5.0f}; +	EXPECT_FLOAT_EQ(vec7.distance(vec8), 5.0f); +} + +TEST_F(Vector2Test, DistanceSquared) { +	Vector2<int> vec1 = {3, 4}; +	Vector2<int> vec2 = {5, 6}; +	EXPECT_EQ(vec1.distance_squared(vec2), 8); + +	Vector2<double> vec3 = {3.0, 4.0}; +	Vector2<double> vec4 = {5.0, 6.0}; +	EXPECT_FLOAT_EQ(vec3.distance_squared(vec4), 8.0); + +	Vector2<long> vec5 = {3, 4}; +	Vector2<long> vec6 = {5, 6}; +	EXPECT_EQ(vec5.distance_squared(vec6), 8); + +	Vector2<float> vec7 = {3.0f, 4.0f}; +	Vector2<float> vec8 = {5.0f, 6.0f}; +	EXPECT_FLOAT_EQ(vec7.distance_squared(vec8), 8.0f); +} + +TEST_F(Vector2Test, Perpendicular) { +	Vector2<int> vec = {3, 4}; +	Vector2<int> result = vec.perpendicular(); +	EXPECT_EQ(result.x, -4); +	EXPECT_EQ(result.y, 3); + +	Vector2<double> vec2 = {3.0, 4.0}; +	Vector2<double> result2 = vec2.perpendicular(); +	EXPECT_FLOAT_EQ(result2.x, -4.0); +	EXPECT_FLOAT_EQ(result2.y, 3.0); + +	Vector2<long> vec3 = {3, 4}; +	Vector2<long> result3 = vec3.perpendicular(); +	EXPECT_EQ(result3.x, -4); +	EXPECT_EQ(result3.y, 3); + +	Vector2<float> vec4 = {3.0f, 4.0f}; +	Vector2<float> result4 = vec4.perpendicular(); +	EXPECT_FLOAT_EQ(result4.x, -4.0f); +	EXPECT_FLOAT_EQ(result4.y, 3.0f); +} |