Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core7/test/core/class/IdentifierSimpleClassHierarchyTest.cc @ 10535

Last change on this file since 10535 was 10535, checked in by landauf, 9 years ago

statically initialized instances are now registered with a type. CoreStaticInitializationHandler initializes all instances in core, NetworkStaticInitializationHandler initializes all instances in network.

  • Property svn:eol-style set to native
File size: 5.1 KB
Line 
1#include <gtest/gtest.h>
2#include "core/CoreIncludes.h"
3#include "core/class/Identifiable.h"
4#include "core/class/OrxonoxClass.h"
5#include "core/class/OrxonoxInterface.h"
6#include "core/module/ModuleInstance.h"
7
8namespace orxonox
9{
10    namespace
11    {
12        class Interface : virtual public OrxonoxInterface
13        {
14            public:
15                Interface()
16                {
17                    RegisterObject(Interface);
18                }
19
20                virtual void test() = 0;
21        };
22
23        class BaseClass : public OrxonoxClass
24        {
25            public:
26                BaseClass()
27                {
28                    RegisterObject(BaseClass);
29                }
30        };
31
32        class RealClass : public BaseClass, public Interface
33        {
34            public:
35                RealClass()
36                {
37                    RegisterObject(RealClass);
38                }
39
40                virtual void test() {}
41        };
42
43        RegisterAbstractClass(Interface).inheritsFrom<OrxonoxInterface>();
44        RegisterClassNoArgs(BaseClass);
45        RegisterClassNoArgs(RealClass);
46
47        // Fixture
48        class IdentifierSimpleClassHierarchyTest : public ::testing::Test
49        {
50            public:
51                virtual void SetUp()
52                {
53                    ModuleInstance::getCurrentModuleInstance()->loadAllStaticallyInitializedInstances(StaticInitialization::IDENTIFIER);
54                    Identifier::initConfigValues_s = false; // TODO: hack!
55                    IdentifierManager::getInstance().createClassHierarchy();
56                }
57
58                virtual void TearDown()
59                {
60                    IdentifierManager::getInstance().destroyClassHierarchy();
61                    ModuleInstance::getCurrentModuleInstance()->unloadAllStaticallyInitializedInstances(StaticInitialization::IDENTIFIER);
62                }
63        };
64
65        bool contains(const std::list<const Identifier*> identifiers, Identifier* identifier)
66        {
67            return std::find(identifiers.begin(), identifiers.end(), identifier) != identifiers.end();
68        }
69
70        bool contains(const std::set<const Identifier*> identifiers, Identifier* identifier)
71        {
72            return identifiers.find(identifier) != identifiers.end();
73        }
74    }
75
76    TEST_F(IdentifierSimpleClassHierarchyTest, TestInterface)
77    {
78        Identifier* identifier = Class(Interface);
79
80        EXPECT_EQ(1u, identifier->getDirectChildren().size());
81        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(RealClass)));
82
83        EXPECT_EQ(1u, identifier->getChildren().size());
84        EXPECT_TRUE(contains(identifier->getChildren(), Class(RealClass)));
85
86        EXPECT_EQ(1u, identifier->getDirectParents().size());
87        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxInterface)));
88
89        EXPECT_EQ(4u, identifier->getParents().size());
90        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
91        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
92        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
93        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
94    }
95
96    TEST_F(IdentifierSimpleClassHierarchyTest, BaseClass)
97    {
98        Identifier* identifier = Class(BaseClass);
99
100        EXPECT_EQ(1u, identifier->getDirectChildren().size());
101        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(RealClass)));
102
103        EXPECT_EQ(1u, identifier->getChildren().size());
104        EXPECT_TRUE(contains(identifier->getChildren(), Class(RealClass)));
105
106        EXPECT_EQ(1u, identifier->getDirectParents().size());
107        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxClass)));
108
109        EXPECT_EQ(4u, identifier->getParents().size());
110        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
111        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
112        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
113        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
114    }
115
116    TEST_F(IdentifierSimpleClassHierarchyTest, RealClass)
117    {
118        Identifier* identifier = Class(RealClass);
119
120        EXPECT_EQ(0u, identifier->getDirectChildren().size());
121
122        EXPECT_EQ(0u, identifier->getChildren().size());
123
124        EXPECT_EQ(2u, identifier->getDirectParents().size());
125        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface)));
126        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
127
128        EXPECT_EQ(7u, identifier->getParents().size());
129        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
130        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
131        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
132        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
133        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
134        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface)));
135        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
136    }
137}
Note: See TracBrowser for help on using the repository browser.