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, 10 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.