Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core7/test/core/object/ListableTest.cc @ 10530

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

statically initialized instances may contain a type. currently not used.

  • Property svn:eol-style set to native
File size: 10.6 KB
Line 
1#include <gtest/gtest.h>
2#include "core/object/Listable.h"
3#include "core/CoreIncludes.h"
4#include "core/module/ModuleInstance.h"
5
6namespace orxonox
7{
8    namespace
9    {
10        class ListableClassTest : public Listable
11        {
12            public:
13            ListableClassTest() { RegisterObject(ListableClassTest); }
14        };
15
16        class ListableSubclassTest : public ListableClassTest
17        {
18            public:
19                ListableSubclassTest() { RegisterObject(ListableSubclassTest); }
20        };
21
22        RegisterClassNoArgs(ListableClassTest);
23        RegisterClassNoArgs(ListableSubclassTest);
24
25        template <class T>
26        bool objectListContains(T* element, Context* context = Context::getRootContext())
27        {
28            for (typename ObjectList<T>::iterator it = static_cast<ObjectListElement<T>*>(context->getObjectList<T>()->begin());
29                    it != static_cast<ObjectListElement<T>*>(context->getObjectList<T>()->end()); ++it)
30                if (*it == element)
31                    return true;
32            return false;
33        }
34
35        // Fixture
36        class ListableTest : public ::testing::Test
37        {
38            public:
39                virtual void SetUp()
40                {
41                    Context::setRootContext(new Context(NULL));
42                    ModuleInstance::getCurrentModuleInstance()->loadAllStaticallyInitializedInstances(0);
43                }
44
45                virtual void TearDown()
46                {
47                    ModuleInstance::getCurrentModuleInstance()->unloadAllStaticallyInitializedInstances(0);
48                    Context::setRootContext(NULL);
49                }
50        };
51    }
52
53    TEST_F(ListableTest, CanCreate)
54    {
55        ListableClassTest* test = new ListableClassTest();
56        ASSERT_TRUE(test != NULL);
57        delete test;
58    }
59
60    TEST_F(ListableTest, AddsToObjectList)
61    {
62        ListableClassTest test;
63        EXPECT_EQ(1u, ObjectList<ListableClassTest>::size());
64        EXPECT_TRUE(objectListContains<ListableClassTest>(&test));
65    }
66
67    TEST_F(ListableTest, AddsToAllObjectLists)
68    {
69        ListableSubclassTest test;
70        EXPECT_EQ(1u, ObjectList<ListableClassTest>::size());
71        EXPECT_TRUE(objectListContains<ListableClassTest>(&test));
72        EXPECT_EQ(1u, ObjectList<ListableSubclassTest>::size());
73        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test));
74    }
75
76    TEST_F(ListableTest, RemovesFromObjectList)
77    {
78        EXPECT_EQ(0u, ObjectList<ListableClassTest>::size());
79        {
80            ListableClassTest test;
81            EXPECT_EQ(1u, ObjectList<ListableClassTest>::size());
82            EXPECT_TRUE(objectListContains<ListableClassTest>(&test));
83        }
84        EXPECT_EQ(0u, ObjectList<ListableClassTest>::size());
85    }
86
87    TEST_F(ListableTest, RemovesFromAllObjectLists)
88    {
89        EXPECT_EQ(0u, ObjectList<ListableClassTest>::size());
90        EXPECT_EQ(0u, ObjectList<ListableSubclassTest>::size());
91        {
92            ListableSubclassTest test;
93            EXPECT_EQ(1u, ObjectList<ListableClassTest>::size());
94            EXPECT_TRUE(objectListContains<ListableClassTest>(&test));
95            EXPECT_EQ(1u, ObjectList<ListableSubclassTest>::size());
96            EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test));
97        }
98        EXPECT_EQ(0u, ObjectList<ListableClassTest>::size());
99        EXPECT_EQ(0u, ObjectList<ListableSubclassTest>::size());
100    }
101
102    TEST_F(ListableTest, CanAddObjectToContext)
103    {
104        Context context(NULL);
105        ListableSubclassTest test;
106
107        test.setContext(&context);
108
109        // object is in new context
110        EXPECT_EQ(1u, context.getObjectList<ListableClassTest>()->size());
111        EXPECT_TRUE(objectListContains<ListableClassTest>(&test, &context));
112        EXPECT_EQ(1u, context.getObjectList<ListableSubclassTest>()->size());
113        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test, &context));
114    }
115
116    TEST_F(ListableTest, CanAddObjectToSubContext)
117    {
118        Context baseContext(NULL);
119        Context subContext(&baseContext);
120        ListableSubclassTest test;
121
122        test.setContext(&subContext);
123
124        // object is in both contexts
125        EXPECT_EQ(1u, baseContext.getObjectList<ListableClassTest>()->size());
126        EXPECT_TRUE(objectListContains<ListableClassTest>(&test, &baseContext));
127        EXPECT_EQ(1u, baseContext.getObjectList<ListableSubclassTest>()->size());
128        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test, &baseContext));
129
130        EXPECT_EQ(1u, subContext.getObjectList<ListableClassTest>()->size());
131        EXPECT_TRUE(objectListContains<ListableClassTest>(&test, &subContext));
132        EXPECT_EQ(1u, subContext.getObjectList<ListableSubclassTest>()->size());
133        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test, &subContext));
134    }
135
136    TEST_F(ListableTest, CanChangeContext)
137    {
138        Context* rootContext = Context::getRootContext();
139        Context newContext(NULL);
140        ListableSubclassTest test;
141
142        // object is in root context
143        EXPECT_EQ(1u, rootContext->getObjectList<ListableClassTest>()->size());
144        EXPECT_TRUE(objectListContains<ListableClassTest>(&test, rootContext));
145        EXPECT_EQ(1u, rootContext->getObjectList<ListableSubclassTest>()->size());
146        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test, rootContext));
147
148        // object is NOT in new context
149        EXPECT_EQ(0u, newContext.getObjectList<ListableClassTest>()->size());
150        EXPECT_FALSE(objectListContains<ListableClassTest>(&test, &newContext));
151        EXPECT_EQ(0u, newContext.getObjectList<ListableSubclassTest>()->size());
152        EXPECT_FALSE(objectListContains<ListableSubclassTest>(&test, &newContext));
153
154        test.setContext(&newContext);
155
156        // object was removed from root context
157        EXPECT_EQ(0u, rootContext->getObjectList<ListableClassTest>()->size());
158        EXPECT_FALSE(objectListContains<ListableClassTest>(&test, rootContext));
159        EXPECT_EQ(0u, rootContext->getObjectList<ListableSubclassTest>()->size());
160        EXPECT_FALSE(objectListContains<ListableSubclassTest>(&test, rootContext));
161
162        // object is now in new context
163        EXPECT_EQ(1u, newContext.getObjectList<ListableClassTest>()->size());
164        EXPECT_TRUE(objectListContains<ListableClassTest>(&test, &newContext));
165        EXPECT_EQ(1u, newContext.getObjectList<ListableSubclassTest>()->size());
166        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test, &newContext));
167    }
168
169    TEST_F(ListableTest, CanChangeToSubContext)
170    {
171        Context* rootContext = Context::getRootContext();
172        Context subContext(rootContext);
173        ListableSubclassTest test;
174
175        // object is in root context
176        EXPECT_EQ(1u, rootContext->getObjectList<ListableClassTest>()->size());
177        EXPECT_TRUE(objectListContains<ListableClassTest>(&test, rootContext));
178        EXPECT_EQ(1u, rootContext->getObjectList<ListableSubclassTest>()->size());
179        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test, rootContext));
180
181        // object is NOT in sub context
182        EXPECT_EQ(0u, subContext.getObjectList<ListableClassTest>()->size());
183        EXPECT_FALSE(objectListContains<ListableClassTest>(&test, &subContext));
184        EXPECT_EQ(0u, subContext.getObjectList<ListableSubclassTest>()->size());
185        EXPECT_FALSE(objectListContains<ListableSubclassTest>(&test, &subContext));
186
187        test.setContext(&subContext);
188
189        // object is still in root context
190        EXPECT_EQ(1u, rootContext->getObjectList<ListableClassTest>()->size());
191        EXPECT_TRUE(objectListContains<ListableClassTest>(&test, rootContext));
192        EXPECT_EQ(1u, rootContext->getObjectList<ListableSubclassTest>()->size());
193        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test, rootContext));
194
195        // object is now also in sub context
196        EXPECT_EQ(1u, subContext.getObjectList<ListableClassTest>()->size());
197        EXPECT_TRUE(objectListContains<ListableClassTest>(&test, &subContext));
198        EXPECT_EQ(1u, subContext.getObjectList<ListableSubclassTest>()->size());
199        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test, &subContext));
200    }
201
202    TEST_F(ListableTest, CanChangeFromSubcontextToSubContext)
203    {
204        Context* rootContext = Context::getRootContext();
205        Context subContext1(rootContext);
206        Context subContext2(rootContext);
207        ListableSubclassTest test;
208
209        test.setContext(&subContext1);
210
211        // object is in root context
212        EXPECT_EQ(1u, rootContext->getObjectList<ListableClassTest>()->size());
213        EXPECT_TRUE(objectListContains<ListableClassTest>(&test, rootContext));
214        EXPECT_EQ(1u, rootContext->getObjectList<ListableSubclassTest>()->size());
215        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test, rootContext));
216
217        // object is also in sub context 1
218        EXPECT_EQ(1u, subContext1.getObjectList<ListableClassTest>()->size());
219        EXPECT_TRUE(objectListContains<ListableClassTest>(&test, &subContext1));
220        EXPECT_EQ(1u, subContext1.getObjectList<ListableSubclassTest>()->size());
221        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test, &subContext1));
222
223        // object is NOT in sub context 2
224        EXPECT_EQ(0u, subContext2.getObjectList<ListableClassTest>()->size());
225        EXPECT_FALSE(objectListContains<ListableClassTest>(&test, &subContext2));
226        EXPECT_EQ(0u, subContext2.getObjectList<ListableSubclassTest>()->size());
227        EXPECT_FALSE(objectListContains<ListableSubclassTest>(&test, &subContext2));
228
229        test.setContext(&subContext2);
230
231        // object is still in root context
232        EXPECT_EQ(1u, rootContext->getObjectList<ListableClassTest>()->size());
233        EXPECT_TRUE(objectListContains<ListableClassTest>(&test, rootContext));
234        EXPECT_EQ(1u, rootContext->getObjectList<ListableSubclassTest>()->size());
235        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test, rootContext));
236
237        // object was removed from sub context 1
238        EXPECT_EQ(0u, subContext1.getObjectList<ListableClassTest>()->size());
239        EXPECT_FALSE(objectListContains<ListableClassTest>(&test, &subContext1));
240        EXPECT_EQ(0u, subContext1.getObjectList<ListableSubclassTest>()->size());
241        EXPECT_FALSE(objectListContains<ListableSubclassTest>(&test, &subContext1));
242
243        // object is now in sub context 2
244        EXPECT_EQ(1u, subContext2.getObjectList<ListableClassTest>()->size());
245        EXPECT_TRUE(objectListContains<ListableClassTest>(&test, &subContext2));
246        EXPECT_EQ(1u, subContext2.getObjectList<ListableSubclassTest>()->size());
247        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test, &subContext2));
248    }
249}
Note: See TracBrowser for help on using the repository browser.