Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core6/test/core/object/ListableTest.cc @ 9659

Last change on this file since 9659 was 9659, checked in by landauf, 11 years ago

removed RegisterRootObject (replaced by RegisterObject)

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