[Orxonox-commit 5743] r10403 - in code/branches/core7: src/libraries/core/class test/core/class test/core/command

landauf at orxonox.net landauf at orxonox.net
Sun Apr 26 16:16:50 CEST 2015


Author: landauf
Date: 2015-04-26 16:16:49 +0200 (Sun, 26 Apr 2015)
New Revision: 10403

Modified:
   code/branches/core7/src/libraries/core/class/Identifier.cc
   code/branches/core7/src/libraries/core/class/Identifier.h
   code/branches/core7/src/libraries/core/class/IdentifierManager.cc
   code/branches/core7/src/libraries/core/class/IdentifierManager.h
   code/branches/core7/test/core/class/IdentifierClassHierarchyTest.cc
   code/branches/core7/test/core/class/IdentifierExternalClassHierarchyTest.cc
   code/branches/core7/test/core/class/IdentifierNestedClassHierarchyTest.cc
   code/branches/core7/test/core/class/IdentifierSimpleClassHierarchyTest.cc
   code/branches/core7/test/core/class/SubclassIdentifierTest.cc
   code/branches/core7/test/core/class/SuperTest.cc
   code/branches/core7/test/core/command/CommandTest.cc
Log:
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)

Modified: code/branches/core7/src/libraries/core/class/Identifier.cc
===================================================================
--- code/branches/core7/src/libraries/core/class/Identifier.cc	2015-04-26 13:51:49 UTC (rev 10402)
+++ code/branches/core7/src/libraries/core/class/Identifier.cc	2015-04-26 14:16:49 UTC (rev 10403)
@@ -220,6 +220,19 @@
     }
 
     /**
+     * Resets all information about the class hierarchy. The identifier is considered uninitialized afterwards.
+     */
+    void Identifier::reset()
+    {
+        if (this->factory_ != NULL) // TODO: should reset ALL identifiers, but currently the calls to inheritsFrom<>() are not reproducible
+            this->directParents_.clear();
+        this->parents_.clear();
+        this->directChildren_.clear();
+        this->children_.clear();
+        this->bInitialized_ = false;
+    }
+
+    /**
      * Verifies if the recorded trace of parent identifiers matches the expected trace according to the class hierarchy. If it doesn't match, the class
      * hierarchy is likely wrong, e.g. due to wrong inheritsFrom<>() definitions in abstract classes.
      */

Modified: code/branches/core7/src/libraries/core/class/Identifier.h
===================================================================
--- code/branches/core7/src/libraries/core/class/Identifier.h	2015-04-26 13:51:49 UTC (rev 10402)
+++ code/branches/core7/src/libraries/core/class/Identifier.h	2015-04-26 14:16:49 UTC (rev 10403)
@@ -150,6 +150,7 @@
 
             void initializeParents(const std::list<const Identifier*>& initializationTrace);
             void finishInitialization();
+            void reset();
 
             bool isA(const Identifier* identifier) const;
             bool isExactlyA(const Identifier* identifier) const;

Modified: code/branches/core7/src/libraries/core/class/IdentifierManager.cc
===================================================================
--- code/branches/core7/src/libraries/core/class/IdentifierManager.cc	2015-04-26 13:51:49 UTC (rev 10402)
+++ code/branches/core7/src/libraries/core/class/IdentifierManager.cc	2015-04-26 14:16:49 UTC (rev 10403)
@@ -171,17 +171,13 @@
     }
 
     /**
-        @brief Destroys all Identifiers. Called when exiting the program.
-    */
-    void IdentifierManager::destroyAllIdentifiers()
+     * @brief Resets all Identifiers.
+     */
+    void IdentifierManager::destroyClassHierarchy()
     {
-        for (std::set<Identifier*>::iterator it = this->identifiers_.begin(); it != this->identifiers_.end(); ++it)
-            delete (*it);
-
-        this->identifiers_.clear();
-        this->identifierByString_.clear();
-        this->identifierByLowercaseString_.clear();
-        this->identifierByNetworkId_.clear();
+        orxout(internal_status) << "Destroy class-hierarchy" << endl;
+        for (std::set<Identifier*>::const_iterator it = this->identifiers_.begin(); it != this->identifiers_.end(); ++it)
+            (*it)->reset();
     }
 
     /**
@@ -269,4 +265,18 @@
     {
         this->identifierByNetworkId_.clear();
     }
+
+    /**
+        @brief Destroys all Identifiers. Called when exiting the program.
+    */
+    void IdentifierManager::destroyAllIdentifiers()
+    {
+        for (std::set<Identifier*>::iterator it = this->identifiers_.begin(); it != this->identifiers_.end(); ++it)
+            delete (*it);
+
+        this->identifiers_.clear();
+        this->identifierByString_.clear();
+        this->identifierByLowercaseString_.clear();
+        this->identifierByNetworkId_.clear();
+    }
 }

