#include #include "core/CoreIncludes.h" #include "core/class/Identifiable.h" #include "core/class/SubclassIdentifier.h" #include "core/class/OrxonoxClass.h" namespace orxonox { namespace { class TestClass : public OrxonoxClass { public: TestClass(Context* context = NULL) { RegisterRootObject(TestClass); } }; class TestSubclass : public TestClass { public: TestSubclass(Context* context = NULL) { RegisterObject(TestSubclass); } }; RegisterClass(TestClass); RegisterClass(TestSubclass); } TEST(SubclassIdentifierTest, CanCreateIdentifier) { TestSubclass test; SubclassIdentifier subclassIdentifier; } TEST(SubclassIdentifierTest, DefaultsToNormalIdentifier) { TestSubclass test; SubclassIdentifier subclassIdentifier; EXPECT_EQ(Class(TestClass), subclassIdentifier.getIdentifier()); } TEST(SubclassIdentifierTest, CanAssignIdentifierOfSubclass) { TestSubclass test; IdentifierManager::createClassHierarchy(); SubclassIdentifier subclassIdentifier; subclassIdentifier = Class(TestSubclass); EXPECT_EQ(Class(TestSubclass), subclassIdentifier.getIdentifier()); } TEST(SubclassIdentifierTest, CanCreateSubclass) { TestSubclass test; IdentifierManager::createClassHierarchy(); SubclassIdentifier subclassIdentifier; subclassIdentifier = Class(TestSubclass); TestClass* instance = subclassIdentifier.fabricate(NULL); ASSERT_TRUE(instance != NULL); EXPECT_EQ(Class(TestSubclass), instance->getIdentifier()); delete instance; } }