Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

removed RegisterRootObject (replaced by RegisterObject)

  • Property svn:eol-style set to native
File size: 19.3 KB
RevLine 
[9639]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
[9646]22        {
23            public:
24                BaseInterface1()
25                {
[9659]26                    RegisterObject(BaseInterface1);
[9646]27                }
[9639]28
[9646]29                virtual void test1() = 0;
30        };
31
[9639]32        class BaseInterface2 : public OrxonoxInterface
[9646]33        {
34            public:
35                BaseInterface2()
36                {
[9659]37                    RegisterObject(BaseInterface2);
[9646]38                }
[9639]39
[9646]40                virtual void test2() = 0;
41        };
42
[9639]43        class Interface1 : public BaseInterface1
[9646]44        {
45            public:
46                Interface1()
47                {
48                    RegisterObject(Interface1);
49                }
50        };
[9639]51
52        class Interface2 : public BaseInterface2
[9646]53        {
54            public:
55                Interface2()
56                {
57                    RegisterObject(Interface2);
58                }
59        };
[9639]60
61        class BaseClass : public OrxonoxClass
[9646]62        {
63            public:
64                BaseClass()
65                {
[9659]66                    RegisterObject(BaseClass);
[9646]67                }
68        };
[9639]69
70        class Class0 : public BaseClass
[9646]71        {
72            public:
73                Class0()
74                {
75                    RegisterObject(Class0);
76                }
77        };
[9639]78
79        class Class1 : public BaseClass, public Interface1
[9646]80        {
81            public:
82                Class1()
83                {
84                    RegisterObject(Class1);
85                }
[9639]86
[9646]87                virtual void test1() {}
88        };
89
[9639]90        class Class2a : public BaseClass, public Interface1, Interface2
[9646]91        {
92            public:
93                Class2a()
94                {
95                    RegisterObject(Class2a);
96                }
[9639]97
[9646]98                virtual void test1() {}
99                virtual void test2() {}
100        };
101
[9639]102        class Class2b : public BaseClass, public Interface2, Interface1
[9646]103        {
104            public:
105                Class2b()
106                {
107                    RegisterObject(Class2b);
108                }
[9639]109
[9646]110                virtual void test1() {}
111                virtual void test2() {}
112        };
113
[9639]114        class Class3 : public BaseClass, public BaseInterface1, BaseInterface2
[9646]115        {
116            public:
117                Class3()
118                {
119                    RegisterObject(Class3);
120                }
[9639]121
[9646]122                virtual void test1() {}
123                virtual void test2() {}
124        };
125
[9639]126        // Fixture
127        class IdentifierClassHierarchyTest : public ::testing::Test
128        {
129            public:
130                virtual void SetUp()
131                {
[9651]132                    registerClass("Context", new ClassFactoryWithContext<Context>());
133                    registerClass("Listable", new ClassFactoryWithContext<Listable>());
[9653]134                    registerClass("Configurable", new ClassFactoryNoArgs<Configurable>());
[9646]135                    registerClass("OrxonoxInterface", new ClassFactoryNoArgs<OrxonoxInterface>());
136                    registerClass("OrxonoxClass", new ClassFactoryNoArgs<OrxonoxClass>());
137                    registerClass("BaseInterface1", static_cast<ClassFactory<BaseInterface1>*>(NULL), false).inheritsFrom(Class(OrxonoxInterface));
138                    registerClass("BaseInterface2", static_cast<ClassFactory<BaseInterface2>*>(NULL), false).inheritsFrom(Class(OrxonoxInterface));
139                    registerClass("Interface1", static_cast<ClassFactory<Interface1>*>(NULL), false).inheritsFrom(Class(BaseInterface1));
140                    registerClass("Interface2", static_cast<ClassFactory<Interface2>*>(NULL), false).inheritsFrom(Class(BaseInterface2));
[9639]141                    registerClass("BaseClass", new ClassFactoryNoArgs<BaseClass>());
142                    registerClass("Class0", new ClassFactoryNoArgs<Class0>());
143                    registerClass("Class1", new ClassFactoryNoArgs<Class1>());
144                    registerClass("Class2a", new ClassFactoryNoArgs<Class2a>());
145                    registerClass("Class2b", new ClassFactoryNoArgs<Class2b>());
146                    registerClass("Class3", new ClassFactoryNoArgs<Class3>());
147
[9640]148                    IdentifierManager::getInstance().createClassHierarchy();
[9639]149                }
150
151                virtual void TearDown()
152                {
[9640]153                    IdentifierManager::getInstance().destroyAllIdentifiers();
[9639]154                }
155        };
[9646]156
157        bool contains(const std::set<const Identifier*> identifiers, Identifier* identifier)
158        {
159            return identifiers.find(identifier) != identifiers.end();
160        }
[9639]161    }
162
163    TEST(IdentifierClassHierarchyTest_NoFixture, NoInitialization)
164    {
165        {
166            Identifier* identifier = Class(BaseInterface1);
167            EXPECT_EQ(0u, identifier->getChildren().size());
168            EXPECT_EQ(0u, identifier->getParents().size());
169        }
170        {
171            Identifier* identifier = Class(BaseInterface2);
172            EXPECT_EQ(0u, identifier->getChildren().size());
173            EXPECT_EQ(0u, identifier->getParents().size());
174        }
175        {
176            Identifier* identifier = Class(Interface1);
177            EXPECT_EQ(0u, identifier->getChildren().size());
178            EXPECT_EQ(0u, identifier->getParents().size());
179        }
180        {
181            Identifier* identifier = Class(Interface2);
182            EXPECT_EQ(0u, identifier->getChildren().size());
183            EXPECT_EQ(0u, identifier->getParents().size());
184        }
185        {
186            Identifier* identifier = Class(BaseClass);
187            EXPECT_EQ(0u, identifier->getChildren().size());
188            EXPECT_EQ(0u, identifier->getParents().size());
189        }
190        {
191            Identifier* identifier = Class(Class0);
192            EXPECT_EQ(0u, identifier->getChildren().size());
193            EXPECT_EQ(0u, identifier->getParents().size());
194        }
195        {
196            Identifier* identifier = Class(Class1);
197            EXPECT_EQ(0u, identifier->getChildren().size());
198            EXPECT_EQ(0u, identifier->getParents().size());
199        }
200        {
201            Identifier* identifier = Class(Class2a);
202            EXPECT_EQ(0u, identifier->getChildren().size());
203            EXPECT_EQ(0u, identifier->getParents().size());
204        }
205        {
206            Identifier* identifier = Class(Class2b);
207            EXPECT_EQ(0u, identifier->getChildren().size());
208            EXPECT_EQ(0u, identifier->getParents().size());
209        }
210        {
211            Identifier* identifier = Class(Class3);
212            EXPECT_EQ(0u, identifier->getChildren().size());
213            EXPECT_EQ(0u, identifier->getParents().size());
214        }
215    }
216
217    TEST_F(IdentifierClassHierarchyTest, TestBaseInterface1)
218    {
219        Identifier* identifier = Class(BaseInterface1);
220
221        EXPECT_EQ(2u, identifier->getDirectChildren().size());
[9646]222        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Interface1)));
223        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class3)));
224
[9639]225        EXPECT_EQ(5u, identifier->getChildren().size());
[9646]226        EXPECT_TRUE(contains(identifier->getChildren(), Class(Interface1)));
227        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class3)));
228        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class1)));
229        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2a)));
230        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2b)));
231
232        EXPECT_EQ(1u, identifier->getDirectParents().size());
233        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxInterface)));
234
[9653]235        EXPECT_EQ(4u, identifier->getParents().size());
[9646]236        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
[9651]237        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
[9653]238        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
[9646]239        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
[9639]240    }
241
242    TEST_F(IdentifierClassHierarchyTest, TestBaseInterface2)
243    {
244        Identifier* identifier = Class(BaseInterface2);
245
246        EXPECT_EQ(2u, identifier->getDirectChildren().size());
[9646]247        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Interface2)));
248        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class3)));
249
[9639]250        EXPECT_EQ(4u, identifier->getChildren().size());
[9646]251        EXPECT_TRUE(contains(identifier->getChildren(), Class(Interface2)));
252        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class3)));
253        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2a)));
254        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2b)));
255
256        EXPECT_EQ(1u, identifier->getDirectParents().size());
257        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxInterface)));
258
[9653]259        EXPECT_EQ(4u, identifier->getParents().size());
[9646]260        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
[9651]261        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
[9653]262        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
[9646]263        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
[9639]264    }
265
266    TEST_F(IdentifierClassHierarchyTest, TestInterface1)
267    {
268        Identifier* identifier = Class(Interface1);
269
270        EXPECT_EQ(3u, identifier->getDirectChildren().size());
[9646]271        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class1)));
272        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2a)));
273        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2b)));
274
[9639]275        EXPECT_EQ(3u, identifier->getChildren().size());
[9646]276        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class1)));
277        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2a)));
278        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2b)));
279
[9639]280        EXPECT_EQ(1u, identifier->getDirectParents().size());
[9646]281        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseInterface1)));
282
[9653]283        EXPECT_EQ(5u, identifier->getParents().size());
[9646]284        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
[9651]285        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
[9653]286        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
[9646]287        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
288        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface1)));
[9639]289    }
290
291    TEST_F(IdentifierClassHierarchyTest, TestInterface2)
292    {
293        Identifier* identifier = Class(Interface2);
294
295        EXPECT_EQ(2u, identifier->getDirectChildren().size());
[9646]296        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2a)));
297        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2b)));
298
[9639]299        EXPECT_EQ(2u, identifier->getChildren().size());
[9646]300        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2a)));
301        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2b)));
302
[9639]303        EXPECT_EQ(1u, identifier->getDirectParents().size());
[9646]304        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseInterface2)));
305
[9653]306        EXPECT_EQ(5u, identifier->getParents().size());
[9646]307        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
[9651]308        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
[9653]309        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
[9646]310        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
311        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface2)));
[9639]312    }
313
314    TEST_F(IdentifierClassHierarchyTest, TestBaseClass)
315    {
316        Identifier* identifier = Class(BaseClass);
317
318        EXPECT_EQ(5u, identifier->getDirectChildren().size());
[9646]319        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class0)));
320        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class1)));
321        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2a)));
322        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2b)));
323        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class3)));
324
[9639]325        EXPECT_EQ(5u, identifier->getChildren().size());
[9646]326        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class0)));
327        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class1)));
328        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2a)));
329        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2b)));
330        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class3)));
331
332        EXPECT_EQ(1u, identifier->getDirectParents().size());
333        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxClass)));
334
[9653]335        EXPECT_EQ(4u, identifier->getParents().size());
[9646]336        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
[9651]337        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
[9653]338        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
[9646]339        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
[9639]340    }
341
342    TEST_F(IdentifierClassHierarchyTest, TestClass0)
343    {
344        Identifier* identifier = Class(Class0);
345
346        EXPECT_EQ(0u, identifier->getDirectChildren().size());
[9646]347
[9639]348        EXPECT_EQ(0u, identifier->getChildren().size());
[9646]349
[9639]350        EXPECT_EQ(1u, identifier->getDirectParents().size());
[9646]351        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
352
[9653]353        EXPECT_EQ(5u, identifier->getParents().size());
[9646]354        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
[9651]355        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
[9653]356        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
[9646]357        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
358        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
[9639]359    }
360
361    TEST_F(IdentifierClassHierarchyTest, TestClass1)
362    {
363        Identifier* identifier = Class(Class1);
364
365        EXPECT_EQ(0u, identifier->getDirectChildren().size());
[9646]366
[9639]367        EXPECT_EQ(0u, identifier->getChildren().size());
[9646]368
[9639]369        EXPECT_EQ(2u, identifier->getDirectParents().size());
[9646]370        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
371        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface1)));
372
[9653]373        EXPECT_EQ(8u, identifier->getParents().size());
[9646]374        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
[9651]375        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
[9653]376        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
[9646]377        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
378        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
379        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
380        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface1)));
381        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface1)));
[9639]382    }
383
384    TEST_F(IdentifierClassHierarchyTest, TestClass2a)
385    {
386        Identifier* identifier = Class(Class2a);
387
388        EXPECT_EQ(0u, identifier->getDirectChildren().size());
[9646]389
[9639]390        EXPECT_EQ(0u, identifier->getChildren().size());
[9646]391
[9639]392        EXPECT_EQ(3u, identifier->getDirectParents().size());
[9646]393        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
394        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface1)));
395        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface2)));
396
[9653]397        EXPECT_EQ(10u, identifier->getParents().size());
[9646]398        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
[9651]399        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
[9653]400        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
[9646]401        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
402        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
403        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
404        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface1)));
405        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface1)));
406        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface2)));
407        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface2)));
[9639]408    }
409
410    TEST_F(IdentifierClassHierarchyTest, TestClass2b)
411    {
412        Identifier* identifier = Class(Class2b);
413
414        EXPECT_EQ(0u, identifier->getDirectChildren().size());
[9646]415
[9639]416        EXPECT_EQ(0u, identifier->getChildren().size());
[9646]417
[9639]418        EXPECT_EQ(3u, identifier->getDirectParents().size());
[9646]419        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
420        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface1)));
421        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface2)));
422
[9653]423        EXPECT_EQ(10u, identifier->getParents().size());
[9646]424        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
[9651]425        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
[9653]426        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
[9646]427        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
428        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
429        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
430        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface1)));
431        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface1)));
432        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface2)));
433        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface2)));
[9639]434    }
435
436    TEST_F(IdentifierClassHierarchyTest, TestClass3)
437    {
438        Identifier* identifier = Class(Class3);
439
440        EXPECT_EQ(0u, identifier->getDirectChildren().size());
[9646]441
[9639]442        EXPECT_EQ(0u, identifier->getChildren().size());
[9646]443
[9639]444        EXPECT_EQ(3u, identifier->getDirectParents().size());
[9646]445        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
446        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseInterface1)));
447        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseInterface2)));
448
[9653]449        EXPECT_EQ(8u, identifier->getParents().size());
[9646]450        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
[9651]451        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
[9653]452        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
[9646]453        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
454        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
455        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
456        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface1)));
457        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface2)));
[9639]458    }
459}
Note: See TracBrowser for help on using the repository browser.