Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core7/test/core/class/IdentifierNestedClassHierarchyTest.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

File size: 14.7 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        RegisterClassNoArgs(Nested1);
93        RegisterClassNoArgs(Nested2);
94        RegisterClassNoArgs(BaseClass);
95        RegisterClassNoArgs(Class1_notNested);
96        RegisterClassNoArgs(Class2_oneNested);
97        RegisterClassNoArgs(Class3_twoNested);
98        RegisterClassNoArgs(Class4_class1Nested);
99        RegisterClassNoArgs(Class5_class2Nested);
100        RegisterClassNoArgs(Class6_class3Nested);
101        RegisterClassNoArgs(Class3_Child);
102        RegisterClassNoArgs(Class6_Child);
103
104        // Fixture
105        class IdentifierNestedClassHierarchyTest : public ::testing::Test
106        {
107            public:
108                virtual void SetUp()
109                {
110                }
111
112                virtual void TearDown()
113                {
114                }
115        };
116
117        bool contains(const std::list<const Identifier*> identifiers, Identifier* identifier)
118        {
119            return std::find(identifiers.begin(), identifiers.end(), identifier) != identifiers.end();
120        }
121
122        bool contains(const std::set<const Identifier*> identifiers, Identifier* identifier)
123        {
124            return identifiers.find(identifier) != identifiers.end();
125        }
126    }
127
128    TEST_F(IdentifierNestedClassHierarchyTest, TestNested1)
129    {
130        Identifier* identifier = Class(Nested1);
131
132        EXPECT_EQ(0u, identifier->getDirectChildren().size());
133        EXPECT_EQ(0u, identifier->getChildren().size());
134
135        EXPECT_EQ(1u, identifier->getDirectParents().size());
136        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxClass)));
137
138        EXPECT_EQ(4u, identifier->getParents().size());
139        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
140        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
141        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
142        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
143    }
144
145    TEST_F(IdentifierNestedClassHierarchyTest, TestNested2)
146    {
147        Identifier* identifier = Class(Nested2);
148
149        EXPECT_EQ(0u, identifier->getDirectChildren().size());
150        EXPECT_EQ(0u, identifier->getChildren().size());
151
152        EXPECT_EQ(1u, identifier->getDirectParents().size());
153        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxClass)));
154
155        EXPECT_EQ(4u, identifier->getParents().size());
156        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
157        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
158        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
159        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
160    }
161
162    TEST_F(IdentifierNestedClassHierarchyTest, TestBaseClass)
163    {
164        Identifier* identifier = Class(BaseClass);
165
166        EXPECT_EQ(6u, identifier->getDirectChildren().size());
167        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class1_notNested)));
168        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2_oneNested)));
169        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class3_twoNested)));
170        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class4_class1Nested)));
171        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class5_class2Nested)));
172        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class6_class3Nested)));
173
174        EXPECT_EQ(8u, identifier->getChildren().size());
175        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class1_notNested)));
176        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2_oneNested)));
177        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class3_twoNested)));
178        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class4_class1Nested)));
179        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class5_class2Nested)));
180        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class6_class3Nested)));
181        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class3_Child)));
182        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class6_Child)));
183
184        EXPECT_EQ(1u, identifier->getDirectParents().size());
185        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxClass)));
186
187        EXPECT_EQ(4u, identifier->getParents().size());
188        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
189        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
190        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
191        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
192    }
193
194    TEST_F(IdentifierNestedClassHierarchyTest, TestClass1_notNested)
195    {
196        Identifier* identifier = Class(Class1_notNested);
197
198        EXPECT_EQ(0u, identifier->getDirectChildren().size());
199        EXPECT_EQ(0u, identifier->getChildren().size());
200
201        EXPECT_EQ(1u, identifier->getDirectParents().size());
202        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
203
204        EXPECT_EQ(5u, identifier->getParents().size());
205        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
206        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
207        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
208        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
209        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
210    }
211
212    TEST_F(IdentifierNestedClassHierarchyTest, TestClass2_oneNested)
213    {
214        Identifier* identifier = Class(Class2_oneNested);
215
216        EXPECT_EQ(0u, identifier->getDirectChildren().size());
217        EXPECT_EQ(0u, identifier->getChildren().size());
218
219        EXPECT_EQ(1u, identifier->getDirectParents().size());
220        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
221
222        EXPECT_EQ(5u, identifier->getParents().size());
223        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
224        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
225        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
226        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
227        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
228    }
229
230    TEST_F(IdentifierNestedClassHierarchyTest, TestClass3_twoNested)
231    {
232        Identifier* identifier = Class(Class3_twoNested);
233
234        EXPECT_EQ(1u, identifier->getDirectChildren().size());
235        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class3_Child)));
236
237        EXPECT_EQ(1u, identifier->getChildren().size());
238        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class3_Child)));
239
240        EXPECT_EQ(1u, identifier->getDirectParents().size());
241        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
242
243        EXPECT_EQ(5u, identifier->getParents().size());
244        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
245        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
246        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
247        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
248        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
249    }
250
251    TEST_F(IdentifierNestedClassHierarchyTest, TestClass4_class1Nested)
252    {
253        Identifier* identifier = Class(Class4_class1Nested);
254
255        EXPECT_EQ(0u, identifier->getDirectChildren().size());
256        EXPECT_EQ(0u, identifier->getChildren().size());
257
258        EXPECT_EQ(1u, identifier->getDirectParents().size());
259        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
260
261        EXPECT_EQ(5u, identifier->getParents().size());
262        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
263        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
264        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
265        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
266        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
267    }
268
269    TEST_F(IdentifierNestedClassHierarchyTest, TestClass5_class2Nested)
270    {
271        Identifier* identifier = Class(Class5_class2Nested);
272
273        EXPECT_EQ(0u, identifier->getDirectChildren().size());
274        EXPECT_EQ(0u, identifier->getChildren().size());
275
276        EXPECT_EQ(1u, identifier->getDirectParents().size());
277        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
278
279        EXPECT_EQ(5u, identifier->getParents().size());
280        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
281        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
282        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
283        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
284        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
285    }
286
287    TEST_F(IdentifierNestedClassHierarchyTest, TestClass6_class3Nested)
288    {
289        Identifier* identifier = Class(Class6_class3Nested);
290
291        EXPECT_EQ(1u, identifier->getDirectChildren().size());
292        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class6_Child)));
293
294        EXPECT_EQ(1u, identifier->getChildren().size());
295        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class6_Child)));
296
297        EXPECT_EQ(1u, identifier->getDirectParents().size());
298        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
299
300        EXPECT_EQ(5u, identifier->getParents().size());
301        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
302        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
303        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
304        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
305        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
306    }
307
308    TEST_F(IdentifierNestedClassHierarchyTest, TestClass3_Child)
309    {
310        Identifier* identifier = Class(Class3_Child);
311
312        EXPECT_EQ(0u, identifier->getDirectChildren().size());
313        EXPECT_EQ(0u, identifier->getChildren().size());
314
315        EXPECT_EQ(1u, identifier->getDirectParents().size());
316        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Class3_twoNested)));
317
318        EXPECT_EQ(6u, identifier->getParents().size());
319        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
320        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
321        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
322        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
323        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
324        EXPECT_TRUE(contains(identifier->getParents(), Class(Class3_twoNested)));
325    }
326
327    TEST_F(IdentifierNestedClassHierarchyTest, TestClass6_Child)
328    {
329        Identifier* identifier = Class(Class6_Child);
330
331        EXPECT_EQ(0u, identifier->getDirectChildren().size());
332        EXPECT_EQ(0u, identifier->getChildren().size());
333
334        EXPECT_EQ(1u, identifier->getDirectParents().size());
335        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Class6_class3Nested)));
336
337        EXPECT_EQ(6u, identifier->getParents().size());
338        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
339        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
340        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
341        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
342        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
343        EXPECT_TRUE(contains(identifier->getParents(), Class(Class6_class3Nested)));
344    }
345}
Note: See TracBrowser for help on using the repository browser.