[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