Modified: code/branches/core7/src/libraries/core/class/IdentifierManager.h
===================================================================
--- code/branches/core7/src/libraries/core/class/IdentifierManager.h	2015-04-26 13:51:49 UTC (rev 10402)
+++ code/branches/core7/src/libraries/core/class/IdentifierManager.h	2015-04-26 14:16:49 UTC (rev 10403)
@@ -59,7 +59,7 @@
             /////////////////////////////
             void createClassHierarchy();
             void verifyClassHierarchy();
-            void destroyAllIdentifiers();
+            void destroyClassHierarchy();
 
             void createdObject(Identifiable* identifiable);
 
@@ -88,6 +88,8 @@
             inline const std::map<uint32_t, Identifier*>& getIdentifierByNetworkIdMap()
                 { return this->identifierByNetworkId_; }
 
+            void destroyAllIdentifiers();
+
         private:
             IdentifierManager();
             IdentifierManager(const IdentifierManager&);

Modified: code/branches/core7/test/core/class/IdentifierClassHierarchyTest.cc
===================================================================
--- code/branches/core7/test/core/class/IdentifierClassHierarchyTest.cc	2015-04-26 13:51:49 UTC (rev 10402)
+++ code/branches/core7/test/core/class/IdentifierClassHierarchyTest.cc	2015-04-26 14:16:49 UTC (rev 10403)
@@ -3,6 +3,7 @@
 #include "core/class/Identifiable.h"
 #include "core/class/OrxonoxClass.h"
 #include "core/class/OrxonoxInterface.h"
+#include "core/module/ModuleInstance.h"
 
 namespace orxonox
 {
@@ -140,10 +141,15 @@
             public:
                 virtual void SetUp()
                 {
+                    ModuleInstance::getCurrentModuleInstance()->loadAllStaticallyInitializedInstances();
+                    ModuleInstance::setCurrentModuleInstance(new ModuleInstance()); // overwrite ModuleInstance because the old one is now loaded and shouln't be used anymore. TODO: better solution?
+                    Identifier::initConfigValues_s = false; // TODO: hack!
+                    IdentifierManager::getInstance().createClassHierarchy();
                 }
 
                 virtual void TearDown()
                 {
+                    IdentifierManager::getInstance().destroyClassHierarchy();
                 }
         };
 
@@ -158,59 +164,59 @@
         }
     }
 
