Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core7/test/core/class/IdentifierNestedClassHierarchyTest.cc @ 10372

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

use lists instead of sets to store parent identifiers. this allows to store the exact order of initialization of parent classes.

File size: 15.8 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    // Tests the class hierarchy with classes that contain other classes as members.
10    //
11    //                    +------ Nested1         +------ Class1_notNested
12    //                    +------ Nested2         +------ Class2_oneNested
13    // OrxonoxClass <-----+------ BaseClass <-----+------ Class3_twoNested <----------- Class3_Child
14    //                                            +------ Class4_class1Nested
15    //                                            +------ Class5_class2Nested
16    //                                            +------ Class6_class3Nested <-------- Class6_Child
17
18    namespace
19    {
20        class Nested1 : public OrxonoxClass
21        {
22            public:
23                Nested1() { RegisterObject(Nested1); }
24        };
25
26        class Nested2 : public OrxonoxClass
27        {
28            public:
29                Nested2() { RegisterObject(Nested2); }
30        };
31
32        class BaseClass : public OrxonoxClass
33        {
34            public:
35                BaseClass() { RegisterObject(BaseClass); }
36        };
37
38        class Class1_notNested : public BaseClass
39        {
40            public:
41                Class1_notNested() { RegisterObject(Class1_notNested); }
42        };
43
44        class Class2_oneNested : public BaseClass
45        {
46            public:
47                Class2_oneNested() { RegisterObject(Class2_oneNested); }
48                Nested1 nested1_;
49        };
50
51        class Class3_twoNested : public BaseClass
52        {
53            public:
54                Class3_twoNested() { RegisterObject(Class3_twoNested); }
55                Nested1 nested1_;
56                Nested2 nested2_;
57        };
58
59        class Class4_class1Nested : public BaseClass
60        {
61            public:
62                Class4_class1Nested() { RegisterObject(Class4_class1Nested); }
63                Class1_notNested nested_;
64        };
65
66        class Class5_class2Nested : public BaseClass
67        {
68            public:
69                Class5_class2Nested() { RegisterObject(Class5_class2Nested); }
70                Class2_oneNested nested_;
71        };
72
73        class Class6_class3Nested : public BaseClass
74        {
75            public:
76                Class6_class3Nested() { RegisterObject(Class6_class3Nested); }
77                Class3_twoNested nested_;
78        };
79
80        class Class3_Child : public Class3_twoNested
81        {
82            public:
83                Class3_Child() { RegisterObject(Class3_Child); }
84        };
85
86        class Class6_Child : public Class6_class3Nested
87        {
88            public:
89                Class6_Child() { RegisterObject(Class6_Child); }
90        };
91
92        // Fixture
93        class IdentifierNestedClassHierarchyTest : public ::testing::Test
94        {
95            public:
96                virtual void SetUp()
97                {
98                    registerClass("Context", new ClassFactoryWithContext<Context>());
99                    registerClass("Listable", new ClassFactoryWithContext<Listable>());
100                    registerClass("Configurable", new ClassFactoryNoArgs<Configurable>());
101                    registerClass("OrxonoxClass", new ClassFactoryNoArgs<OrxonoxClass>());
102                    registerClass("Nested1", new ClassFactoryNoArgs<Nested1>());
103                    registerClass("Nested2", new ClassFactoryNoArgs<Nested2>());
104                    registerClass("BaseClass", new ClassFactoryNoArgs<BaseClass>());
105                    registerClass("Class1_notNested", new ClassFactoryNoArgs<Class1_notNested>());
106                    registerClass("Class2_oneNested", new ClassFactoryNoArgs<Class2_oneNested>());
107                    registerClass("Class3_twoNested", new ClassFactoryNoArgs<Class3_twoNested>());
108                    registerClass("Class4_class1Nested", new ClassFactoryNoArgs<Class4_class1Nested>());
109                    registerClass("Class5_class2Nested", new ClassFactoryNoArgs<Class5_class2Nested>());
110                    registerClass("Class6_class3Nested", new ClassFactoryNoArgs<Class6_class3Nested>());
111                    registerClass("Class3_Child", new ClassFactoryNoArgs<Class3_Child>());
112                    registerClass("Class6_Child", new ClassFactoryNoArgs<Class6_Child>());
113
114                    IdentifierManager::getInstance().createClassHierarchy();
115                }
116
117                virtual void TearDown()
118                {
119                    IdentifierManager::getInstance().destroyAllIdentifiers();
120                }
121        };
122
123        bool contains(const std::list<const Identifier*> identifiers, Identifier* identifier)
124        {
125            return std::find(identifiers.begin(), identifiers.end(), identifier) != identifiers.end();
126        }
127
128        bool contains(const std::set<const Identifier*> identifiers, Identifier* identifier)
129        {
130            return identifiers.find(identifier) != identifiers.end();
131        }
132    }
133
134    TEST_F(IdentifierNestedClassHierarchyTest, TestNested1)
135    {
136        Identifier* identifier = Class(Nested1);
137
138        EXPECT_EQ(0u, identifier->getDirectChildren().size());
139        EXPECT_EQ(0u, identifier->getChildren().size());
140
141        EXPECT_EQ(1u, identifier->getDirectParents().size());
142        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxClass)));
143
144        EXPECT_EQ(4u, identifier->getParents().size());
145        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
146        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
147        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
148        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
149    }
150
151    TEST_F(IdentifierNestedClassHierarchyTest, TestNested2)
152    {
153        Identifier* identifier = Class(Nested2);
154
155        EXPECT_EQ(0u, identifier->getDirectChildren().size());
156        EXPECT_EQ(0u, identifier->getChildren().size());
157
158        EXPECT_EQ(1u, identifier->getDirectParents().size());
159        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxClass)));
160
161        EXPECT_EQ(4u, identifier->getParents().size());
162        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
163        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
164        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
165        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
166    }
167
168    TEST_F(IdentifierNestedClassHierarchyTest, TestBaseClass)
169    {
170        Identifier* identifier = Class(BaseClass);
171
172        EXPECT_EQ(6u, identifier->getDirectChildren().size());
173        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class1_notNested)));
174        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2_oneNested)));
175        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class3_twoNested)));
176        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class4_class1Nested)));
177        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class5_class2Nested)));
178        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class6_class3Nested)));
179
180        EXPECT_EQ(8u, identifier->getChildren().size());
181        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class1_notNested)));
182        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2_oneNested)));
183        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class3_twoNested)));
184        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class4_class1Nested)));
185        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class5_class2Nested)));
186        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class6_class3Nested)));
187        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class3_Child)));
188        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class6_Child)));
189
190        EXPECT_EQ(1u, identifier->getDirectParents().size());
191        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxClass)));
192
193        EXPECT_EQ(4u, identifier->getParents().size());
194        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
195        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
196        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
197        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
198    }
199
200    TEST_F(IdentifierNestedClassHierarchyTest, TestClass1_notNested)
201    {
202        Identifier* identifier = Class(Class1_notNested);
203
204        EXPECT_EQ(0u, identifier->getDirectChildren().size());
205        EXPECT_EQ(0u, identifier->getChildren().size());
206
207        EXPECT_EQ(1u, identifier->getDirectParents().size());
208        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
209
210        EXPECT_EQ(5u, identifier->getParents().size());
211        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
212        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
213        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
214        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
215        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
216    }
217
218    TEST_F(IdentifierNestedClassHierarchyTest, TestClass2_oneNested)
219    {
220        Identifier* identifier = Class(Class2_oneNested);
221
222        EXPECT_EQ(0u, identifier->getDirectChildren().size());
223        EXPECT_EQ(0u, identifier->getChildren().size());
224
225        EXPECT_EQ(1u, identifier->getDirectParents().size());
226        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
227
228        EXPECT_EQ(5u, identifier->getParents().size());
229        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
230        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
231        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
232        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
233        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
234    }
235
236    TEST_F(IdentifierNestedClassHierarchyTest, TestClass3_twoNested)
237    {
238        Identifier* identifier = Class(Class3_twoNested);
239
240        EXPECT_EQ(1u, identifier->getDirectChildren().size());
241        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class3_Child)));
242
243        EXPECT_EQ(1u, identifier->getChildren().size());
244        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class3_Child)));
245
246        EXPECT_EQ(1u, identifier->getDirectParents().size());
247        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
248
249        EXPECT_EQ(5u, identifier->getParents().size());
250        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
251        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
252        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
253        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
254        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
255    }
256
257    TEST_F(IdentifierNestedClassHierarchyTest, TestClass4_class1Nested)
258    {
259        Identifier* identifier = Class(Class4_class1Nested);
260
261        EXPECT_EQ(0u, identifier->getDirectChildren().size());
262        EXPECT_EQ(0u, identifier->getChildren().size());
263
264        EXPECT_EQ(1u, identifier->getDirectParents().size());
265        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
266
267        EXPECT_EQ(5u, identifier->getParents().size());
268        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
269        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
270        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
271        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
272        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
273    }
274
275    TEST_F(IdentifierNestedClassHierarchyTest, TestClass5_class2Nested)
276    {
277        Identifier* identifier = Class(Class5_class2Nested);
278
279        EXPECT_EQ(0u, identifier->getDirectChildren().size());
280        EXPECT_EQ(0u, identifier->getChildren().size());
281
282        EXPECT_EQ(1u, identifier->getDirectParents().size());
283        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
284
285        EXPECT_EQ(5u, identifier->getParents().size());
286        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
287        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
288        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
289        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
290        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
291    }
292
293    TEST_F(IdentifierNestedClassHierarchyTest, TestClass6_class3Nested)
294    {
295        Identifier* identifier = Class(Class6_class3Nested);
296
297        EXPECT_EQ(1u, identifier->getDirectChildren().size());
298        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class6_Child)));
299
300        EXPECT_EQ(1u, identifier->getChildren().size());
301        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class6_Child)));
302
303        EXPECT_EQ(1u, identifier->getDirectParents().size());
304        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
305
306        EXPECT_EQ(5u, identifier->getParents().size());
307        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
308        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
309        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
310        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
311        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
312    }
313
314    TEST_F(IdentifierNestedClassHierarchyTest, TestClass3_Child)
315    {
316        Identifier* identifier = Class(Class3_Child);
317
318        EXPECT_EQ(0u, identifier->getDirectChildren().size());
319        EXPECT_EQ(0u, identifier->getChildren().size());
320
321        EXPECT_EQ(1u, identifier->getDirectParents().size());
322        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Class3_twoNested)));
323
324        EXPECT_EQ(6u, identifier->getParents().size());
325        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
326        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
327        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
328        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
329        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
330        EXPECT_TRUE(contains(identifier->getParents(), Class(Class3_twoNested)));
331    }
332
333    TEST_F(IdentifierNestedClassHierarchyTest, TestClass6_Child)
334    {
335        Identifier* identifier = Class(Class6_Child);
336
337        EXPECT_EQ(0u, identifier->getDirectChildren().size());
338        EXPECT_EQ(0u, identifier->getChildren().size());
339
340        EXPECT_EQ(1u, identifier->getDirectParents().size());
341        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Class6_class3Nested)));
342
343        EXPECT_EQ(6u, identifier->getParents().size());
344        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
345        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
346        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
347        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
348        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
349        EXPECT_TRUE(contains(identifier->getParents(), Class(Class6_class3Nested)));
350    }
351}
Note: See TracBrowser for help on using the repository browser.