Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core7/test/core/class/IdentifierClassHierarchyTest.cc @ 10400

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

fixed tests. however there are some open issues:

  • the class-hierarchy must be built exactly 1 times in core_test. this is currently done in CommandTest.cc because that's the first test to run in core_test which actually needs the class hierarchy. the order of tests is not guaranteed though, so this should be solved more generic
  • during creation of class hierarchy, config values are used. this fails in the tests, so it had to be disabled with a static flag in Identifier. this should be solved in a cleaner way.
  • because the class hierarchy is now statically generated for all tests in core_test in CommandTest.cc, there is no way to test identifiers in an uninitialized state. because of this, three tests had to be disabled (*_NoFixture tests)

⇒ make the creation of the class hierarchy more modular and fix these issues

  • 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 : virtual public OrxonoxInterface
22        {
23            public:
24                BaseInterface1()
25                {
26                    RegisterObject(BaseInterface1);
27                }
28
29                virtual void test1() = 0;
30        };
31
32        class BaseInterface2 : virtual public OrxonoxInterface
33        {
34            public:
35                BaseInterface2()
36                {
37                    RegisterObject(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                    RegisterObject(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        RegisterAbstractClass(BaseInterface1).inheritsFrom<OrxonoxInterface>();
127        RegisterAbstractClass(BaseInterface2).inheritsFrom<OrxonoxInterface>();
128        RegisterAbstractClass(Interface1).inheritsFrom<BaseInterface1>();
129        RegisterAbstractClass(Interface2).inheritsFrom<BaseInterface2>();
130        RegisterClassNoArgs(BaseClass);
131        RegisterClassNoArgs(Class0);
132        RegisterClassNoArgs(Class1);
133        RegisterClassNoArgs(Class2a);
134        RegisterClassNoArgs(Class2b);
135        RegisterClassNoArgs(Class3);
136
137        // Fixture
138        class IdentifierClassHierarchyTest : public ::testing::Test
139        {
140            public:
141                virtual void SetUp()
142                {
143                }
144
145                virtual void TearDown()
146                {
147                }
148        };
149
150        bool contains(const std::list<const Identifier*> identifiers, Identifier* identifier)
151        {
152            return std::find(identifiers.begin(), identifiers.end(), identifier) != identifiers.end();
153        }
154
155        bool contains(const std::set<const Identifier*> identifiers, Identifier* identifier)
156        {
157            return identifiers.find(identifier) != identifiers.end();
158        }
159    }
160
161//    TEST(IdentifierClassHierarchyTest_NoFixture, NoInitialization)
162//    {
163//        {
164//            Identifier* identifier = Class(BaseInterface1);
165//            EXPECT_EQ(0u, identifier->getChildren().size());
166//            EXPECT_EQ(0u, identifier->getParents().size());
167//        }
168//        {
169//            Identifier* identifier = Class(BaseInterface2);
170//            EXPECT_EQ(0u, identifier->getChildren().size());
171//            EXPECT_EQ(0u, identifier->getParents().size());
172//        }
173//        {
174//            Identifier* identifier = Class(Interface1);
175//            EXPECT_EQ(0u, identifier->getChildren().size());
176//            EXPECT_EQ(0u, identifier->getParents().size());
177//        }
178//        {
179//            Identifier* identifier = Class(Interface2);
180//            EXPECT_EQ(0u, identifier->getChildren().size());
181//            EXPECT_EQ(0u, identifier->getParents().size());
182//        }
183//        {
184//            Identifier* identifier = Class(BaseClass);
185//            EXPECT_EQ(0u, identifier->getChildren().size());
186//            EXPECT_EQ(0u, identifier->getParents().size());
187//        }
188//        {
189//            Identifier* identifier = Class(Class0);
190//            EXPECT_EQ(0u, identifier->getChildren().size());
191//            EXPECT_EQ(0u, identifier->getParents().size());
192//        }
193//        {
194//            Identifier* identifier = Class(Class1);
195//            EXPECT_EQ(0u, identifier->getChildren().size());
196//            EXPECT_EQ(0u, identifier->getParents().size());
197//        }
198//        {
199//            Identifier* identifier = Class(Class2a);
200//            EXPECT_EQ(0u, identifier->getChildren().size());
201//            EXPECT_EQ(0u, identifier->getParents().size());
202//        }
203//        {
204//            Identifier* identifier = Class(Class2b);
205//            EXPECT_EQ(0u, identifier->getChildren().size());
206//            EXPECT_EQ(0u, identifier->getParents().size());
207//        }
208//        {
209//            Identifier* identifier = Class(Class3);
210//            EXPECT_EQ(0u, identifier->getChildren().size());
211//            EXPECT_EQ(0u, identifier->getParents().size());
212//        }
213//    }
214
215    TEST_F(IdentifierClassHierarchyTest, TestBaseInterface1)
216    {
217        Identifier* identifier = Class(BaseInterface1);
218
219        EXPECT_EQ(2u, identifier->getDirectChildren().size());
220        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Interface1)));
221        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class3)));
222
223        EXPECT_EQ(5u, identifier->getChildren().size());
224        EXPECT_TRUE(contains(identifier->getChildren(), Class(Interface1)));
225        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class3)));
226        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class1)));
227        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2a)));
228        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2b)));
229
230        EXPECT_EQ(1u, identifier->getDirectParents().size());
231        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxInterface)));
232
233        EXPECT_EQ(4u, identifier->getParents().size());
234        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
235        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
236        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
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(4u, 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(Configurable)));
261        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
262    }
263
264    TEST_F(IdentifierClassHierarchyTest, TestInterface1)
265    {
266        Identifier* identifier = Class(Interface1);
267
268        EXPECT_EQ(3u, identifier->getDirectChildren().size());
269        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class1)));
270        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2a)));
271        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2b)));
272
273        EXPECT_EQ(3u, identifier->getChildren().size());
274        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class1)));
275        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2a)));
276        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2b)));
277
278        EXPECT_EQ(1u, identifier->getDirectParents().size());
279        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseInterface1)));
280
281        EXPECT_EQ(5u, identifier->getParents().size());
282        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
283        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
284        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
285        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
286        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface1)));
287    }
288
289    TEST_F(IdentifierClassHierarchyTest, TestInterface2)
290    {
291        Identifier* identifier = Class(Interface2);
292
293        EXPECT_EQ(2u, identifier->getDirectChildren().size());
294        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2a)));
295        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2b)));
296
297        EXPECT_EQ(2u, identifier->getChildren().size());
298        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2a)));
299        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2b)));
300
301        EXPECT_EQ(1u, identifier->getDirectParents().size());
302        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseInterface2)));
303
304        EXPECT_EQ(5u, identifier->getParents().size());
305        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
306        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
307        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
308        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
309        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface2)));
310    }
311
312    TEST_F(IdentifierClassHierarchyTest, TestBaseClass)
313    {
314        Identifier* identifier = Class(BaseClass);
315
316        EXPECT_EQ(5u, identifier->getDirectChildren().size());
317        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class0)));
318        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class1)));
319        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2a)));
320        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2b)));
321        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class3)));
322
323        EXPECT_EQ(5u, identifier->getChildren().size());
324        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class0)));
325        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class1)));
326        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2a)));
327        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2b)));
328        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class3)));
329
330        EXPECT_EQ(1u, identifier->getDirectParents().size());
331        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxClass)));
332
333        EXPECT_EQ(4u, identifier->getParents().size());
334        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
335        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
336        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
337        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
338    }
339
340    TEST_F(IdentifierClassHierarchyTest, TestClass0)
341    {
342        Identifier* identifier = Class(Class0);
343
344        EXPECT_EQ(0u, identifier->getDirectChildren().size());
345
346        EXPECT_EQ(0u, identifier->getChildren().size());
347
348        EXPECT_EQ(1u, identifier->getDirectParents().size());
349        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
350
351        EXPECT_EQ(5u, identifier->getParents().size());
352        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
353        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
354        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
355        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
356        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
357    }
358
359    TEST_F(IdentifierClassHierarchyTest, TestClass1)
360    {
361        Identifier* identifier = Class(Class1);
362
363        EXPECT_EQ(0u, identifier->getDirectChildren().size());
364
365        EXPECT_EQ(0u, identifier->getChildren().size());
366
367        EXPECT_EQ(2u, identifier->getDirectParents().size());
368        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
369        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface1)));
370
371        EXPECT_EQ(8u, identifier->getParents().size());
372        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
373        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
374        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
375        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
376        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
377        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
378        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface1)));
379        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface1)));
380    }
381
382    TEST_F(IdentifierClassHierarchyTest, TestClass2a)
383    {
384        Identifier* identifier = Class(Class2a);
385
386        EXPECT_EQ(0u, identifier->getDirectChildren().size());
387
388        EXPECT_EQ(0u, identifier->getChildren().size());
389
390        EXPECT_EQ(3u, identifier->getDirectParents().size());
391        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
392        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface1)));
393        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface2)));
394
395        EXPECT_EQ(10u, identifier->getParents().size());
396        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
397        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
398        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
399        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
400        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
401        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
402        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface1)));
403        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface1)));
404        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface2)));
405        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface2)));
406    }
407
408    TEST_F(IdentifierClassHierarchyTest, TestClass2b)
409    {
410        Identifier* identifier = Class(Class2b);
411
412        EXPECT_EQ(0u, identifier->getDirectChildren().size());
413
414        EXPECT_EQ(0u, identifier->getChildren().size());
415
416        EXPECT_EQ(3u, identifier->getDirectParents().size());
417        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
418        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface1)));
419        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface2)));
420
421        EXPECT_EQ(10u, identifier->getParents().size());
422        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
423        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
424        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
425        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
426        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
427        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
428        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface1)));
429        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface1)));
430        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface2)));
431        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface2)));
432    }
433
434    TEST_F(IdentifierClassHierarchyTest, TestClass3)
435    {
436        Identifier* identifier = Class(Class3);
437
438        EXPECT_EQ(0u, identifier->getDirectChildren().size());
439
440        EXPECT_EQ(0u, identifier->getChildren().size());
441
442        EXPECT_EQ(3u, identifier->getDirectParents().size());
443        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
444        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseInterface1)));
445        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseInterface2)));
446
447        EXPECT_EQ(8u, identifier->getParents().size());
448        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
449        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
450        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
451        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
452        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
453        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
454        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface1)));
455        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface2)));
456    }
457}
Note: See TracBrowser for help on using the repository browser.