Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

added function to destroy the class hierarchy (i.e. reset all information about parents and children in Identifiers).
tests now use a fixture to create and destroy class hierarchy. this makes them independent of the order of execution (and also fixes the three *_NoFixture tests)

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