Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core6/test/core/class/IdentifierExternalClassHierarchyTest.cc @ 10328

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

removed RegisterRootObject (replaced by RegisterObject)

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