#include #include "core/object/Listable.h" #include "core/CoreIncludes.h" namespace orxonox { namespace { class ListableTest : public Listable { public: ListableTest() { RegisterRootObject(ListableTest); } }; class ListableSubclassTest : public ListableTest { public: ListableSubclassTest() { RegisterObject(ListableSubclassTest); } }; template bool objectListContains(T* element) { for (typename ObjectList::iterator it = ObjectList::begin(); it != ObjectList::end(); ++it) if (*it == element) return true; return false; } } TEST(ListableTest, CanCreate) { ListableTest* test = new ListableTest(); ASSERT_TRUE(test != NULL); delete test; } TEST(ListableTest, AddsToObjectList) { ListableTest test; EXPECT_EQ(1u, ObjectList::size()); EXPECT_TRUE(objectListContains(&test)); } TEST(ListableTest, AddsToAllObjectLists) { ListableSubclassTest test; EXPECT_EQ(1u, ObjectList::size()); EXPECT_TRUE(objectListContains(&test)); EXPECT_EQ(1u, ObjectList::size()); EXPECT_TRUE(objectListContains(&test)); } TEST(ListableTest, RemovesFromObjectList) { { ListableTest test; EXPECT_EQ(1u, ObjectList::size()); EXPECT_TRUE(objectListContains(&test)); } EXPECT_EQ(0u, ObjectList::size()); } TEST(ListableTest, RemovesFromAllObjectLists) { { ListableSubclassTest test; EXPECT_EQ(1u, ObjectList::size()); EXPECT_TRUE(objectListContains(&test)); EXPECT_EQ(1u, ObjectList::size()); EXPECT_TRUE(objectListContains(&test)); } EXPECT_EQ(0u, ObjectList::size()); EXPECT_EQ(0u, ObjectList::size()); } }