Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/test/core/object/ListableTest.cc @ 11071

Last change on this file since 11071 was 11071, checked in by landauf, 8 years ago

merged branch cpp11_v3 back to trunk

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