[Orxonox-commit 4941] r9610 - in code/branches/core6: src/libraries/core/object test/core test/core/object
landauf at orxonox.net
landauf at orxonox.net
Mon Apr 1 10:57:34 CEST 2013
Author: landauf
Date: 2013-04-01 10:57:34 +0200 (Mon, 01 Apr 2013)
New Revision: 9610
Added:
code/branches/core6/test/core/object/ContextTest.cc
Modified:
code/branches/core6/src/libraries/core/object/Context.cc
code/branches/core6/src/libraries/core/object/Context.h
code/branches/core6/src/libraries/core/object/Listable.cc
code/branches/core6/src/libraries/core/object/Listable.h
code/branches/core6/test/core/CMakeLists.txt
Log:
context is now a Listable itself as well
Modified: code/branches/core6/src/libraries/core/object/Context.cc
===================================================================
--- code/branches/core6/src/libraries/core/object/Context.cc 2013-04-01 08:54:47 UTC (rev 9609)
+++ code/branches/core6/src/libraries/core/object/Context.cc 2013-04-01 08:57:34 UTC (rev 9610)
@@ -36,12 +36,19 @@
namespace orxonox
{
- Context::Context(Context* context) : parentContext_(context)
+ Context::Context(Context* context) : Listable(this), parentContext_(context)
{
+ // we have to call Listable(this) to avoid circular initialization when creating a Context because Listable calls Context::getRootContext() by
+ // default AND we have to set the context again in the constructor because of other classes inheriting from Context (Listable is a virtual base
+ // and each subclass must call its constructor individually, so either all subclasses add Listable(this) to their initialization list or we call
+ // setContext(this) here).
+ this->setContext(this);
}
Context::~Context()
{
+ // unregister context from object lists before object lists are destroyed
+ this->unregisterObject();
for (size_t i = 0; i < this->objectLists_.size(); ++i)
delete this->objectLists_[i];
}
Modified: code/branches/core6/src/libraries/core/object/Context.h
===================================================================
--- code/branches/core6/src/libraries/core/object/Context.h 2013-04-01 08:54:47 UTC (rev 9609)
+++ code/branches/core6/src/libraries/core/object/Context.h 2013-04-01 08:57:34 UTC (rev 9610)
@@ -38,9 +38,11 @@
#include <vector>
+#include "Listable.h"
+
namespace orxonox
{
- class _CoreExport Context
+ class _CoreExport Context : virtual public Listable
{
public:
static Context* getRootContext();
Modified: code/branches/core6/src/libraries/core/object/Listable.cc
===================================================================
--- code/branches/core6/src/libraries/core/object/Listable.cc 2013-04-01 08:54:47 UTC (rev 9609)
+++ code/branches/core6/src/libraries/core/object/Listable.cc 2013-04-01 08:57:34 UTC (rev 9610)
@@ -47,6 +47,15 @@
}
/**
+ @brief Constructor: Allocates space in the element list and assignes the context
+ */
+ Listable::Listable(Context* context)
+ {
+ this->context_ = context;
+ this->elements_.reserve(6);
+ }
+
+ /**
@brief Destructor: Removes the object from the object-lists
*/
Listable::~Listable()
Modified: code/branches/core6/src/libraries/core/object/Listable.h
===================================================================
--- code/branches/core6/src/libraries/core/object/Listable.h 2013-04-01 08:54:47 UTC (rev 9609)
+++ code/branches/core6/src/libraries/core/object/Listable.h 2013-04-01 08:57:34 UTC (rev 9610)
@@ -52,6 +52,7 @@
public:
Listable();
+ Listable(Context* context);
virtual ~Listable();
void unregisterObject();
Modified: code/branches/core6/test/core/CMakeLists.txt
===================================================================
--- code/branches/core6/test/core/CMakeLists.txt 2013-04-01 08:54:47 UTC (rev 9609)
+++ code/branches/core6/test/core/CMakeLists.txt 2013-04-01 08:57:34 UTC (rev 9610)
@@ -15,6 +15,7 @@
class/SuperTest.cc
command/CommandTest.cc
object/ClassFactoryTest.cc
+ object/ContextTest.cc
object/DestroyableTest.cc
object/IteratorTest.cc
object/ListableTest.cc
Added: code/branches/core6/test/core/object/ContextTest.cc
===================================================================
--- code/branches/core6/test/core/object/ContextTest.cc (rev 0)
+++ code/branches/core6/test/core/object/ContextTest.cc 2013-04-01 08:57:34 UTC (rev 9610)
@@ -0,0 +1,45 @@
+#include <gtest/gtest.h>
+#include "core/object/Context.h"
+#include "core/class/OrxonoxClass.h"
+#include "core/CoreIncludes.h"
+
+namespace orxonox
+{
+ namespace
+ {
+ class SubclassContext : public OrxonoxClass, public Context
+ {
+ public:
+ SubclassContext() { RegisterRootObject(SubclassContext); }
+ };
+ }
+
+ TEST(ContextTest, CanCreateContext)
+ {
+ Context context;
+ }
+
+ TEST(ContextTest, CanCreateSubclassContext)
+ {
+ SubclassContext context;
+ }
+
+ TEST(ContextTest, ContextIsItsOwnContext)
+ {
+ Context context;
+ EXPECT_EQ(&context, context.getContext());
+ }
+
+ TEST(ContextTest, SubclassContextIsItsOwnContext)
+ {
+ SubclassContext context;
+ EXPECT_EQ(&context, context.getContext());
+ }
+
+ TEST(ContextTest, SubclassAddsToItsOwnObjectList)
+ {
+ SubclassContext context;
+ EXPECT_EQ(&context, context.getContext());
+ EXPECT_EQ(1u, context.getObjectList<SubclassContext>()->size());
+ }
+}
More information about the Orxonox-commit
mailing list