Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core6/test/core/class/IdentifierClassHierarchyTest.cc @ 9640

Last change on this file since 9640 was 9640, checked in by landauf, 11 years ago

made IdentifierManager a self-initializing singleton

  • Property svn:eol-style set to native
File size: 8.7 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
7namespace orxonox
8{
9    //                 +------ Class0
10    // BaseClass <-----+---------------------+--- Class1
11    //                 +---------------------+-+- Class2a
12    //                 +---------------------+-+- Class2b
13    //                 +-+-+-- Class3        | |
14    //                   | |                 | |
15    // BaseInterface1 <--+---- Interface1 <--´ |
16    //                     |                   |
17    // BaseInterface2 <----+-- Interface2 <----´
18
19    namespace
20    {
21        class BaseInterface1 : public OrxonoxInterface
22            { public: BaseInterface1() { RegisterRootObject(BaseInterface1); } };
23
24        class BaseInterface2 : public OrxonoxInterface
25            { public: BaseInterface2() { RegisterRootObject(BaseInterface2); } };
26
27        class Interface1 : public BaseInterface1
28            { public: Interface1() { RegisterObject(Interface1); } };
29
30        class Interface2 : public BaseInterface2
31            { public: Interface2() { RegisterObject(Interface2); } };
32
33        class BaseClass : public OrxonoxClass
34            { public: BaseClass() { RegisterRootObject(BaseClass); } };
35
36        class Class0 : public BaseClass
37            { public: Class0() { RegisterObject(Class0); } };
38
39        class Class1 : public BaseClass, public Interface1
40            { public: Class1() { RegisterObject(Class1); } };
41
42        class Class2a : public BaseClass, public Interface1, Interface2
43            { public: Class2a() { RegisterObject(Class2a); } };
44
45        class Class2b : public BaseClass, public Interface2, Interface1
46            { public: Class2b() { RegisterObject(Class2b); } };
47
48        class Class3 : public BaseClass, public BaseInterface1, BaseInterface2
49            { public: Class3() { RegisterObject(Class3); } };
50
51        // Fixture
52        class IdentifierClassHierarchyTest : public ::testing::Test
53        {
54            public:
55                virtual void SetUp()
56                {
57                    registerClass("BaseInterface1", new ClassFactoryNoArgs<BaseInterface1>());
58                    registerClass("BaseInterface2", new ClassFactoryNoArgs<BaseInterface2>());
59                    registerClass("Interface1", new ClassFactoryNoArgs<Interface1>());
60                    registerClass("Interface2", new ClassFactoryNoArgs<Interface2>());
61                    registerClass("BaseClass", new ClassFactoryNoArgs<BaseClass>());
62                    registerClass("Class0", new ClassFactoryNoArgs<Class0>());
63                    registerClass("Class1", new ClassFactoryNoArgs<Class1>());
64                    registerClass("Class2a", new ClassFactoryNoArgs<Class2a>());
65                    registerClass("Class2b", new ClassFactoryNoArgs<Class2b>());
66                    registerClass("Class3", new ClassFactoryNoArgs<Class3>());
67
68                    IdentifierManager::getInstance().createClassHierarchy();
69                }
70
71                virtual void TearDown()
72                {
73                    IdentifierManager::getInstance().destroyAllIdentifiers();
74                }
75        };
76    }
77
78    TEST(IdentifierClassHierarchyTest_NoFixture, NoInitialization)
79    {
80        {
81            Identifier* identifier = Class(BaseInterface1);
82            EXPECT_EQ(0u, identifier->getChildren().size());
83            EXPECT_EQ(0u, identifier->getParents().size());
84        }
85        {
86            Identifier* identifier = Class(BaseInterface2);
87            EXPECT_EQ(0u, identifier->getChildren().size());
88            EXPECT_EQ(0u, identifier->getParents().size());
89        }
90        {
91            Identifier* identifier = Class(Interface1);
92            EXPECT_EQ(0u, identifier->getChildren().size());
93            EXPECT_EQ(0u, identifier->getParents().size());
94        }
95        {
96            Identifier* identifier = Class(Interface2);
97            EXPECT_EQ(0u, identifier->getChildren().size());
98            EXPECT_EQ(0u, identifier->getParents().size());
99        }
100        {
101            Identifier* identifier = Class(BaseClass);
102            EXPECT_EQ(0u, identifier->getChildren().size());
103            EXPECT_EQ(0u, identifier->getParents().size());
104        }
105        {
106            Identifier* identifier = Class(Class0);
107            EXPECT_EQ(0u, identifier->getChildren().size());
108            EXPECT_EQ(0u, identifier->getParents().size());
109        }
110        {
111            Identifier* identifier = Class(Class1);
112            EXPECT_EQ(0u, identifier->getChildren().size());
113            EXPECT_EQ(0u, identifier->getParents().size());
114        }
115        {
116            Identifier* identifier = Class(Class2a);
117            EXPECT_EQ(0u, identifier->getChildren().size());
118            EXPECT_EQ(0u, identifier->getParents().size());
119        }
120        {
121            Identifier* identifier = Class(Class2b);
122            EXPECT_EQ(0u, identifier->getChildren().size());
123            EXPECT_EQ(0u, identifier->getParents().size());
124        }
125        {
126            Identifier* identifier = Class(Class3);
127            EXPECT_EQ(0u, identifier->getChildren().size());
128            EXPECT_EQ(0u, identifier->getParents().size());
129        }
130    }
131
132    TEST_F(IdentifierClassHierarchyTest, TestBaseInterface1)
133    {
134        Identifier* identifier = Class(BaseInterface1);
135
136        EXPECT_EQ(2u, identifier->getDirectChildren().size());
137        EXPECT_EQ(5u, identifier->getChildren().size());
138        EXPECT_EQ(0u, identifier->getDirectParents().size());
139        EXPECT_EQ(0u, identifier->getParents().size());
140    }
141
142    TEST_F(IdentifierClassHierarchyTest, TestBaseInterface2)
143    {
144        Identifier* identifier = Class(BaseInterface2);
145
146        EXPECT_EQ(2u, identifier->getDirectChildren().size());
147        EXPECT_EQ(4u, identifier->getChildren().size());
148        EXPECT_EQ(0u, identifier->getDirectParents().size());
149        EXPECT_EQ(0u, identifier->getParents().size());
150    }
151
152    TEST_F(IdentifierClassHierarchyTest, TestInterface1)
153    {
154        Identifier* identifier = Class(Interface1);
155
156        EXPECT_EQ(3u, identifier->getDirectChildren().size());
157        EXPECT_EQ(3u, identifier->getChildren().size());
158        EXPECT_EQ(1u, identifier->getDirectParents().size());
159        EXPECT_EQ(1u, identifier->getParents().size());
160    }
161
162    TEST_F(IdentifierClassHierarchyTest, TestInterface2)
163    {
164        Identifier* identifier = Class(Interface2);
165
166        EXPECT_EQ(2u, identifier->getDirectChildren().size());
167        EXPECT_EQ(2u, identifier->getChildren().size());
168        EXPECT_EQ(1u, identifier->getDirectParents().size());
169        EXPECT_EQ(1u, identifier->getParents().size());
170    }
171
172    TEST_F(IdentifierClassHierarchyTest, TestBaseClass)
173    {
174        Identifier* identifier = Class(BaseClass);
175
176        EXPECT_EQ(5u, identifier->getDirectChildren().size());
177        EXPECT_EQ(5u, identifier->getChildren().size());
178        EXPECT_EQ(0u, identifier->getDirectParents().size());
179        EXPECT_EQ(0u, identifier->getParents().size());
180    }
181
182    TEST_F(IdentifierClassHierarchyTest, TestClass0)
183    {
184        Identifier* identifier = Class(Class0);
185
186        EXPECT_EQ(0u, identifier->getDirectChildren().size());
187        EXPECT_EQ(0u, identifier->getChildren().size());
188        EXPECT_EQ(1u, identifier->getDirectParents().size());
189        EXPECT_EQ(1u, identifier->getParents().size());
190    }
191
192    TEST_F(IdentifierClassHierarchyTest, TestClass1)
193    {
194        Identifier* identifier = Class(Class1);
195
196        EXPECT_EQ(0u, identifier->getDirectChildren().size());
197        EXPECT_EQ(0u, identifier->getChildren().size());
198        EXPECT_EQ(2u, identifier->getDirectParents().size());
199        EXPECT_EQ(3u, identifier->getParents().size());
200    }
201
202    TEST_F(IdentifierClassHierarchyTest, TestClass2a)
203    {
204        Identifier* identifier = Class(Class2a);
205
206        EXPECT_EQ(0u, identifier->getDirectChildren().size());
207        EXPECT_EQ(0u, identifier->getChildren().size());
208        EXPECT_EQ(3u, identifier->getDirectParents().size());
209        EXPECT_EQ(5u, identifier->getParents().size());
210    }
211
212    TEST_F(IdentifierClassHierarchyTest, TestClass2b)
213    {
214        Identifier* identifier = Class(Class2b);
215
216        EXPECT_EQ(0u, identifier->getDirectChildren().size());
217        EXPECT_EQ(0u, identifier->getChildren().size());
218        EXPECT_EQ(3u, identifier->getDirectParents().size());
219        EXPECT_EQ(5u, identifier->getParents().size());
220    }
221
222    TEST_F(IdentifierClassHierarchyTest, TestClass3)
223    {
224        Identifier* identifier = Class(Class3);
225
226        EXPECT_EQ(0u, identifier->getDirectChildren().size());
227        EXPECT_EQ(0u, identifier->getChildren().size());
228        EXPECT_EQ(3u, identifier->getDirectParents().size());
229        EXPECT_EQ(3u, identifier->getParents().size());
230    }
231}
Note: See TracBrowser for help on using the repository browser.