aboutsummaryrefslogtreecommitdiff
path: root/src/test/ECSTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ECSTest.cpp')
-rw-r--r--src/test/ECSTest.cpp163
1 files changed, 130 insertions, 33 deletions
diff --git a/src/test/ECSTest.cpp b/src/test/ECSTest.cpp
index af9d6f2..92436a9 100644
--- a/src/test/ECSTest.cpp
+++ b/src/test/ECSTest.cpp
@@ -1,23 +1,30 @@
#include <gtest/gtest.h>
#define protected public
+#define private public
-#include <crepe/ComponentManager.h>
#include <crepe/api/GameObject.h>
#include <crepe/api/Metadata.h>
#include <crepe/api/Transform.h>
#include <crepe/api/Vector2.h>
+#include <crepe/manager/ComponentManager.h>
using namespace std;
using namespace crepe;
class ECSTest : public ::testing::Test {
+ Mediator m;
+
public:
- ComponentManager mgr{};
+ ComponentManager mgr {m};
+
+ class TestComponent : public Component {
+ using Component::Component;
+ };
};
TEST_F(ECSTest, createGameObject) {
- GameObject obj = mgr.new_object("body", "person", vec2{0, 0}, 0, 1);
+ GameObject obj = mgr.new_object("body", "person", vec2 {0, 0}, 0, 1);
vector<reference_wrapper<Metadata>> metadata = mgr.get_components_by_type<Metadata>();
vector<reference_wrapper<Transform>> transform = mgr.get_components_by_type<Transform>();
@@ -37,8 +44,8 @@ TEST_F(ECSTest, createGameObject) {
}
TEST_F(ECSTest, deleteAllGameObjects) {
- GameObject obj0 = mgr.new_object("body", "person", vec2{0, 0}, 0, 1);
- GameObject obj1 = mgr.new_object("body", "person", vec2{0, 0}, 0, 1);
+ GameObject obj0 = mgr.new_object("body", "person", vec2 {0, 0}, 0, 1);
+ GameObject obj1 = mgr.new_object("body", "person", vec2 {0, 0}, 0, 1);
mgr.delete_all_components();
@@ -48,7 +55,7 @@ TEST_F(ECSTest, deleteAllGameObjects) {
EXPECT_EQ(metadata.size(), 0);
EXPECT_EQ(transform.size(), 0);
- GameObject obj2 = mgr.new_object("body2", "person2", vec2{1, 0}, 5, 1);
+ GameObject obj2 = mgr.new_object("body2", "person2", vec2 {1, 0}, 5, 1);
metadata = mgr.get_components_by_type<Metadata>();
transform = mgr.get_components_by_type<Transform>();
@@ -70,8 +77,8 @@ TEST_F(ECSTest, deleteAllGameObjects) {
}
TEST_F(ECSTest, deleteGameObject) {
- GameObject obj0 = mgr.new_object("body", "person", vec2{0, 0}, 0, 1);
- GameObject obj1 = mgr.new_object("body", "person", vec2{0, 0}, 0, 1);
+ GameObject obj0 = mgr.new_object("body", "person", vec2 {0, 0}, 0, 1);
+ GameObject obj1 = mgr.new_object("body", "person", vec2 {0, 0}, 0, 1);
mgr.delete_all_components_of_id(0);
@@ -96,7 +103,7 @@ TEST_F(ECSTest, deleteGameObject) {
TEST_F(ECSTest, manyGameObjects) {
for (int i = 0; i < 5000; i++) {
- GameObject obj = mgr.new_object("body", "person", vec2{0, 0}, 0, i);
+ GameObject obj = mgr.new_object("body", "person", vec2 {0, 0}, 0, i);
}
vector<reference_wrapper<Metadata>> metadata = mgr.get_components_by_type<Metadata>();
@@ -128,7 +135,7 @@ TEST_F(ECSTest, manyGameObjects) {
for (int i = 0; i < 10000 - 5000; i++) {
string tag = "person" + to_string(i);
- GameObject obj = mgr.new_object("body", tag, vec2{0, 0}, i, 0);
+ GameObject obj = mgr.new_object("body", tag, vec2 {0, 0}, i, 0);
}
metadata = mgr.get_components_by_type<Metadata>();
@@ -161,7 +168,7 @@ TEST_F(ECSTest, manyGameObjects) {
for (int i = 0; i < 10000; i++) {
string name = "body" + to_string(i);
- GameObject obj = mgr.new_object(name, "person", vec2{0, 0}, 0, 0);
+ GameObject obj = mgr.new_object(name, "person", vec2 {0, 0}, 0, 0);
}
metadata = mgr.get_components_by_type<Metadata>();
@@ -186,8 +193,8 @@ TEST_F(ECSTest, manyGameObjects) {
}
TEST_F(ECSTest, getComponentsByID) {
- GameObject obj0 = mgr.new_object("body", "person", vec2{0, 0}, 0, 1);
- GameObject obj1 = mgr.new_object("body", "person", vec2{0, 0}, 0, 1);
+ GameObject obj0 = mgr.new_object("body", "person", vec2 {0, 0}, 0, 1);
+ GameObject obj1 = mgr.new_object("body", "person", vec2 {0, 0}, 0, 1);
vector<reference_wrapper<Metadata>> metadata = mgr.get_components_by_id<Metadata>(0);
vector<reference_wrapper<Transform>> transform = mgr.get_components_by_id<Transform>(1);
@@ -210,19 +217,21 @@ TEST_F(ECSTest, getComponentsByID) {
TEST_F(ECSTest, tooMuchComponents) {
try {
- GameObject obj0 = mgr.new_object("body", "person", vec2{0, 0}, 0, 1);
- obj0.add_component<Transform>(vec2{10, 10}, 0, 1);
+ GameObject obj0 = mgr.new_object("body", "person", vec2 {0, 0}, 0, 1);
+ obj0.add_component<Transform>(vec2 {10, 10}, 0, 1);
} catch (const exception & e) {
- EXPECT_EQ(e.what(),
- string("Exceeded maximum number of instances for this component type"));
+ EXPECT_EQ(
+ e.what(), string("Exceeded maximum number of instances for this component type")
+ );
}
try {
- GameObject obj1 = mgr.new_object("body", "person", vec2{0, 0}, 0, 1);
+ GameObject obj1 = mgr.new_object("body", "person", vec2 {0, 0}, 0, 1);
obj1.add_component<Metadata>("body", "person");
} catch (const exception & e) {
- EXPECT_EQ(e.what(),
- string("Exceeded maximum number of instances for this component type"));
+ EXPECT_EQ(
+ e.what(), string("Exceeded maximum number of instances for this component type")
+ );
}
vector<reference_wrapper<Metadata>> metadata = mgr.get_components_by_type<Metadata>();
@@ -234,11 +243,11 @@ TEST_F(ECSTest, tooMuchComponents) {
TEST_F(ECSTest, partentChild) {
{
- GameObject body = mgr.new_object("body", "person", vec2{0, 0}, 0, 1);
- GameObject right_leg = mgr.new_object("rightLeg", "person", vec2{1, 1}, 0, 1);
- GameObject left_leg = mgr.new_object("leftLeg", "person", vec2{1, 1}, 0, 1);
- GameObject right_foot = mgr.new_object("rightFoot", "person", vec2{2, 2}, 0, 1);
- GameObject left_foot = mgr.new_object("leftFoot", "person", vec2{2, 2}, 0, 1);
+ GameObject body = mgr.new_object("body", "person", vec2 {0, 0}, 0, 1);
+ GameObject right_leg = mgr.new_object("rightLeg", "person", vec2 {1, 1}, 0, 1);
+ GameObject left_leg = mgr.new_object("leftLeg", "person", vec2 {1, 1}, 0, 1);
+ GameObject right_foot = mgr.new_object("rightFoot", "person", vec2 {2, 2}, 0, 1);
+ GameObject left_foot = mgr.new_object("leftFoot", "person", vec2 {2, 2}, 0, 1);
// Set the parent of each GameObject
right_foot.set_parent(right_leg);
@@ -283,10 +292,10 @@ TEST_F(ECSTest, partentChild) {
}
TEST_F(ECSTest, persistent) {
- GameObject obj0 = mgr.new_object("obj0", "obj0", vec2{0, 0}, 0, 1);
- GameObject obj1 = mgr.new_object("obj1", "obj1", vec2{0, 0}, 0, 1);
+ GameObject obj0 = mgr.new_object("obj0", "obj0", vec2 {0, 0}, 0, 1);
+ GameObject obj1 = mgr.new_object("obj1", "obj1", vec2 {0, 0}, 0, 1);
obj1.set_persistent();
- GameObject obj2 = mgr.new_object("obj2", "obj2", vec2{0, 0}, 0, 1);
+ GameObject obj2 = mgr.new_object("obj2", "obj2", vec2 {0, 0}, 0, 1);
vector<reference_wrapper<Metadata>> metadata = mgr.get_components_by_type<Metadata>();
vector<reference_wrapper<Transform>> transform = mgr.get_components_by_type<Transform>();
@@ -322,8 +331,8 @@ TEST_F(ECSTest, persistent) {
EXPECT_EQ(transform[0].get().position.x, 0);
EXPECT_EQ(transform[0].get().position.y, 0);
- GameObject obj3 = mgr.new_object("obj3", "obj3", vec2{0, 0}, 0, 5);
- GameObject obj4 = mgr.new_object("obj4", "obj4", vec2{0, 0}, 0, 5);
+ GameObject obj3 = mgr.new_object("obj3", "obj3", vec2 {0, 0}, 0, 5);
+ GameObject obj4 = mgr.new_object("obj4", "obj4", vec2 {0, 0}, 0, 5);
metadata = mgr.get_components_by_type<Metadata>();
transform = mgr.get_components_by_type<Transform>();
@@ -351,10 +360,10 @@ TEST_F(ECSTest, persistent) {
}
TEST_F(ECSTest, resetPersistent) {
- GameObject obj0 = mgr.new_object("obj0", "obj0", vec2{0, 0}, 0, 1);
- GameObject obj1 = mgr.new_object("obj1", "obj1", vec2{0, 0}, 0, 1);
+ GameObject obj0 = mgr.new_object("obj0", "obj0", vec2 {0, 0}, 0, 1);
+ GameObject obj1 = mgr.new_object("obj1", "obj1", vec2 {0, 0}, 0, 1);
obj1.set_persistent();
- GameObject obj2 = mgr.new_object("obj2", "obj2", vec2{0, 0}, 0, 1);
+ GameObject obj2 = mgr.new_object("obj2", "obj2", vec2 {0, 0}, 0, 1);
vector<reference_wrapper<Metadata>> metadata = mgr.get_components_by_type<Metadata>();
vector<reference_wrapper<Transform>> transform = mgr.get_components_by_type<Transform>();
@@ -385,3 +394,91 @@ 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);
+ }
+}
+
+TEST_F(ECSTest, Snapshot) {
+ GameObject foo = mgr.new_object("foo");
+
+ foo.transform.position = {1, 1};
+
+ ComponentManager::Snapshot snapshot = mgr.save();
+
+ foo.transform.position = {0, 0};
+
+ mgr.restore(snapshot);
+
+ EXPECT_EQ(foo.transform.position, (vec2 {1, 1}));
+}