diff options
Diffstat (limited to 'Swiften/EventLoop/UnitTest')
-rw-r--r-- | Swiften/EventLoop/UnitTest/EventLoopTest.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/Swiften/EventLoop/UnitTest/EventLoopTest.cpp b/Swiften/EventLoop/UnitTest/EventLoopTest.cpp index b6023ff..b777c1b 100644 --- a/Swiften/EventLoop/UnitTest/EventLoopTest.cpp +++ b/Swiften/EventLoop/UnitTest/EventLoopTest.cpp @@ -11,20 +11,19 @@ #include "Swiften/EventLoop/EventOwner.h" #include "Swiften/EventLoop/SimpleEventLoop.h" +#include "Swiften/EventLoop/DummyEventLoop.h" #include "Swiften/Base/sleep.h" using namespace Swift; -class EventLoopTest : public CppUnit::TestFixture -{ +class EventLoopTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(EventLoopTest); CPPUNIT_TEST(testPost); CPPUNIT_TEST(testRemove); + CPPUNIT_TEST(testHandleEvent_Recursive); CPPUNIT_TEST_SUITE_END(); public: - EventLoopTest() {} - void setUp() { events_.clear(); } @@ -59,12 +58,30 @@ class EventLoopTest : public CppUnit::TestFixture CPPUNIT_ASSERT_EQUAL(1, events_[0]); CPPUNIT_ASSERT_EQUAL(3, events_[1]); } + + void testHandleEvent_Recursive() { + DummyEventLoop testling; + boost::shared_ptr<MyEventOwner> eventOwner(new MyEventOwner()); + + testling.postEvent(boost::bind(&EventLoopTest::runEventLoop, this, &testling, eventOwner), eventOwner); + testling.postEvent(boost::bind(&EventLoopTest::logEvent, this, 0), eventOwner); + testling.processEvents(); + + CPPUNIT_ASSERT_EQUAL(2, static_cast<int>(events_.size())); + CPPUNIT_ASSERT_EQUAL(0, events_[0]); + CPPUNIT_ASSERT_EQUAL(1, events_[1]); + } private: struct MyEventOwner : public EventOwner {}; void logEvent(int i) { events_.push_back(i); } + void runEventLoop(DummyEventLoop* loop, boost::shared_ptr<MyEventOwner> eventOwner) { + loop->processEvents(); + CPPUNIT_ASSERT_EQUAL(0, static_cast<int>(events_.size())); + loop->postEvent(boost::bind(&EventLoopTest::logEvent, this, 1), eventOwner); + } private: std::vector<int> events_; |