/* $Id: AutolockLooperTest.cpp 332 2002-07-19 06:45:28Z tylerdauwalder $ This file tests all use cases of the BAutolock when used with a BLooper. BLocker based tests are done seperately. */ #include "ThreadedTestCaller.h" #include "AutolockLooperTest.h" #include #include #include const bigtime_t SNOOZE_TIME = 250000; /* * Method: AutolockLooperTest::AutolockLooperTest() * Descr: This method is the only constructor for the AutolockLooperTest * class. */ AutolockLooperTest::AutolockLooperTest(std::string name) : BThreadedTestCase(name), theLooper(new BLooper) { theLooper->Run(); } /* * Method: AutolockLooperTest::~AutolockLooperTest() * Descr: This method is the destructor for the AutolockLooperTest class. * It only deallocates the autoLooper and Looper. */ AutolockLooperTest::~AutolockLooperTest() { if (theLooper != NULL) theLooper->Lock(); theLooper->Quit(); } /* * Method: AutolockLooperTest::TestThread1() * Descr: This method performs the tests on the Autolock. It constructs a new * Autolock and checks that both the Autolock and the Looper are * both locked. Then, the Autolock is released by deleting it. The Looper * is checked to see that it is now released. */ void AutolockLooperTest::TestThread1(void) { BAutolock *theAutolock = new BAutolock(theLooper); NextSubTest(); CPPUNIT_ASSERT(theLooper->IsLocked()); CPPUNIT_ASSERT(theLooper->LockingThread() == find_thread(NULL)); CPPUNIT_ASSERT(theAutolock->IsLocked()); NextSubTest(); delete theAutolock; theAutolock = NULL; CPPUNIT_ASSERT(theLooper->LockingThread() != find_thread(NULL)); } /* * Method: AutolockLooperTest::suite() * Descr: This static member function returns a test caller for performing * the "AutolockLooperTest" test. The test caller * is created as a ThreadedTestCaller (typedef'd as * BenaphoreLockCountTest1Caller) with three independent threads. */ CppUnit::Test *AutolockLooperTest::suite(void) { typedef BThreadedTestCaller AutolockLooperTestCaller; AutolockLooperTest *theTest = new AutolockLooperTest(""); AutolockLooperTestCaller *threadedTest = new AutolockLooperTestCaller("BAutolock::Looper Test", theTest); threadedTest->addThread("A", &AutolockLooperTest::TestThread1); return(threadedTest); }