Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

statically initialized instances are now registered with a type. CoreStaticInitializationHandler initializes all instances in core, NetworkStaticInitializationHandler initializes all instances in network.

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