-//    TEST(IdentifierClassHierarchyTest_NoFixture, NoInitialization)
-//    {
-//        {
-//            Identifier* identifier = Class(BaseInterface1);
-//            EXPECT_EQ(0u, identifier->getChildren().size());
-//            EXPECT_EQ(0u, identifier->getParents().size());
-//        }
-//        {
-//            Identifier* identifier = Class(BaseInterface2);
-//            EXPECT_EQ(0u, identifier->getChildren().size());
-//            EXPECT_EQ(0u, identifier->getParents().size());
-//        }
-//        {
-//            Identifier* identifier = Class(Interface1);
-//            EXPECT_EQ(0u, identifier->getChildren().size());
-//            EXPECT_EQ(0u, identifier->getParents().size());
-//        }
-//        {
-//            Identifier* identifier = Class(Interface2);
-//            EXPECT_EQ(0u, identifier->getChildren().size());
-//            EXPECT_EQ(0u, identifier->getParents().size());
-//        }
-//        {
-//            Identifier* identifier = Class(BaseClass);
-//            EXPECT_EQ(0u, identifier->getChildren().size());
-//            EXPECT_EQ(0u, identifier->getParents().size());
-//        }
-//        {
-//            Identifier* identifier = Class(Class0);
-//            EXPECT_EQ(0u, identifier->getChildren().size());
-//            EXPECT_EQ(0u, identifier->getParents().size());
-//        }
-//        {
-//            Identifier* identifier = Class(Class1);
-//            EXPECT_EQ(0u, identifier->getChildren().size());
-//            EXPECT_EQ(0u, identifier->getParents().size());
-//        }
-//        {
-//            Identifier* identifier = Class(Class2a);
-//            EXPECT_EQ(0u, identifier->getChildren().size());
-//            EXPECT_EQ(0u, identifier->getParents().size());
-//        }
-//        {
-//            Identifier* identifier = Class(Class2b);
-//            EXPECT_EQ(0u, identifier->getChildren().size());
-//            EXPECT_EQ(0u, identifier->getParents().size());
-//        }
-//        {
-//            Identifier* identifier = Class(Class3);
-//            EXPECT_EQ(0u, identifier->getChildren().size());
-//            EXPECT_EQ(0u, identifier->getParents().size());
-//        }
-//    }
+    TEST(IdentifierClassHierarchyTest_NoFixture, NoInitialization)
+    {
+        {
+            Identifier* identifier = Class(BaseInterface1);
+            EXPECT_EQ(0u, identifier->getChildren().size());
+            EXPECT_EQ(0u, identifier->getParents().size());
+        }
+        {
+            Identifier* identifier = Class(BaseInterface2);
+            EXPECT_EQ(0u, identifier->getChildren().size());
+            EXPECT_EQ(0u, identifier->getParents().size());
+        }
+        {
+            Identifier* identifier = Class(Interface1);
+            EXPECT_EQ(0u, identifier->getChildren().size());
+            EXPECT_EQ(0u, identifier->getParents().size());
+        }
+        {
+            Identifier* identifier = Class(Interface2);
+            EXPECT_EQ(0u, identifier->getChildren().size());
+            EXPECT_EQ(0u, identifier->getParents().size());
+        }
+        {
+            Identifier* identifier = Class(BaseClass);
+            EXPECT_EQ(0u, identifier->getChildren().size());
+            EXPECT_EQ(0u, identifier->getParents().size());
+        }
+        {
+            Identifier* identifier = Class(Class0);
+            EXPECT_EQ(0u, identifier->getChildren().size());
+            EXPECT_EQ(0u, identifier->getParents().size());
+        }
+        {
+            Identifier* identifier = Class(Class1);
+            EXPECT_EQ(0u, identifier->getChildren().size());
+            EXPECT_EQ(0u, identifier->getParents().size());
+        }
+        {
+            Identifier* identifier = Class(Class2a);
+            EXPECT_EQ(0u, identifier->getChildren().size());
+            EXPECT_EQ(0u, identifier->getParents().size());
+        }
+        {
+            Identifier* identifier = Class(Class2b);
+            EXPECT_EQ(0u, identifier->getChildren().size());
+            EXPECT_EQ(0u, identifier->getParents().size());
+        }
+        {
+            Identifier* identifier = Class(Class3);
+            EXPECT_EQ(0u, identifier->getChildren().size());
+            EXPECT_EQ(0u, identifier->getParents().size());
+        }
+    }
 
     TEST_F(IdentifierClassHierarchyTest, TestBaseInterface1)
     {

Modified: code/branches/core7/test/core/class/IdentifierExternalClassHierarchyTest.cc
===================================================================
--- code/branches/core7/test/core/class/IdentifierExternalClassHierarchyTest.cc	2015-04-26 13:51:49 UTC (rev 10402)
+++ code/branches/core7/test/core/class/IdentifierExternalClassHierarchyTest.cc	2015-04-26 14:16:49 UTC (rev 10403)
@@ -1,6 +1,7 @@
 #include <gtest/gtest.h>
 #include "core/CoreIncludes.h"
 #include "core/class/Identifiable.h"
+#include "core/module/ModuleInstance.h"
 
 namespace orxonox
 {
@@ -47,10 +48,15 @@
             public:
                 virtual void SetUp()
                 {
+                    ModuleInstance::getCurrentModuleInstance()->loadAllStaticallyInitializedInstances();
+                    ModuleInstance::setCurrentModuleInstance(new ModuleInstance()); // overwrite ModuleInstance because the old one is now loaded and shouln't be used anymore. TODO: better solution?
+                    Identifier::initConfigValues_s = false; // TODO: hack!
+                    IdentifierManager::getInstance().createClassHierarchy();
                 }
 
                 virtual void TearDown()
                 {
+                    IdentifierManager::getInstance().destroyClassHierarchy();
                 }
         };
 
@@ -65,24 +71,24 @@
         }
     }
 
