Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core7/test/core/class/IdentifierExternalClassHierarchyTest.cc @ 10535

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

statically initialized instances are now registered with a type. CoreStaticInitializationHandler initializes all instances in core, NetworkStaticInitializationHandler initializes all instances in network.

  • Property svn:eol-style set to native
File size: 4.3 KB
RevLine 
[9637]1#include <gtest/gtest.h>
2#include "core/CoreIncludes.h"
3#include "core/class/Identifiable.h"
[10403]4#include "core/module/ModuleInstance.h"
[9637]5
6namespace orxonox
7{
8    namespace
9    {
10        class Interface : virtual public Identifiable
[9646]11        {
12            public:
13                Interface()
14                {
[9659]15                    RegisterObject(Interface);
[9646]16                }
[9637]17
[9646]18                virtual void test() = 0;
19        };
20
[9637]21        class BaseClass : virtual public Identifiable
[9646]22        {
23            public:
24                BaseClass()
25                {
[9659]26                    RegisterObject(BaseClass);
[9646]27                }
28        };
[9637]29
30        class RealClass : public BaseClass, public Interface
[9646]31        {
32            public:
33                RealClass()
34                {
35                    RegisterObject(RealClass);
36                }
[9637]37
[9646]38                virtual void test() {}
39        };
40
[10400]41        RegisterAbstractClass(Interface).inheritsFrom<Identifiable>();
42        RegisterClassNoArgs(BaseClass);
43        RegisterClassNoArgs(RealClass);
44
[9637]45        // Fixture
46        class IdentifierExternalClassHierarchyTest : public ::testing::Test
47        {
48            public:
49                virtual void SetUp()
50                {
[10535]51                    ModuleInstance::getCurrentModuleInstance()->loadAllStaticallyInitializedInstances(StaticInitialization::IDENTIFIER);
[10403]52                    Identifier::initConfigValues_s = false; // TODO: hack!
53                    IdentifierManager::getInstance().createClassHierarchy();
[9637]54                }
55
56                virtual void TearDown()
57                {
[10403]58                    IdentifierManager::getInstance().destroyClassHierarchy();
[10535]59                    ModuleInstance::getCurrentModuleInstance()->unloadAllStaticallyInitializedInstances(StaticInitialization::IDENTIFIER);
[9637]60                }
61        };
[9646]62
[10372]63        bool contains(const std::list<const Identifier*> identifiers, Identifier* identifier)
64        {
65            return std::find(identifiers.begin(), identifiers.end(), identifier) != identifiers.end();
66        }
67
[9646]68        bool contains(const std::set<const Identifier*> identifiers, Identifier* identifier)
69        {
70            return identifiers.find(identifier) != identifiers.end();
71        }
[9637]72    }
73
74    TEST_F(IdentifierExternalClassHierarchyTest, TestInterface)
75    {
76        Identifier* identifier = Class(Interface);
77
[9646]78        EXPECT_EQ(1u, identifier->getDirectChildren().size());
79        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(RealClass)));
80
[9637]81        EXPECT_EQ(1u, identifier->getChildren().size());
[9646]82        EXPECT_TRUE(contains(identifier->getChildren(), Class(RealClass)));
83
84        EXPECT_EQ(1u, identifier->getDirectParents().size());
85        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Identifiable)));
86
87        EXPECT_EQ(1u, identifier->getParents().size());
88        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
[9637]89    }
90
91    TEST_F(IdentifierExternalClassHierarchyTest, BaseClass)
92    {
93        Identifier* identifier = Class(BaseClass);
94
[9646]95        EXPECT_EQ(1u, identifier->getDirectChildren().size());
96        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(RealClass)));
97
[9637]98        EXPECT_EQ(1u, identifier->getChildren().size());
[9646]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)));
[9637]106    }
107
108    TEST_F(IdentifierExternalClassHierarchyTest, RealClass)
109    {
110        Identifier* identifier = Class(RealClass);
111
[9646]112        EXPECT_EQ(0u, identifier->getDirectChildren().size());
113
[9637]114        EXPECT_EQ(0u, identifier->getChildren().size());
[9646]115
116        EXPECT_EQ(2u, identifier->getDirectParents().size());
117        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface)));
118        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
119
120        EXPECT_EQ(3u, identifier->getParents().size());
121        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
122        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface)));
123        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
[9637]124    }
125}
Note: See TracBrowser for help on using the repository browser.