Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core7/test/core/class/IdentifierSimpleClassHierarchyTest.cc @ 10372

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

use lists instead of sets to store parent identifiers. this allows to store the exact order of initialization of parent classes.

  • Property svn:eol-style set to native
File size: 6.0 KB
Line 
1#include <gtest/gtest.h>
2#include "core/CoreIncludes.h"
3#include "core/class/Identifiable.h"
4#include "core/class/OrxonoxClass.h"
5#include "core/class/OrxonoxInterface.h"
6
7namespace orxonox
8{
9    namespace
10    {
11        class Interface : public OrxonoxInterface
12        {
13            public:
14                Interface()
15                {
16                    RegisterObject(Interface);
17                }
18
19                virtual void test() = 0;
20        };
21
22        class BaseClass : public OrxonoxClass
23        {
24            public:
25                BaseClass()
26                {
27                    RegisterObject(BaseClass);
28                }
29        };
30
31        class RealClass : public BaseClass, public Interface
32        {
33            public:
34                RealClass()
35                {
36                    RegisterObject(RealClass);
37                }
38
39                virtual void test() {}
40        };
41
42        // Fixture
43        class IdentifierSimpleClassHierarchyTest : public ::testing::Test
44        {
45            public:
46                virtual void SetUp()
47                {
48                    registerClass("Context", new ClassFactoryWithContext<Context>());
49                    registerClass("Listable", new ClassFactoryWithContext<Listable>());
50                    registerClass("Configurable", new ClassFactoryNoArgs<Configurable>());
51                    registerClass("OrxonoxInterface", new ClassFactoryNoArgs<OrxonoxInterface>());
52                    registerClass("OrxonoxClass", new ClassFactoryNoArgs<OrxonoxClass>());
53                    registerClass("Interface", static_cast<ClassFactory<Interface>*>(NULL), false)->inheritsFrom(Class(OrxonoxInterface));
54                    registerClass("BaseClass", new ClassFactoryNoArgs<BaseClass>());
55                    registerClass("RealClass", new ClassFactoryNoArgs<RealClass>());
56
57                    IdentifierManager::getInstance().createClassHierarchy();
58                }
59
60                virtual void TearDown()
61                {
62                    IdentifierManager::getInstance().destroyAllIdentifiers();
63                }
64        };
65
66        bool contains(const std::list<const Identifier*> identifiers, Identifier* identifier)
67        {
68            return std::find(identifiers.begin(), identifiers.end(), identifier) != identifiers.end();
69        }
70
71        bool contains(const std::set<const Identifier*> identifiers, Identifier* identifier)
72        {
73            return identifiers.find(identifier) != identifiers.end();
74        }
75    }
76
77    TEST(IdentifierSimpleClassHierarchyTest_NoFixture, NoInitialization)
78    {
79        {
80            Identifier* identifier = Class(Interface);
81            EXPECT_EQ(0u, identifier->getChildren().size());
82            EXPECT_EQ(0u, identifier->getParents().size());
83        }
84        {
85            Identifier* identifier = Class(BaseClass);
86            EXPECT_EQ(0u, identifier->getChildren().size());
87            EXPECT_EQ(0u, identifier->getParents().size());
88        }
89        {
90            Identifier* identifier = Class(RealClass);
91            EXPECT_EQ(0u, identifier->getChildren().size());
92            EXPECT_EQ(0u, identifier->getParents().size());
93        }
94    }
95
96    TEST_F(IdentifierSimpleClassHierarchyTest, TestInterface)
97    {
98        Identifier* identifier = Class(Interface);
99
100        EXPECT_EQ(1u, identifier->getDirectChildren().size());
101        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(RealClass)));
102
103        EXPECT_EQ(1u, identifier->getChildren().size());
104        EXPECT_TRUE(contains(identifier->getChildren(), Class(RealClass)));
105
106        EXPECT_EQ(1u, identifier->getDirectParents().size());
107        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxInterface)));
108
109        EXPECT_EQ(4u, identifier->getParents().size());
110        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
111        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
112        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
113        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
114    }
115
116    TEST_F(IdentifierSimpleClassHierarchyTest, BaseClass)
117    {
118        Identifier* identifier = Class(BaseClass);
119
120        EXPECT_EQ(1u, identifier->getDirectChildren().size());
121        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(RealClass)));
122
123        EXPECT_EQ(1u, identifier->getChildren().size());
124        EXPECT_TRUE(contains(identifier->getChildren(), Class(RealClass)));
125
126        EXPECT_EQ(1u, identifier->getDirectParents().size());
127        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxClass)));
128
129        EXPECT_EQ(4u, identifier->getParents().size());
130        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
131        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
132        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
133        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
134    }
135
136    TEST_F(IdentifierSimpleClassHierarchyTest, RealClass)
137    {
138        Identifier* identifier = Class(RealClass);
139
140        EXPECT_EQ(0u, identifier->getDirectChildren().size());
141
142        EXPECT_EQ(0u, identifier->getChildren().size());
143
144        EXPECT_EQ(2u, identifier->getDirectParents().size());
145        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface)));
146        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
147
148        EXPECT_EQ(7u, identifier->getParents().size());
149        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
150        EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
151        EXPECT_TRUE(contains(identifier->getParents(), Class(Configurable)));
152        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
153        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
154        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface)));
155        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
156    }
157}
Note: See TracBrowser for help on using the repository browser.