-//    TEST(IdentifierExternalClassHierarchyTest_NoFixture, NoInitialization)
-//    {
-//        {
-//            Identifier* identifier = Class(Interface);
-//            EXPECT_EQ(0u, identifier->getChildren().size());
-//            EXPECT_EQ(0u, identifier->getParents().size());
-//        }
-//        {
-//            Identifier* identifier = Class(BaseClass);
-//            EXPECT_EQ(0u, identifier->getChildren().size());
-//            EXPECT_EQ(0u, identifier->getParents().size());
-//        }
-//        {
-//            Identifier* identifier = Class(RealClass);
-//            EXPECT_EQ(0u, identifier->getChildren().size());
-//            EXPECT_EQ(0u, identifier->getParents().size());
-//        }
-//    }
+    TEST(IdentifierExternalClassHierarchyTest_NoFixture, NoInitialization)
+    {
+        {
+            Identifier* identifier = Class(Interface);
+            EXPECT_EQ(0u, identifier->getChildren().size());
+            EXPECT_EQ(0u, identifier->getParents().size());
+        }
+        {
+            Identifier* identifier = Class(BaseClass);
+            EXPECT_EQ(0u, identifier->getChildren().size());
+            EXPECT_EQ(0u, identifier->getParents().size());
+        }
+        {
+            Identifier* identifier = Class(RealClass);
+            EXPECT_EQ(0u, identifier->getChildren().size());
+            EXPECT_EQ(0u, identifier->getParents().size());
+        }
+    }
 
     TEST_F(IdentifierExternalClassHierarchyTest, TestInterface)
     {

Modified: code/branches/core7/test/core/class/IdentifierNestedClassHierarchyTest.cc
===================================================================
--- code/branches/core7/test/core/class/IdentifierNestedClassHierarchyTest.cc	2015-04-26 13:51:49 UTC (rev 10402)
+++ code/branches/core7/test/core/class/IdentifierNestedClassHierarchyTest.cc	2015-04-26 14:16:49 UTC (rev 10403)
@@ -3,6 +3,7 @@
 #include "core/class/Identifiable.h"
 #include "core/class/OrxonoxClass.h"
 #include "core/class/OrxonoxInterface.h"
+#include "core/module/ModuleInstance.h"
 
 namespace orxonox
 {
@@ -107,10 +108,15 @@
             public:
                 virtual void SetUp()
                 {
+                    ModuleInstance::getCurrentModuleInstance()->loadAllStaticallyInitializedInstances();
+                    ModuleInstance::setCurrentModuleInstance(new ModuleInstance()); // overwrite ModuleInstance because the old one is now loaded and shouln't be used anymore. TODO: better solution?
+                    Identifier::initConfigValues_s = false; // TODO: hack!
+                    IdentifierManager::getInstance().createClassHierarchy();
                 }
 
                 virtual void TearDown()
                 {
+                    IdentifierManager::getInstance().destroyClassHierarchy();
                 }
         };
 

Modified: code/branches/core7/test/core/class/IdentifierSimpleClassHierarchyTest.cc
===================================================================
--- code/branches/core7/test/core/class/IdentifierSimpleClassHierarchyTest.cc	2015-04-26 13:51:49 UTC (rev 10402)
+++ code/branches/core7/test/core/class/IdentifierSimpleClassHierarchyTest.cc	2015-04-26 14:16:49 UTC (rev 10403)
@@ -3,6 +3,7 @@
 #include "core/class/Identifiable.h"
 #include "core/class/OrxonoxClass.h"
 #include "core/class/OrxonoxInterface.h"
+#include "core/module/ModuleInstance.h"
 
 namespace orxonox
 {
@@ -49,10 +50,15 @@
             public:
                 virtual void SetUp()
                 {
+                    ModuleInstance::getCurrentModuleInstance()->loadAllStaticallyInitializedInstances();
+                    ModuleInstance::setCurrentModuleInstance(new ModuleInstance()); // overwrite ModuleInstance because the old one is now loaded and shouln't be used anymore. TODO: better solution?
+                    Identifier::initConfigValues_s = false; // TODO: hack!
+                    IdentifierManager::getInstance().createClassHierarchy();
                 }
 
                 virtual void TearDown()
                 {
+                    IdentifierManager::getInstance().destroyClassHierarchy();
                 }
         };
 
@@ -67,24 +73,24 @@
         }
     }
 
