#include #include #include "core/object/Iterator.h" #include "core/class/OrxonoxClass.h" #include "core/class/OrxonoxInterface.h" #include "core/CoreIncludes.h" namespace orxonox { namespace { class TestInterface : virtual public OrxonoxInterface { public: TestInterface() { RegisterRootObject(TestInterface); } }; class TestClass : public OrxonoxClass, public TestInterface { public: TestClass() { RegisterRootObject(TestClass); } MOCK_METHOD0(test, void()); }; } TEST(IteratorTest, CanCreateIterator) { Iterator it; } TEST(IteratorTest, CanAssignIterator) { Iterator it = ObjectList::begin(); } TEST(IteratorTest, CanIterateOverEmptyList) { size_t i = 0; for (Iterator it = ObjectList::begin(); it != ObjectList::end(); ++it) ++i; EXPECT_EQ(0u, i); } TEST(IteratorTest, CanCallObjects) { TestClass test1; TestClass test2; TestClass test3; EXPECT_CALL(test1, test()); EXPECT_CALL(test2, test()); EXPECT_CALL(test3, test()); // iterate over interfaces but use a TestClass iterator - now we can call TestClass::test() for (Iterator it = ObjectList::begin(); it != ObjectList::end(); ++it) it->test(); } }