Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

fixed tests. however there are some open issues:

  • the class-hierarchy must be built exactly 1 times in core_test. this is currently done in CommandTest.cc because that's the first test to run in core_test which actually needs the class hierarchy. the order of tests is not guaranteed though, so this should be solved more generic
  • during creation of class hierarchy, config values are used. this fails in the tests, so it had to be disabled with a static flag in Identifier. this should be solved in a cleaner way.
  • because the class hierarchy is now statically generated for all tests in core_test in CommandTest.cc, there is no way to test identifiers in an uninitialized state. because of this, three tests had to be disabled (*_NoFixture tests)

⇒ make the creation of the class hierarchy more modular and fix these issues

  • Property svn:eol-style set to native
File size: 4.4 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        RegisterAbstractClass(Interface).inheritsFrom<Identifiable>();
41        RegisterClassNoArgs(BaseClass);
42        RegisterClassNoArgs(RealClass);
43
44        // Fixture
45        class IdentifierExternalClassHierarchyTest : public ::testing::Test
46        {
47            public:
48                virtual void SetUp()
49                {
50                }
51
52                virtual void TearDown()
53                {
54                }
55        };
56
57        bool contains(const std::list<const Identifier*> identifiers, Identifier* identifier)
58        {
59            return std::find(identifiers.begin(), identifiers.end(), identifier) != identifiers.end();
60        }
61
62        bool contains(const std::set<const Identifier*> identifiers, Identifier* identifier)
63        {
64            return identifiers.find(identifier) != identifiers.end();
65        }
66    }
67
68//    TEST(IdentifierExternalClassHierarchyTest_NoFixture, NoInitialization)
69//    {
70//        {
71//            Identifier* identifier = Class(Interface);
72//            EXPECT_EQ(0u, identifier->getChildren().size());
73//            EXPECT_EQ(0u, identifier->getParents().size());
74//        }
75//        {
76//            Identifier* identifier = Class(BaseClass);
77//            EXPECT_EQ(0u, identifier->getChildren().size());
78//            EXPECT_EQ(0u, identifier->getParents().size());
79//        }
80//        {
81//            Identifier* identifier = Class(RealClass);
82//            EXPECT_EQ(0u, identifier->getChildren().size());
83//            EXPECT_EQ(0u, identifier->getParents().size());
84//        }
85//    }
86
87    TEST_F(IdentifierExternalClassHierarchyTest, TestInterface)
88    {
89        Identifier* identifier = Class(Interface);
90
91        EXPECT_EQ(1u, identifier->getDirectChildren().size());
92        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(RealClass)));
93
94        EXPECT_EQ(1u, identifier->getChildren().size());
95        EXPECT_TRUE(contains(identifier->getChildren(), Class(RealClass)));
96
97        EXPECT_EQ(1u, identifier->getDirectParents().size());
98        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Identifiable)));
99
100        EXPECT_EQ(1u, identifier->getParents().size());
101        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
102    }
103
104    TEST_F(IdentifierExternalClassHierarchyTest, BaseClass)
105    {
106        Identifier* identifier = Class(BaseClass);
107
108        EXPECT_EQ(1u, identifier->getDirectChildren().size());
109        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(RealClass)));
110
111        EXPECT_EQ(1u, identifier->getChildren().size());
112        EXPECT_TRUE(contains(identifier->getChildren(), Class(RealClass)));
113
114        EXPECT_EQ(1u, identifier->getDirectParents().size());
115        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Identifiable)));
116
117        EXPECT_EQ(1u, identifier->getParents().size());
118        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
119    }
120
121    TEST_F(IdentifierExternalClassHierarchyTest, RealClass)
122    {
123        Identifier* identifier = Class(RealClass);
124
125        EXPECT_EQ(0u, identifier->getDirectChildren().size());
126
127        EXPECT_EQ(0u, identifier->getChildren().size());
128
129        EXPECT_EQ(2u, identifier->getDirectParents().size());
130        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface)));
131        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
132
133        EXPECT_EQ(3u, identifier->getParents().size());
134        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
135        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface)));
136        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
137    }
138}
Note: See TracBrowser for help on using the repository browser.