-//    TEST(IdentifierSimpleClassHierarchyTest_NoFixture, NoInitialization)
-//    {
-//        {
-//            Identifier* identifier = Class(Interface);
-//            EXPECT_EQ(0u, identifier->getChildren().size());
-//            EXPECT_EQ(0u, identifier->getParents().size());
-//        }
-//        {
-//            Identifier* identifier = Class(BaseClass);
-//            EXPECT_EQ(0u, identifier->getChildren().size());
-//            EXPECT_EQ(0u, identifier->getParents().size());
-//        }
-//        {
-//            Identifier* identifier = Class(RealClass);
-//            EXPECT_EQ(0u, identifier->getChildren().size());
-//            EXPECT_EQ(0u, identifier->getParents().size());
-//        }
-//    }
+    TEST(IdentifierSimpleClassHierarchyTest_NoFixture, NoInitialization)
+    {
+        {
+            Identifier* identifier = Class(Interface);
+            EXPECT_EQ(0u, identifier->getChildren().size());
+            EXPECT_EQ(0u, identifier->getParents().size());
+        }
+        {
+            Identifier* identifier = Class(BaseClass);
+            EXPECT_EQ(0u, identifier->getChildren().size());
+            EXPECT_EQ(0u, identifier->getParents().size());
+        }
+        {
+            Identifier* identifier = Class(RealClass);
+            EXPECT_EQ(0u, identifier->getChildren().size());
+            EXPECT_EQ(0u, identifier->getParents().size());
+        }
+    }
 
     TEST_F(IdentifierSimpleClassHierarchyTest, TestInterface)
     {

Modified: code/branches/core7/test/core/class/SubclassIdentifierTest.cc
===================================================================
--- code/branches/core7/test/core/class/SubclassIdentifierTest.cc	2015-04-26 13:51:49 UTC (rev 10402)
+++ code/branches/core7/test/core/class/SubclassIdentifierTest.cc	2015-04-26 14:16:49 UTC (rev 10403)
@@ -3,6 +3,7 @@
 #include "core/class/Identifiable.h"
 #include "core/class/SubclassIdentifier.h"
 #include "core/class/OrxonoxClass.h"
+#include "core/module/ModuleInstance.h"
 
 namespace orxonox
 {
@@ -29,12 +30,19 @@
             public:
                 virtual void SetUp()
                 {
+                    ModuleInstance::getCurrentModuleInstance()->loadAllStaticallyInitializedInstances();
+                    ModuleInstance::setCurrentModuleInstance(new ModuleInstance()); // overwrite ModuleInstance because the old one is now loaded and shouln't be used anymore. TODO: better solution?
+                    Identifier::initConfigValues_s = false; // TODO: hack!
+                    IdentifierManager::getInstance().createClassHierarchy();
+
                     Context::setRootContext(new Context(NULL));
                 }
 
                 virtual void TearDown()
                 {
                     Context::setRootContext(NULL);
+
+                    IdentifierManager::getInstance().destroyClassHierarchy();
                 }
         };
     }

