Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

register Listable in the framework

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