Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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