Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

implemented method to change the context of a Listable. the object will then be added to the object lists of the new context

  • Property svn:eol-style set to native
File size: 4.0 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 ListableTest : public Listable
10        {
11            public:
12                ListableTest() { RegisterRootObject(ListableTest); }
13        };
14
15        class ListableSubclassTest : public ListableTest
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
32    TEST(ListableTest, CanCreate)
33    {
34        ListableTest* test = new ListableTest();
35        ASSERT_TRUE(test != NULL);
36        delete test;
37    }
38
39    TEST(ListableTest, AddsToObjectList)
40    {
41        ListableTest test;
42        EXPECT_EQ(1u, ObjectList<ListableTest>::size());
43        EXPECT_TRUE(objectListContains<ListableTest>(&test));
44    }
45
46    TEST(ListableTest, AddsToAllObjectLists)
47    {
48        ListableSubclassTest test;
49        EXPECT_EQ(1u, ObjectList<ListableTest>::size());
50        EXPECT_TRUE(objectListContains<ListableTest>(&test));
51        EXPECT_EQ(1u, ObjectList<ListableSubclassTest>::size());
52        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test));
53    }
54
55    TEST(ListableTest, RemovesFromObjectList)
56    {
57        EXPECT_EQ(0u, ObjectList<ListableTest>::size());
58        {
59            ListableTest test;
60            EXPECT_EQ(1u, ObjectList<ListableTest>::size());
61            EXPECT_TRUE(objectListContains<ListableTest>(&test));
62        }
63        EXPECT_EQ(0u, ObjectList<ListableTest>::size());
64    }
65
66    TEST(ListableTest, RemovesFromAllObjectLists)
67    {
68        EXPECT_EQ(0u, ObjectList<ListableTest>::size());
69        EXPECT_EQ(0u, ObjectList<ListableSubclassTest>::size());
70        {
71            ListableSubclassTest test;
72            EXPECT_EQ(1u, ObjectList<ListableTest>::size());
73            EXPECT_TRUE(objectListContains<ListableTest>(&test));
74            EXPECT_EQ(1u, ObjectList<ListableSubclassTest>::size());
75            EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test));
76        }
77        EXPECT_EQ(0u, ObjectList<ListableTest>::size());
78        EXPECT_EQ(0u, ObjectList<ListableSubclassTest>::size());
79    }
80
81    TEST(ListableTest, CanChangeContext)
82    {
83        Context* rootContext = Context::getRootContext();
84        Context newContext;
85        ListableSubclassTest test;
86
87        EXPECT_EQ(1u, rootContext->getObjectList<ListableTest>()->size());
88        EXPECT_TRUE(objectListContains<ListableTest>(&test, rootContext));
89        EXPECT_EQ(1u, rootContext->getObjectList<ListableSubclassTest>()->size());
90        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test, rootContext));
91
92        EXPECT_EQ(0u, newContext.getObjectList<ListableTest>()->size());
93        EXPECT_FALSE(objectListContains<ListableTest>(&test, &newContext));
94        EXPECT_EQ(0u, newContext.getObjectList<ListableSubclassTest>()->size());
95        EXPECT_FALSE(objectListContains<ListableSubclassTest>(&test, &newContext));
96
97        test.setContext(&newContext);
98
99        EXPECT_EQ(0u, rootContext->getObjectList<ListableTest>()->size());
100        EXPECT_FALSE(objectListContains<ListableTest>(&test, rootContext));
101        EXPECT_EQ(0u, rootContext->getObjectList<ListableSubclassTest>()->size());
102        EXPECT_FALSE(objectListContains<ListableSubclassTest>(&test, rootContext));
103
104        EXPECT_EQ(1u, newContext.getObjectList<ListableTest>()->size());
105        EXPECT_TRUE(objectListContains<ListableTest>(&test, &newContext));
106        EXPECT_EQ(1u, newContext.getObjectList<ListableSubclassTest>()->size());
107        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test, &newContext));
108    }
109}
Note: See TracBrowser for help on using the repository browser.