Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core7/test/core/class/SubclassIdentifierTest.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: 2.6 KB
Line 
1#include <gtest/gtest.h>
2#include "core/CoreIncludes.h"
3#include "core/class/Identifiable.h"
4#include "core/class/SubclassIdentifier.h"
5#include "core/class/OrxonoxClass.h"
6#include "core/module/ModuleInstance.h"
7
8namespace orxonox
9{
10    namespace
11    {
12        class TestClass : public OrxonoxClass
13        {
14            public:
15                TestClass(Context* context = NULL) { RegisterObject(TestClass); }
16        };
17
18        class TestSubclass : public TestClass
19        {
20            public:
21                TestSubclass(Context* context = NULL) { RegisterObject(TestSubclass); }
22        };
23
24        RegisterClass(TestClass);
25        RegisterClass(TestSubclass);
26
27        // Fixture
28        class SubclassIdentifierTest : public ::testing::Test
29        {
30            public:
31                virtual void SetUp()
32                {
33                    ModuleInstance::getCurrentModuleInstance()->loadAllStaticallyInitializedInstances();
34                    ModuleInstance::setCurrentModuleInstance(new ModuleInstance()); // overwrite ModuleInstance because the old one is now loaded and shouln't be used anymore. TODO: better solution?
35                    Identifier::initConfigValues_s = false; // TODO: hack!
36                    IdentifierManager::getInstance().createClassHierarchy();
37
38                    Context::setRootContext(new Context(NULL));
39                }
40
41                virtual void TearDown()
42                {
43                    Context::setRootContext(NULL);
44
45                    IdentifierManager::getInstance().destroyClassHierarchy();
46                }
47        };
48    }
49
50    TEST_F(SubclassIdentifierTest, CanCreateIdentifier)
51    {
52        TestSubclass test;
53
54        SubclassIdentifier<TestClass> subclassIdentifier;
55    }
56
57    TEST_F(SubclassIdentifierTest, DefaultsToNormalIdentifier)
58    {
59        TestSubclass test;
60
61        SubclassIdentifier<TestClass> subclassIdentifier;
62        EXPECT_EQ(Class(TestClass), subclassIdentifier.getIdentifier());
63    }
64
65    TEST_F(SubclassIdentifierTest, CanAssignIdentifierOfSubclass)
66    {
67        TestSubclass test;
68        SubclassIdentifier<TestClass> subclassIdentifier;
69        subclassIdentifier = Class(TestSubclass);
70        EXPECT_EQ(Class(TestSubclass), subclassIdentifier.getIdentifier());
71    }
72
73    TEST_F(SubclassIdentifierTest, CanCreateSubclass)
74    {
75        TestSubclass test;
76        SubclassIdentifier<TestClass> subclassIdentifier;
77        subclassIdentifier = Class(TestSubclass);
78
79        TestClass* instance = subclassIdentifier.fabricate(NULL);
80        ASSERT_TRUE(instance != NULL);
81        EXPECT_EQ(Class(TestSubclass), instance->getIdentifier());
82        delete instance;
83    }
84}
Note: See TracBrowser for help on using the repository browser.