#include #include #include #include #include "Swiften/EventLoop/EventOwner.h" #include "Swiften/EventLoop/SimpleEventLoop.h" #include "Swiften/Base/sleep.h" using namespace Swift; class EventLoopTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(EventLoopTest); CPPUNIT_TEST(testPost); CPPUNIT_TEST(testRemove); CPPUNIT_TEST_SUITE_END(); public: EventLoopTest() {} void setUp() { events_.clear(); } void testPost() { SimpleEventLoop testling; testling.postEvent(boost::bind(&EventLoopTest::logEvent, this, 1)); testling.postEvent(boost::bind(&EventLoopTest::logEvent, this, 2)); testling.stop(); testling.run(); CPPUNIT_ASSERT_EQUAL(2, static_cast(events_.size())); CPPUNIT_ASSERT_EQUAL(1, events_[0]); CPPUNIT_ASSERT_EQUAL(2, events_[1]); } void testRemove() { SimpleEventLoop testling; boost::shared_ptr eventOwner1(new MyEventOwner()); boost::shared_ptr eventOwner2(new MyEventOwner()); testling.postEvent(boost::bind(&EventLoopTest::logEvent, this, 1), eventOwner1); testling.postEvent(boost::bind(&EventLoopTest::logEvent, this, 2), eventOwner2); testling.postEvent(boost::bind(&EventLoopTest::logEvent, this, 3), eventOwner1); testling.postEvent(boost::bind(&EventLoopTest::logEvent, this, 4), eventOwner2); testling.removeEventsFromOwner(eventOwner2); testling.stop(); testling.run(); CPPUNIT_ASSERT_EQUAL(2, static_cast(events_.size())); CPPUNIT_ASSERT_EQUAL(1, events_[0]); CPPUNIT_ASSERT_EQUAL(3, events_[1]); } private: struct MyEventOwner : public EventOwner {}; void logEvent(int i) { events_.push_back(i); } private: std::vector events_; }; CPPUNIT_TEST_SUITE_REGISTRATION(EventLoopTest);