Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 10379 was 10372, checked in by landauf, 10 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.