Modified: code/branches/core7/test/core/class/SuperTest.cc
===================================================================
--- code/branches/core7/test/core/class/SuperTest.cc	2015-04-26 13:51:49 UTC (rev 10402)
+++ code/branches/core7/test/core/class/SuperTest.cc	2015-04-26 14:16:49 UTC (rev 10403)
@@ -4,6 +4,7 @@
 #include "core/CoreIncludes.h"
 #include "core/BaseObject.h"
 #include "core/class/Super.h"
+#include "core/module/ModuleInstance.h"
 
 namespace orxonox
 {
@@ -64,18 +65,25 @@
         RegisterClass(TestClass);
         RegisterClass(TestSubclass);
 
-       // Fixture
+        // Fixture
         class SuperTest : public ::testing::Test
         {
             public:
                 virtual void SetUp()
                 {
+                    ModuleInstance::getCurrentModuleInstance()->loadAllStaticallyInitializedInstances();
+                    ModuleInstance::setCurrentModuleInstance(new ModuleInstance()); // overwrite ModuleInstance because the old one is now loaded and shouln't be used anymore. TODO: better solution?
+                    Identifier::initConfigValues_s = false; // TODO: hack!
+                    IdentifierManager::getInstance().createClassHierarchy();
+
                     Context::setRootContext(new Context(NULL));
                 }
 
                 virtual void TearDown()
                 {
                     Context::setRootContext(NULL);
+
+                    IdentifierManager::getInstance().destroyClassHierarchy();
                 }
         };
     }

Modified: code/branches/core7/test/core/command/CommandTest.cc
===================================================================
--- code/branches/core7/test/core/command/CommandTest.cc	2015-04-26 13:51:49 UTC (rev 10402)
+++ code/branches/core7/test/core/command/CommandTest.cc	2015-04-26 14:16:49 UTC (rev 10403)
@@ -132,6 +132,24 @@
             else if (a == -1)
                 ModifyConsoleCommand("test").popFunction();
         }
+
+        // Fixture
+        class CommandTest : public ::testing::Test
+        {
+            public:
+                virtual void SetUp()
+                {
+                    ModuleInstance::getCurrentModuleInstance()->loadAllStaticallyInitializedInstances();
+                    ModuleInstance::setCurrentModuleInstance(new ModuleInstance()); // overwrite ModuleInstance because the old one is now loaded and shouln't be used anymore. TODO: better solution?
+                    Identifier::initConfigValues_s = false; // TODO: hack!
+                    IdentifierManager::getInstance().createClassHierarchy();
+                }
+
+                virtual void TearDown()
+                {
+                    IdentifierManager::getInstance().destroyClassHierarchy();
+                }
+        };
     }
 
     void test(int function, int b, int c)
@@ -141,12 +159,8 @@
         EXPECT_EQ(c, valueC);
     }
 
-    TEST(CommandTest, ModuleTest)
+    TEST_F(CommandTest, ModuleTest)
     {
-        ModuleInstance::getCurrentModuleInstance()->loadAllStaticallyInitializedInstances();
-        Identifier::initConfigValues_s = false; // TODO: hack!
-        IdentifierManager::getInstance().createClassHierarchy();
-
         test(0, 0, 0);
         CommandExecutor::execute("test 0", false);
         test(1, 0, 0);




More information about the Orxonox-commit mailing list