Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/cpp11_v2/test/core/object/ObjectListIteratorTest.cc @ 10765

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

replace 'NULL' by 'nullptr'

  • Property svn:eol-style set to native
File size: 3.5 KB
Line 
1#include <gtest/gtest.h>
2#include <gmock/gmock.h>
3
4#include "core/object/ObjectListIterator.h"
5#include "core/class/OrxonoxClass.h"
6#include "core/class/OrxonoxInterface.h"
7#include "core/CoreIncludes.h"
8#include "core/module/ModuleInstance.h"
9
10namespace orxonox
11{
12    namespace
13    {
14        class TestInterface : virtual public OrxonoxInterface
15        {
16            public:
17            TestInterface() { RegisterObject(TestInterface); }
18        };
19
20        class TestClass : public OrxonoxClass, public TestInterface
21        {
22            public:
23                TestClass() { RegisterObject(TestClass); }
24                MOCK_METHOD0(test, void());
25        };
26
27        RegisterClassNoArgs(TestInterface);
28        RegisterClassNoArgs(TestClass);
29
30        // Fixture
31        class ObjectListIteratorTest : public ::testing::Test
32        {
33            public:
34                virtual void SetUp()
35                {
36                    new IdentifierManager();
37                    ModuleInstance::getCurrentModuleInstance()->loadAllStaticallyInitializedInstances(StaticInitialization::IDENTIFIER);
38                    Context::setRootContext(new Context(nullptr));
39                }
40
41                virtual void TearDown()
42                {
43                    Context::destroyRootContext();
44                    ModuleInstance::getCurrentModuleInstance()->unloadAllStaticallyInitializedInstances(StaticInitialization::IDENTIFIER);
45                    delete &IdentifierManager::getInstance();
46                }
47        };
48    }
49
50    TEST_F(ObjectListIteratorTest, CanCreateIterator)
51    {
52        ObjectListIterator<TestClass> it;
53    }
54
55    TEST_F(ObjectListIteratorTest, CanAssignIterator)
56    {
57        ObjectListIterator<TestClass> it = ObjectList<TestClass>::begin();
58    }
59
60    TEST_F(ObjectListIteratorTest, CanIterateOverEmptyList)
61    {
62        size_t i = 0;
63        for (ObjectListIterator<TestClass> it = ObjectList<TestClass>::begin(); it != ObjectList<TestClass>::end(); ++it)
64            ++i;
65        EXPECT_EQ(0u, i);
66    }
67
68    TEST_F(ObjectListIteratorTest, CanIterateOverFullList)
69    {
70        TestClass test1;
71        TestClass test2;
72        TestClass test3;
73        TestInterface interface;
74
75        size_t i = 0;
76        for (ObjectListIterator<TestClass> it = ObjectList<TestClass>::begin(); it != ObjectList<TestClass>::end(); ++it)
77        {
78            ++i;
79            if (i == 1u) EXPECT_EQ(&test1, *it);
80            if (i == 2u) EXPECT_EQ(&test2, *it);
81            if (i == 3u) EXPECT_EQ(&test3, *it);
82        }
83        EXPECT_EQ(3u, i);
84    }
85
86    TEST_F(ObjectListIteratorTest, CanIterateReverseOverFullList)
87    {
88        TestClass test1;
89        TestClass test2;
90        TestClass test3;
91        TestInterface interface;
92
93        size_t i = 0;
94        for (ObjectListIterator<TestClass> it = ObjectList<TestClass>::rbegin(); it != ObjectList<TestClass>::rend(); --it)
95        {
96            ++i;
97            if (i == 1u) EXPECT_EQ(&test3, *it);
98            if (i == 2u) EXPECT_EQ(&test2, *it);
99            if (i == 3u) EXPECT_EQ(&test1, *it);
100        }
101        EXPECT_EQ(3u, i);
102    }
103
104    TEST_F(ObjectListIteratorTest, CanCallObjects)
105    {
106        TestClass test1;
107        TestClass test2;
108        TestClass test3;
109        TestInterface interface;
110
111        EXPECT_CALL(test1, test());
112        EXPECT_CALL(test2, test());
113        EXPECT_CALL(test3, test());
114
115        for (ObjectListIterator<TestClass> it = ObjectList<TestClass>::begin(); it != ObjectList<TestClass>::end(); ++it)
116            it->test();
117    }
118}
Note: See TracBrowser for help on using the repository browser.