Tweaks to deal with new repository hierarchy and use of unified CppUnit;

some bug fixes and a couple of new tests for BLooper.


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@242 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
ejakowatz
2002-07-15 15:51:31 +00:00
parent 8c27f58d89
commit abb579331f
20 changed files with 348 additions and 133 deletions
+4
View File
@@ -46,6 +46,9 @@
class BMessage; class BMessage;
class BMessageQueue; class BMessageQueue;
namespace BPrivate {
class BLooperList;
}
struct _loop_data_; struct _loop_data_;
// Port (Message Queue) Capacity ----------------------------------------------- // Port (Message Queue) Capacity -----------------------------------------------
@@ -138,6 +141,7 @@ private:
friend class BMessenger; friend class BMessenger;
friend class BView; friend class BView;
friend class BHandler; friend class BHandler;
friend class BPrivate::BLooperList;
friend port_id _get_looper_port_(const BLooper* ); friend port_id _get_looper_port_(const BLooper* );
friend status_t _safe_get_server_token_(const BLooper* , int32* ); friend status_t _safe_get_server_token_(const BLooper* , int32* );
friend team_id _find_cur_team_id_(); friend team_id _find_cur_team_id_();
+1
View File
@@ -6,6 +6,7 @@ include $(SUBDIR)/support/support.src ;
UsePrivateHeaders app ; UsePrivateHeaders app ;
UsePrivateHeaders interface ; UsePrivateHeaders interface ;
UsePrivateHeaders shared ;
UsePrivateHeaders support ; UsePrivateHeaders support ;
UsePublicHeaders app ; UsePublicHeaders app ;
+5 -17
View File
@@ -380,14 +380,6 @@ const char* BHandler::Name() const
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void BHandler::SetNextHandler(BHandler* handler) void BHandler::SetNextHandler(BHandler* handler)
{ {
// NOTE: This is called by BLooper::RemoveHandler() with NULL as the param,
// so we need to handle that possiblity.
if (!handler)
{
fNextHandler = NULL;
return;
}
if (!fLooper) if (!fLooper)
{ {
debugger("handler must belong to looper before setting NextHandler"); debugger("handler must belong to looper before setting NextHandler");
@@ -395,20 +387,16 @@ void BHandler::SetNextHandler(BHandler* handler)
return; return;
} }
if (fLooper != handler->Looper()) if (!fLooper->IsLocked())
{ {
debugger("The handler and its NextHandler must have the same looper"); debugger("The handler's looper must be locked before setting NextHandler");
return; return;
} }
if (!fLooper->IsLocked()) if (handler && fLooper != handler->Looper())
{ {
//debugger("Owning Looper must be locked before calling SetNextHandler"); debugger("The handler and its NextHandler must have the same looper");
// NOTE: Original implementation allows setting the next handler here return;
// anyway. The documentation *clearly* says otherwise. Can we get away
// with being more strict?
// return;
} }
// NOTE: I'm sure some sort of threading protection should happen here, // NOTE: I'm sure some sort of threading protection should happen here,
+92 -8
View File
@@ -55,7 +55,9 @@
// Project Includes ------------------------------------------------------------ // Project Includes ------------------------------------------------------------
// Local Includes -------------------------------------------------------------- // Local Includes --------------------------------------------------------------
#include "TokenSpace.h" #include <LooperList.h>
#include <ObjectLocker.h>
#include <TokenSpace.h>
// Local Defines --------------------------------------------------------------- // Local Defines ---------------------------------------------------------------
#define FILTER_LIST_BLOCK_SIZE 5 #define FILTER_LIST_BLOCK_SIZE 5
@@ -63,6 +65,9 @@
// Globals --------------------------------------------------------------------- // Globals ---------------------------------------------------------------------
using BPrivate::gDefaultTokens; using BPrivate::gDefaultTokens;
using BPrivate::gLooperList;
using BPrivate::BObjectLocker;
using BPrivate::BLooperList;
typedef bool (*find_loop_pred)(_loop_data_* data, void* data); typedef bool (*find_loop_pred)(_loop_data_* data, void* data);
_loop_data_* find_loop_data(_loop_data_* begin, _loop_data_* end, _loop_data_* find_loop_data(_loop_data_* begin, _loop_data_* end,
@@ -104,19 +109,23 @@ BLooper::BLooper(const char* name, int32 priority, int32 port_capacity)
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
BLooper::~BLooper() BLooper::~BLooper()
{ {
Lock();
kill_thread(fTaskID); kill_thread(fTaskID);
delete fQueue; delete fQueue;
delete_sem(fLockSem); delete_sem(fLockSem);
delete_port(fMsgPort); delete_port(fMsgPort);
UnlockFully();
// Clean up our filters // Clean up our filters
SetCommonFilterList(NULL); SetCommonFilterList(NULL);
BObjectLocker<BLooperList> ListLock(gLooperList);
#if 0
BAutolock ListLock(sLooperListLock); BAutolock ListLock(sLooperListLock);
#endif
RemoveHandler(this); RemoveHandler(this);
RemoveLooper(this); RemoveLooper(this);
UnlockFully();
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
BLooper::BLooper(BMessage* data) BLooper::BLooper(BMessage* data)
@@ -263,7 +272,8 @@ bool BLooper::IsMessageWaiting() const
if (!IsLocked()) if (!IsLocked())
{ {
// TODO: test // TODO: test
debugger(""); debugger("The Looper must be locked before calling IsMsgWaiting");
return false;
} }
if (!fQueue->IsEmpty()) if (!fQueue->IsEmpty())
@@ -271,6 +281,14 @@ bool BLooper::IsMessageWaiting() const
return true; return true;
} }
/**
@note: What we're doing here differs slightly from the R5 implementation.
It appears that they probably return count != 0, which gives a false
true (!) result when port_buffer_size_etc() would block -- which
indicates that the port's buffer is empty, so we should return false.
Since we don't actually care about what the error is, we just return
count > 0.
*/
int32 count; int32 count;
do do
{ {
@@ -302,9 +320,19 @@ void BLooper::AddHandler(BHandler* handler)
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool BLooper::RemoveHandler(BHandler* handler) bool BLooper::RemoveHandler(BHandler* handler)
{ {
// BeBook says looper must be locked for calls to this, but testing shows that // R5 implementation didn't bother to check its params, thus NULL handlers
// just ain't so. // will seg fault. Bad form, you know.
// AssertLocked(); if (!handler)
{
return false;
}
// Correction; testing shows the looper *does* need to be locked for this;
// it just doesn't use AssertLocked() for that.
if (!IsLocked())
{
debugger("Looper must be locked before calling RemoveHandler.");
}
// TODO: test // TODO: test
// Need to ensure this algo reflects what actually happens // Need to ensure this algo reflects what actually happens
@@ -516,7 +544,10 @@ bool BLooper::IsLocked() const
{ {
// We have to lock the list for the call to IsLooperValid(). Has the side // We have to lock the list for the call to IsLooperValid(). Has the side
// effect of not letting the looper get deleted while we're here. // effect of not letting the looper get deleted while we're here.
BObjectLocker<BLooperList> ListLock(gLooperList);
#if 0
BAutolock ListLock(sLooperListLock); BAutolock ListLock(sLooperListLock);
#endif
if (!ListLock.IsLocked()) if (!ListLock.IsLocked())
{ {
@@ -551,6 +582,12 @@ team_id BLooper::Team() const
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
BLooper* BLooper::LooperForThread(thread_id tid) BLooper* BLooper::LooperForThread(thread_id tid)
{ {
BObjectLocker<BLooperList> ListLock (gLooperList);
if (ListLock.IsLocked())
{
return gLooperList.LooperForThread(tid);
}
#if 0
BAutolock ListLock(sLooperListLock); BAutolock ListLock(sLooperListLock);
if (ListLock.IsLocked()) if (ListLock.IsLocked())
{ {
@@ -564,6 +601,7 @@ BLooper* BLooper::LooperForThread(thread_id tid)
} }
return NULL; return NULL;
#endif
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
thread_id BLooper::LockingThread() const thread_id BLooper::LockingThread() const
@@ -715,7 +753,10 @@ BLooper::BLooper(int32 priority, port_id port, const char* name)
status_t BLooper::_PostMessage(BMessage* msg, BHandler* handler, status_t BLooper::_PostMessage(BMessage* msg, BHandler* handler,
BHandler* reply_to) BHandler* reply_to)
{ {
BObjectLocker<BLooperList> ListLock(gLooperList);
#if 0
BAutolock ListLock(sLooperListLock); BAutolock ListLock(sLooperListLock);
#endif
if (!ListLock.IsLocked()) if (!ListLock.IsLocked())
{ {
return B_BAD_VALUE; return B_BAD_VALUE;
@@ -788,7 +829,10 @@ DBG(OUT("BLooper::_Lock() done 1\n"));
well to remove itself). well to remove itself).
*/ */
{ {
BObjectLocker<BLooperList> ListLock(gLooperList);
#if 0
BAutolock ListLock(sLooperListLock); BAutolock ListLock(sLooperListLock);
#endif
if (!ListLock.IsLocked()) if (!ListLock.IsLocked())
{ {
// If we can't lock, the semaphore is probably // If we can't lock, the semaphore is probably
@@ -911,8 +955,11 @@ void BLooper::InitData(const char* name, int32 priority, int32 port_capacity)
fMsgPort = create_port(port_capacity, name ? name : "LooperPort"); fMsgPort = create_port(port_capacity, name ? name : "LooperPort");
fInitPriority = priority; fInitPriority = priority;
BObjectLocker<BLooperList> ListLock(gLooperList);
#if 0
BAutolock ListLock(sLooperListLock); BAutolock ListLock(sLooperListLock);
#endif
AddLooper(this); AddLooper(this);
AddHandler(this); AddHandler(this);
} }
@@ -1237,6 +1284,11 @@ void BLooper::UnlockFully()
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void BLooper::AddLooper(BLooper* loop) void BLooper::AddLooper(BLooper* loop)
{ {
if (gLooperList.IsLocked())
{
gLooperList.AddLooper(loop);
}
#if 0
if (sLooperListLock.IsLocked()) if (sLooperListLock.IsLocked())
{ {
#if defined(CHECK_ADD_LOOPER) #if defined(CHECK_ADD_LOOPER)
@@ -1293,10 +1345,16 @@ DBG(OUT("BLooper::AddLooper(): looper added at %ld\n", looperCount));
{ {
debugger("sLooperList is not locked!"); debugger("sLooperList is not locked!");
} }
#endif
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool BLooper::IsLooperValid(const BLooper* l) bool BLooper::IsLooperValid(const BLooper* l)
{ {
if (gLooperList.IsLocked())
{
return gLooperList.IsLooperValid(l);
}
#if 0
if (sLooperListLock.IsLocked()) if (sLooperListLock.IsLocked())
{ {
return find_loop_data(sLooperList, sLooperList + sLooperCount, return find_loop_data(sLooperList, sLooperList + sLooperCount,
@@ -1304,10 +1362,16 @@ bool BLooper::IsLooperValid(const BLooper* l)
} }
return false; return false;
#endif
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void BLooper::RemoveLooper(BLooper* l) void BLooper::RemoveLooper(BLooper* l)
{ {
if (gLooperList.IsLocked())
{
gLooperList.RemoveLooper(l);
}
#if 0
if (sLooperListLock.IsLocked()) if (sLooperListLock.IsLocked())
{ {
_loop_data_* result = find_loop_data(sLooperList, _loop_data_* result = find_loop_data(sLooperList,
@@ -1327,20 +1391,33 @@ void BLooper::RemoveLooper(BLooper* l)
sLooperListSize = 0; sLooperListSize = 0;
} }
} }
#endif
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void BLooper::GetLooperList(BList* list) void BLooper::GetLooperList(BList* list)
{ {
BObjectLocker<BLooperList> ListLock(gLooperList);
if (ListLock.IsLocked())
{
gLooperList.GetLooperList(list);
}
#if 0
BAutolock ListLock(sLooperListLock); BAutolock ListLock(sLooperListLock);
if (ListLock.IsLocked()) if (ListLock.IsLocked())
{ {
find_loop_data(sLooperList, sLooperList + sLooperCount, find_loop_data(sLooperList, sLooperList + sLooperCount,
copy_list_pred, (void*)list); copy_list_pred, (void*)list);
} }
#endif
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
BLooper* BLooper::LooperForName(const char* name) BLooper* BLooper::LooperForName(const char* name)
{ {
if (gLooperList.IsLocked())
{
return gLooperList.LooperForName(name);
}
#if 0
if (sLooperListLock.IsLocked()) if (sLooperListLock.IsLocked())
{ {
_loop_data_* result = find_loop_data(sLooperList, _loop_data_* result = find_loop_data(sLooperList,
@@ -1351,12 +1428,18 @@ BLooper* BLooper::LooperForName(const char* name)
return result->looper; return result->looper;
} }
} }
#endif
return NULL; return NULL;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
BLooper* BLooper::LooperForPort(port_id port) BLooper* BLooper::LooperForPort(port_id port)
{ {
if (gLooperList.IsLocked())
{
return gLooperList.LooperForPort(port);
}
#if 0
if (sLooperListLock.IsLocked()) if (sLooperListLock.IsLocked())
{ {
_loop_data_* result = find_loop_data(sLooperList, _loop_data_* result = find_loop_data(sLooperList,
@@ -1367,6 +1450,7 @@ BLooper* BLooper::LooperForPort(port_id port)
return result->looper; return result->looper;
} }
} }
#endif
return NULL; return NULL;
} }
+1
View File
@@ -3,6 +3,7 @@ APP_KIT_SOURCE =
Handler.cpp Handler.cpp
Invoker.cpp Invoker.cpp
Looper.cpp Looper.cpp
LooperList.cpp
MessageFilter.cpp MessageFilter.cpp
MessageQueue.cpp MessageQueue.cpp
Messenger.cpp Messenger.cpp
+31 -31
View File
@@ -38,7 +38,7 @@
void TBHandlerTester::BHandler1() void TBHandlerTester::BHandler1()
{ {
BHandler Handler((const char*)NULL); BHandler Handler((const char*)NULL);
assert(Handler.Name() == NULL); CPPUNIT_ASSERT(Handler.Name() == NULL);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -50,7 +50,7 @@ void TBHandlerTester::BHandler1()
void TBHandlerTester::BHandler2() void TBHandlerTester::BHandler2()
{ {
BHandler Handler("name"); BHandler Handler("name");
assert(string("name") == Handler.Name()); CPPUNIT_ASSERT(string("name") == Handler.Name());
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -64,7 +64,7 @@ void TBHandlerTester::BHandler3()
BMessage Archive; BMessage Archive;
Archive.AddString("_name", "the name"); Archive.AddString("_name", "the name");
BHandler Handler(&Archive); BHandler Handler(&Archive);
assert(string("the name") == Handler.Name()); CPPUNIT_ASSERT(string("the name") == Handler.Name());
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -77,7 +77,7 @@ void TBHandlerTester::BHandler4()
{ {
BMessage Archive; BMessage Archive;
BHandler Handler(&Archive); BHandler Handler(&Archive);
assert(Handler.Name() == NULL); CPPUNIT_ASSERT(Handler.Name() == NULL);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -93,7 +93,7 @@ void TBHandlerTester::BHandler5()
{ {
#if !defined(TEST_R5) #if !defined(TEST_R5)
BHandler Handler((BMessage*)NULL); BHandler Handler((BMessage*)NULL);
assert(Handler.Name() == NULL); CPPUNIT_ASSERT(Handler.Name() == NULL);
#endif #endif
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@@ -110,7 +110,7 @@ void TBHandlerTester::Archive1()
{ {
#if !defined(TEST_R5) #if !defined(TEST_R5)
BHandler Handler; BHandler Handler;
assert(Handler.Archive(NULL, false) == B_BAD_VALUE); CPPUNIT_ASSERT(Handler.Archive(NULL, false) == B_BAD_VALUE);
#endif #endif
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@@ -127,7 +127,7 @@ void TBHandlerTester::Archive2()
{ {
#if !defined(TEST_R5) #if !defined(TEST_R5)
BHandler Handler; BHandler Handler;
assert(Handler.Archive(NULL) == B_BAD_VALUE); CPPUNIT_ASSERT(Handler.Archive(NULL) == B_BAD_VALUE);
#endif #endif
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@@ -146,13 +146,13 @@ void TBHandlerTester::Archive3()
{ {
BMessage Archive; BMessage Archive;
BHandler Handler("a name"); BHandler Handler("a name");
assert(Handler.Archive(&Archive, false) == B_OK); CPPUNIT_ASSERT(Handler.Archive(&Archive, false) == B_OK);
const char* data; const char* data;
assert(Archive.FindString("_name", &data) == B_OK); CPPUNIT_ASSERT(Archive.FindString("_name", &data) == B_OK);
assert(string("a name") == data); CPPUNIT_ASSERT(string("a name") == data);
assert(Archive.FindString("class", &data) == B_OK); CPPUNIT_ASSERT(Archive.FindString("class", &data) == B_OK);
assert(string("BHandler") == data); CPPUNIT_ASSERT(string("BHandler") == data);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -170,13 +170,13 @@ void TBHandlerTester::Archive4()
{ {
BMessage Archive; BMessage Archive;
BHandler Handler("another name"); BHandler Handler("another name");
assert(Handler.Archive(&Archive) == B_OK); CPPUNIT_ASSERT(Handler.Archive(&Archive) == B_OK);
const char* data; const char* data;
assert(Archive.FindString("_name", &data) == B_OK); CPPUNIT_ASSERT(Archive.FindString("_name", &data) == B_OK);
assert(string("another name") == data); CPPUNIT_ASSERT(string("another name") == data);
assert(Archive.FindString("class", &data) == B_OK); CPPUNIT_ASSERT(Archive.FindString("class", &data) == B_OK);
assert(string("BHandler") == data); CPPUNIT_ASSERT(string("BHandler") == data);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -190,8 +190,8 @@ void TBHandlerTester::Archive4()
void TBHandlerTester::Instantiate1() void TBHandlerTester::Instantiate1()
{ {
#if !defined(TEST_R5) #if !defined(TEST_R5)
assert(BHandler::Instantiate(NULL) == NULL); CPPUNIT_ASSERT(BHandler::Instantiate(NULL) == NULL);
assert(errno == B_BAD_VALUE); CPPUNIT_ASSERT(errno == B_BAD_VALUE);
#endif #endif
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@@ -211,9 +211,9 @@ void TBHandlerTester::Instantiate2()
BHandler* Handler = BHandler* Handler =
dynamic_cast<BHandler*>(BHandler::Instantiate(&Archive)); dynamic_cast<BHandler*>(BHandler::Instantiate(&Archive));
assert(Handler != NULL); CPPUNIT_ASSERT(Handler != NULL);
assert(string("a name") == Handler->Name()); CPPUNIT_ASSERT(string("a name") == Handler->Name());
assert(errno == B_OK); CPPUNIT_ASSERT(errno == B_OK);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -231,9 +231,9 @@ void TBHandlerTester::Instantiate3()
BHandler* Handler = BHandler* Handler =
dynamic_cast<BHandler*>(BHandler::Instantiate(&Archive)); dynamic_cast<BHandler*>(BHandler::Instantiate(&Archive));
assert(Handler != NULL); CPPUNIT_ASSERT(Handler != NULL);
assert(Handler->Name() == NULL); CPPUNIT_ASSERT(Handler->Name() == NULL);
assert(errno == B_OK); CPPUNIT_ASSERT(errno == B_OK);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -247,10 +247,10 @@ void TBHandlerTester::Instantiate3()
void TBHandlerTester::SetName1() void TBHandlerTester::SetName1()
{ {
BHandler Handler("a name"); BHandler Handler("a name");
assert(string("a name") == Handler.Name()); CPPUNIT_ASSERT(string("a name") == Handler.Name());
Handler.SetName(NULL); Handler.SetName(NULL);
assert(Handler.Name() == NULL); CPPUNIT_ASSERT(Handler.Name() == NULL);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -263,10 +263,10 @@ void TBHandlerTester::SetName1()
void TBHandlerTester::SetName2() void TBHandlerTester::SetName2()
{ {
BHandler Handler("a name"); BHandler Handler("a name");
assert(string("a name") == Handler.Name()); CPPUNIT_ASSERT(string("a name") == Handler.Name());
Handler.SetName("another name"); Handler.SetName("another name");
assert(string("another name") == Handler.Name()); CPPUNIT_ASSERT(string("another name") == Handler.Name());
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -279,7 +279,7 @@ void TBHandlerTester::SetName2()
void TBHandlerTester::Perform1() void TBHandlerTester::Perform1()
{ {
BHandler Handler; BHandler Handler;
assert(Handler.Perform(0, NULL) == B_ERROR); CPPUNIT_ASSERT(Handler.Perform(0, NULL) == B_ERROR);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -290,7 +290,7 @@ void TBHandlerTester::Perform1()
void TBHandlerTester::FilterList1() void TBHandlerTester::FilterList1()
{ {
BHandler Handler; BHandler Handler;
assert(!Handler.FilterList()); CPPUNIT_ASSERT(!Handler.FilterList());
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Test* TBHandlerTester::Suite() Test* TBHandlerTester::Suite()
@@ -24,7 +24,7 @@
*/ */
void TIsWatchedTest::IsWatched1() void TIsWatchedTest::IsWatched1()
{ {
assert(!fHandler.IsWatched()); CPPUNIT_ASSERT(!fHandler.IsWatched());
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -39,11 +39,11 @@ void TIsWatchedTest::IsWatched2()
{ {
BHandler Watcher; BHandler Watcher;
fHandler.StartWatching(&Watcher, '1234'); fHandler.StartWatching(&Watcher, '1234');
assert(fHandler.IsWatched() == true); CPPUNIT_ASSERT(fHandler.IsWatched() == true);
fHandler.StopWatching(&Watcher, '1234'); fHandler.StopWatching(&Watcher, '1234');
#ifndef TEST_R5 #ifndef TEST_R5
assert(fHandler.IsWatched() == false); CPPUNIT_ASSERT(fHandler.IsWatched() == false);
#endif #endif
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@@ -27,7 +27,7 @@
void TLockLooperTest::LockLooper1() void TLockLooperTest::LockLooper1()
{ {
BHandler Handler; BHandler Handler;
assert(!Handler.LockLooper()); CPPUNIT_ASSERT(!Handler.LockLooper());
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -45,7 +45,7 @@ void TLockLooperTest::LockLooper2()
// Make sure the looper is unlocked // Make sure the looper is unlocked
Looper.Unlock(); Looper.Unlock();
} }
assert(Handler.LockLooper()); CPPUNIT_ASSERT(Handler.LockLooper());
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -59,7 +59,7 @@ void TLockLooperTest::LockLooper3()
BHandler Handler; BHandler Handler;
Looper.AddHandler(&Handler); Looper.AddHandler(&Handler);
Looper.Lock(); Looper.Lock();
assert(Handler.LockLooper()); CPPUNIT_ASSERT(Handler.LockLooper());
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -83,7 +83,7 @@ void TLockLooperTest::LockLooper4()
resume_thread(tid); resume_thread(tid);
info.LockTest(); info.LockTest();
assert(!Handler.LockLooper()); CPPUNIT_ASSERT(!Handler.LockLooper());
info.UnlockThread(); info.UnlockThread();
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@@ -28,7 +28,7 @@
void TLockLooperWithTimeoutTest::LockLooperWithTimeout1() void TLockLooperWithTimeoutTest::LockLooperWithTimeout1()
{ {
BHandler Handler; BHandler Handler;
assert(Handler.LockLooperWithTimeout(10000) == B_BAD_VALUE); CPPUNIT_ASSERT(Handler.LockLooperWithTimeout(10000) == B_BAD_VALUE);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -47,7 +47,7 @@ void TLockLooperWithTimeoutTest::LockLooperWithTimeout2()
// Make sure the looper is unlocked // Make sure the looper is unlocked
Looper.Unlock(); Looper.Unlock();
} }
assert(Handler.LockLooperWithTimeout(10000) == B_OK); CPPUNIT_ASSERT(Handler.LockLooperWithTimeout(10000) == B_OK);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -62,7 +62,7 @@ void TLockLooperWithTimeoutTest::LockLooperWithTimeout3()
BHandler Handler; BHandler Handler;
Looper.AddHandler(&Handler); Looper.AddHandler(&Handler);
Looper.Lock(); Looper.Lock();
assert(Handler.LockLooperWithTimeout(10000) == B_OK); CPPUNIT_ASSERT(Handler.LockLooperWithTimeout(10000) == B_OK);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -87,7 +87,7 @@ void TLockLooperWithTimeoutTest::LockLooperWithTimeout4()
resume_thread(tid); resume_thread(tid);
info.LockTest(); info.LockTest();
assert(Handler.LockLooperWithTimeout(10000) == B_TIMED_OUT); CPPUNIT_ASSERT(Handler.LockLooperWithTimeout(10000) == B_TIMED_OUT);
info.UnlockThread(); info.UnlockThread();
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
+4 -4
View File
@@ -25,7 +25,7 @@
*/ */
void TLooperTest::LooperTest1() void TLooperTest::LooperTest1()
{ {
assert(fHandler.Looper() == NULL); CPPUNIT_ASSERT(fHandler.Looper() == NULL);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -37,10 +37,10 @@ void TLooperTest::LooperTest2()
{ {
BLooper Looper; BLooper Looper;
Looper.AddHandler(&fHandler); Looper.AddHandler(&fHandler);
assert(fHandler.Looper() == &Looper); CPPUNIT_ASSERT(fHandler.Looper() == &Looper);
assert(Looper.RemoveHandler(&fHandler)); CPPUNIT_ASSERT(Looper.RemoveHandler(&fHandler));
assert(fHandler.Looper() == NULL); CPPUNIT_ASSERT(fHandler.Looper() == NULL);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Test* TLooperTest::Suite() Test* TLooperTest::Suite()
@@ -26,7 +26,7 @@
void TNextHandlerTest::NextHandler1() void TNextHandlerTest::NextHandler1()
{ {
BHandler Handler; BHandler Handler;
assert(Handler.NextHandler() == NULL); CPPUNIT_ASSERT(Handler.NextHandler() == NULL);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -39,7 +39,7 @@ void TNextHandlerTest::NextHandler2()
BHandler Handler; BHandler Handler;
BLooper Looper; BLooper Looper;
Looper.AddHandler(&Handler); Looper.AddHandler(&Handler);
assert(Handler.NextHandler() == &Looper); CPPUNIT_ASSERT(Handler.NextHandler() == &Looper);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Test* TNextHandlerTest::Suite() Test* TNextHandlerTest::Suite()
@@ -32,7 +32,7 @@
void TRemoveFilterTest::RemoveFilter1() void TRemoveFilterTest::RemoveFilter1()
{ {
BHandler Handler; BHandler Handler;
assert(!Handler.RemoveFilter(NULL)); CPPUNIT_ASSERT(!Handler.RemoveFilter(NULL));
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -48,7 +48,7 @@ void TRemoveFilterTest::RemoveFilter2()
BHandler Handler; BHandler Handler;
BMessageFilter* Filter = new BMessageFilter('1234'); BMessageFilter* Filter = new BMessageFilter('1234');
Handler.AddFilter(Filter); Handler.AddFilter(Filter);
assert(Handler.RemoveFilter(Filter)); CPPUNIT_ASSERT(Handler.RemoveFilter(Filter));
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -66,7 +66,7 @@ void TRemoveFilterTest::RemoveFilter3()
Looper.AddHandler(&Handler); Looper.AddHandler(&Handler);
BMessageFilter* Filter = new BMessageFilter('1234'); BMessageFilter* Filter = new BMessageFilter('1234');
Handler.AddFilter(Filter); Handler.AddFilter(Filter);
assert(Handler.RemoveFilter(Filter)); CPPUNIT_ASSERT(Handler.RemoveFilter(Filter));
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -83,7 +83,7 @@ void TRemoveFilterTest::RemoveFilter4()
Looper.Lock(); Looper.Lock();
BMessageFilter* Filter = new BMessageFilter('1234'); BMessageFilter* Filter = new BMessageFilter('1234');
Handler.AddFilter(Filter); Handler.AddFilter(Filter);
assert(Handler.RemoveFilter(Filter)); CPPUNIT_ASSERT(Handler.RemoveFilter(Filter));
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -98,7 +98,7 @@ void TRemoveFilterTest::RemoveFilter5()
{ {
BHandler Handler; BHandler Handler;
BMessageFilter* Filter = new BMessageFilter('1234'); BMessageFilter* Filter = new BMessageFilter('1234');
assert(!Handler.RemoveFilter(Filter)); CPPUNIT_ASSERT(!Handler.RemoveFilter(Filter));
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -116,7 +116,7 @@ void TRemoveFilterTest::RemoveFilter6()
BHandler Handler; BHandler Handler;
Looper.AddHandler(&Handler); Looper.AddHandler(&Handler);
BMessageFilter* Filter = new BMessageFilter('1234'); BMessageFilter* Filter = new BMessageFilter('1234');
assert(!Handler.RemoveFilter(Filter)); CPPUNIT_ASSERT(!Handler.RemoveFilter(Filter));
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -133,7 +133,7 @@ void TRemoveFilterTest::RemoveFilter7()
Looper.AddHandler(&Handler); Looper.AddHandler(&Handler);
Looper.Lock(); Looper.Lock();
BMessageFilter* Filter = new BMessageFilter('1234'); BMessageFilter* Filter = new BMessageFilter('1234');
assert(!Handler.RemoveFilter(Filter)); CPPUNIT_ASSERT(!Handler.RemoveFilter(Filter));
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Test* TRemoveFilterTest::Suite() Test* TRemoveFilterTest::Suite()
@@ -33,7 +33,7 @@ void TSetFilterListTest::SetFilterList1()
{ {
BHandler Handler; BHandler Handler;
Handler.SetFilterList(NULL); Handler.SetFilterList(NULL);
assert(!Handler.FilterList()); CPPUNIT_ASSERT(!Handler.FilterList());
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -49,7 +49,7 @@ void TSetFilterListTest::SetFilterList2()
Filters->AddItem((void*)Filter); Filters->AddItem((void*)Filter);
BHandler Handler; BHandler Handler;
Handler.SetFilterList(Filters); Handler.SetFilterList(Filters);
assert(Handler.FilterList() == Filters); CPPUNIT_ASSERT(Handler.FilterList() == Filters);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -62,6 +62,8 @@ void TSetFilterListTest::SetFilterList2()
*/ */
void TSetFilterListTest::SetFilterList3() void TSetFilterListTest::SetFilterList3()
{ {
DEBUGGER_ESCAPE;
BLooper Looper; BLooper Looper;
BHandler Handler; BHandler Handler;
@@ -76,7 +78,7 @@ void TSetFilterListTest::SetFilterList3()
} }
Handler.SetFilterList(Filters); Handler.SetFilterList(Filters);
assert(!Handler.FilterList()); CPPUNIT_ASSERT(!Handler.FilterList());
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -95,7 +97,7 @@ void TSetFilterListTest::SetFilterList4()
Looper.Lock(); Looper.Lock();
Looper.AddHandler(&Handler); Looper.AddHandler(&Handler);
Handler.SetFilterList(Filters); Handler.SetFilterList(Filters);
assert(Handler.FilterList() == Filters); CPPUNIT_ASSERT(Handler.FilterList() == Filters);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -114,10 +116,10 @@ void TSetFilterListTest::SetFilterList5()
Looper.Lock(); Looper.Lock();
Looper.AddHandler(&Handler); Looper.AddHandler(&Handler);
Handler.SetFilterList(Filters); Handler.SetFilterList(Filters);
assert(Handler.FilterList() == Filters); CPPUNIT_ASSERT(Handler.FilterList() == Filters);
Handler.SetFilterList(NULL); Handler.SetFilterList(NULL);
assert(!Handler.FilterList()); CPPUNIT_ASSERT(!Handler.FilterList());
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Test* TSetFilterListTest::Suite() Test* TSetFilterListTest::Suite()
@@ -35,10 +35,10 @@ void TSetNextHandlerTest::SetNextHandler0()
Looper.AddHandler(&Handler2); Looper.AddHandler(&Handler2);
Handler1.SetNextHandler(&Handler2); Handler1.SetNextHandler(&Handler2);
assert(Handler1.NextHandler() == &Handler2); CPPUNIT_ASSERT(Handler1.NextHandler() == &Handler2);
Handler1.SetNextHandler(NULL); Handler1.SetNextHandler(NULL);
assert(!Handler1.NextHandler()); CPPUNIT_ASSERT(!Handler1.NextHandler());
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -52,10 +52,12 @@ void TSetNextHandlerTest::SetNextHandler0()
*/ */
void TSetNextHandlerTest::SetNextHandler1() void TSetNextHandlerTest::SetNextHandler1()
{ {
DEBUGGER_ESCAPE;
BHandler Handler1; BHandler Handler1;
BHandler Handler2; BHandler Handler2;
Handler1.SetNextHandler(&Handler2); Handler1.SetNextHandler(&Handler2);
assert(Handler1.NextHandler() == NULL); CPPUNIT_ASSERT(Handler1.NextHandler() == NULL);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -64,17 +66,20 @@ void TSetNextHandlerTest::SetNextHandler1()
@case Handler1 belongs to a unlocked BLooper, Handler2 does not @case Handler1 belongs to a unlocked BLooper, Handler2 does not
@param handler Valid BHandler pointer @param handler Valid BHandler pointer
@results NextHandler() returns BLooper @results NextHandler() returns BLooper
debug message "The handler and its NextHandler must have debug message "The handler's looper must be locked before
the same looper" setting NextHandler"
*/ */
void TSetNextHandlerTest::SetNextHandler2() void TSetNextHandlerTest::SetNextHandler2()
{ {
DEBUGGER_ESCAPE;
BHandler Handler1; BHandler Handler1;
BHandler Handler2; BHandler Handler2;
BLooper Looper; BLooper Looper;
Looper.AddHandler(&Handler1); Looper.AddHandler(&Handler1);
Looper.Unlock();
Handler1.SetNextHandler(&Handler2); Handler1.SetNextHandler(&Handler2);
assert(Handler1.NextHandler() == &Looper); CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -88,13 +93,14 @@ void TSetNextHandlerTest::SetNextHandler2()
*/ */
void TSetNextHandlerTest::SetNextHandler3() void TSetNextHandlerTest::SetNextHandler3()
{ {
DEBUGGER_ESCAPE;
BHandler Handler1; BHandler Handler1;
BHandler Handler2; BHandler Handler2;
BLooper Looper; BLooper Looper;
Looper.AddHandler(&Handler1); Looper.AddHandler(&Handler1);
Looper.Lock();
Handler1.SetNextHandler(&Handler2); Handler1.SetNextHandler(&Handler2);
assert(Handler1.NextHandler() == &Looper); CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -108,12 +114,15 @@ void TSetNextHandlerTest::SetNextHandler3()
*/ */
void TSetNextHandlerTest::SetNextHandler4() void TSetNextHandlerTest::SetNextHandler4()
{ {
DEBUGGER_ESCAPE;
BHandler Handler1; BHandler Handler1;
BHandler Handler2; BHandler Handler2;
BLooper Looper; BLooper Looper;
Looper.AddHandler(&Handler2); Looper.AddHandler(&Handler2);
Looper.Unlock();
Handler1.SetNextHandler(&Handler2); Handler1.SetNextHandler(&Handler2);
assert(Handler1.NextHandler() == NULL); CPPUNIT_ASSERT(Handler1.NextHandler() == NULL);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -127,13 +136,14 @@ void TSetNextHandlerTest::SetNextHandler4()
*/ */
void TSetNextHandlerTest::SetNextHandler5() void TSetNextHandlerTest::SetNextHandler5()
{ {
DEBUGGER_ESCAPE;
BHandler Handler1; BHandler Handler1;
BHandler Handler2; BHandler Handler2;
BLooper Looper; BLooper Looper;
Looper.AddHandler(&Handler2); Looper.AddHandler(&Handler2);
Looper.Lock();
Handler1.SetNextHandler(&Handler2); Handler1.SetNextHandler(&Handler2);
assert(Handler1.NextHandler() == NULL); CPPUNIT_ASSERT(Handler1.NextHandler() == NULL);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -147,14 +157,18 @@ void TSetNextHandlerTest::SetNextHandler5()
*/ */
void TSetNextHandlerTest::SetNextHandler6() void TSetNextHandlerTest::SetNextHandler6()
{ {
DEBUGGER_ESCAPE;
BHandler Handler1; BHandler Handler1;
BHandler Handler2; BHandler Handler2;
BLooper Looper1; BLooper Looper1;
BLooper Looper2; BLooper Looper2;
Looper1.AddHandler(&Handler1); Looper1.AddHandler(&Handler1);
Looper2.AddHandler(&Handler2); Looper2.AddHandler(&Handler2);
Looper1.Unlock();
Looper2.Unlock();
Handler1.SetNextHandler(&Handler2); Handler1.SetNextHandler(&Handler2);
assert(Handler1.NextHandler() == &Looper1); CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper1);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -169,15 +183,17 @@ void TSetNextHandlerTest::SetNextHandler6()
*/ */
void TSetNextHandlerTest::SetNextHandler7() void TSetNextHandlerTest::SetNextHandler7()
{ {
DEBUGGER_ESCAPE;
BHandler Handler1; BHandler Handler1;
BHandler Handler2; BHandler Handler2;
BLooper Looper1; BLooper Looper1;
BLooper Looper2; BLooper Looper2;
Looper1.AddHandler(&Handler1); Looper1.AddHandler(&Handler1);
Looper2.AddHandler(&Handler2); Looper2.AddHandler(&Handler2);
Looper1.Lock(); Looper2.Unlock();
Handler1.SetNextHandler(&Handler2); Handler1.SetNextHandler(&Handler2);
assert(Handler1.NextHandler() == &Looper1); CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper1);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -192,15 +208,17 @@ void TSetNextHandlerTest::SetNextHandler7()
*/ */
void TSetNextHandlerTest::SetNextHandler8() void TSetNextHandlerTest::SetNextHandler8()
{ {
DEBUGGER_ESCAPE;
BHandler Handler1; BHandler Handler1;
BHandler Handler2; BHandler Handler2;
BLooper Looper1; BLooper Looper1;
BLooper Looper2; BLooper Looper2;
Looper1.AddHandler(&Handler1); Looper1.AddHandler(&Handler1);
Looper2.AddHandler(&Handler2); Looper2.AddHandler(&Handler2);
Looper2.Lock(); Looper1.Unlock();
Handler1.SetNextHandler(&Handler2); Handler1.SetNextHandler(&Handler2);
assert(Handler1.NextHandler() == &Looper1); CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper1);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -214,16 +232,16 @@ void TSetNextHandlerTest::SetNextHandler8()
*/ */
void TSetNextHandlerTest::SetNextHandler9() void TSetNextHandlerTest::SetNextHandler9()
{ {
DEBUGGER_ESCAPE;
BHandler Handler1; BHandler Handler1;
BHandler Handler2; BHandler Handler2;
BLooper Looper1; BLooper Looper1;
BLooper Looper2; BLooper Looper2;
Looper1.AddHandler(&Handler1); Looper1.AddHandler(&Handler1);
Looper2.AddHandler(&Handler2); Looper2.AddHandler(&Handler2);
Looper1.Lock();
Looper2.Lock();
Handler1.SetNextHandler(&Handler2); Handler1.SetNextHandler(&Handler2);
assert(Handler1.NextHandler() == &Looper1); CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper1);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -232,18 +250,23 @@ void TSetNextHandlerTest::SetNextHandler9()
@case Handler1 and Handler2 belong to the same unlocked BLooper @case Handler1 and Handler2 belong to the same unlocked BLooper
@param handler Valid BHandler pointer @param handler Valid BHandler pointer
@results Returns Handler2 @results Returns Handler2
@note Docs say the looper must be locked, but the original debug message "The handler's looper must be locked before
implementation allows the next handler to be set anyway. setting NextHandler"
@note R5 implementation allows the next handler to be set anyway;
we do the same.
*/ */
void TSetNextHandlerTest::SetNextHandler10() void TSetNextHandlerTest::SetNextHandler10()
{ {
DEBUGGER_ESCAPE;
BLooper Looper; BLooper Looper;
BHandler Handler1; BHandler Handler1;
BHandler Handler2; BHandler Handler2;
Looper.AddHandler(&Handler1); Looper.AddHandler(&Handler1);
Looper.AddHandler(&Handler2); Looper.AddHandler(&Handler2);
Looper.Unlock();
Handler1.SetNextHandler(&Handler2); Handler1.SetNextHandler(&Handler2);
assert(Handler1.NextHandler() == &Handler2); CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
@@ -260,9 +283,8 @@ void TSetNextHandlerTest::SetNextHandler11()
BHandler Handler2; BHandler Handler2;
Looper.AddHandler(&Handler1); Looper.AddHandler(&Handler1);
Looper.AddHandler(&Handler2); Looper.AddHandler(&Handler2);
Looper.Lock();
Handler1.SetNextHandler(&Handler2); Handler1.SetNextHandler(&Handler2);
assert(Handler1.NextHandler() == &Handler2); CPPUNIT_ASSERT(Handler1.NextHandler() == &Handler2);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Test* TSetNextHandlerTest::Suite() Test* TSetNextHandlerTest::Suite()
@@ -270,15 +292,15 @@ Test* TSetNextHandlerTest::Suite()
TestSuite* SuiteOfTests = new TestSuite("BHandler::SetNextHandler"); TestSuite* SuiteOfTests = new TestSuite("BHandler::SetNextHandler");
ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler0); ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler0);
// ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler1); ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler1);
// ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler2); ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler2);
// ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler3); ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler3);
// ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler4); ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler4);
// ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler5); ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler5);
// ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler6); ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler6);
// ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler7); ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler7);
// ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler8); ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler8);
// ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler9); ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler9);
ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler10); ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler10);
ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler11); ADD_TEST(SuiteOfTests, TSetNextHandlerTest, SetNextHandler11);
@@ -42,6 +42,8 @@ void TUnlockLooperTest::UnlockLooper1()
*/ */
void TUnlockLooperTest::UnlockLooper2() void TUnlockLooperTest::UnlockLooper2()
{ {
DEBUGGER_ESCAPE;
BLooper Looper; BLooper Looper;
BHandler Handler; BHandler Handler;
Looper.AddHandler(&Handler); Looper.AddHandler(&Handler);
+4
View File
@@ -8,4 +8,8 @@ case 5: looper is locked, message is posted, queue is emptied
RemoveHandler(BHandler* handler) RemoveHandler(BHandler* handler)
-------------- --------------
case : handler is NULL
case : handler doesn't belong to this looper
case : handler is valid, looper is unlocked
case : handler doesn't belong to this looper, looper is unlocked
case : handler has filters; FilterList() should be NULL on remove case : handler has filters; FilterList() should be NULL on remove
@@ -5,9 +5,11 @@
// Standard Includes ----------------------------------------------------------- // Standard Includes -----------------------------------------------------------
#include <iostream> #include <iostream>
#include <posix/string.h>
// System Includes ------------------------------------------------------------- // System Includes -------------------------------------------------------------
#include <Looper.h> #include <Looper.h>
#include <Message.h>
#include <MessageQueue.h> #include <MessageQueue.h>
// Project Includes ------------------------------------------------------------ // Project Includes ------------------------------------------------------------
@@ -24,20 +26,22 @@ port_id _get_looper_port_(const BLooper* looper);
//case 1: looper is unlocked and queue is empty //case 1: looper is unlocked and queue is empty
void TIsMessageWaitingTest::IsMessageWaiting1() void TIsMessageWaitingTest::IsMessageWaiting1()
{ {
DEBUGGER_ESCAPE;
BLooper Looper; BLooper Looper;
#ifndef TEST_R5 Looper.Unlock();
assert(!Looper.IsMessageWaiting()); CPPUNIT_ASSERT(!Looper.IsMessageWaiting());
#else
assert(Looper.IsMessageWaiting());
#endif
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
//case 2: looper is unlocked and queue is filled //case 2: looper is unlocked and queue is filled
void TIsMessageWaitingTest::IsMessageWaiting2() void TIsMessageWaitingTest::IsMessageWaiting2()
{ {
DEBUGGER_ESCAPE;
BLooper Looper; BLooper Looper;
Looper.Unlock();
Looper.PostMessage('1234'); Looper.PostMessage('1234');
assert(Looper.IsMessageWaiting()); CPPUNIT_ASSERT(!Looper.IsMessageWaiting());
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
//case 3: looper is locked and queue is empty //case 3: looper is locked and queue is empty
@@ -46,9 +50,24 @@ void TIsMessageWaitingTest::IsMessageWaiting3()
BLooper Looper; BLooper Looper;
Looper.Lock(); Looper.Lock();
#ifndef TEST_R5 #ifndef TEST_R5
assert(!Looper.IsMessageWaiting()); CPPUNIT_ASSERT(!Looper.IsMessageWaiting());
#else #else
assert(Looper.IsMessageWaiting()); #if 0
// Testing to figure out why we get false positives from the R5
// implementation of BLooper::IsMessageWaiting().
CPPUNIT_ASSERT(Looper.IsLocked());
CPPUNIT_ASSERT(Looper.MessageQueue()->IsEmpty());
int32 count;
do
{
count = port_buffer_size_etc(_get_looper_port_(&Looper), B_TIMEOUT, 0);
} while (count == B_INTERRUPTED);
CPPUNIT_ASSERT(count < 0);
cout << endl << "port_buffer_size_etc: " << strerror(count) << endl;
#endif
CPPUNIT_ASSERT(Looper.IsMessageWaiting());
#endif #endif
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@@ -58,7 +77,7 @@ void TIsMessageWaitingTest::IsMessageWaiting4()
BLooper Looper; BLooper Looper;
Looper.Lock(); Looper.Lock();
Looper.PostMessage('1234'); Looper.PostMessage('1234');
assert(Looper.IsMessageWaiting()); CPPUNIT_ASSERT(Looper.IsMessageWaiting());
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
//case 5: looper is locked, message is posted, queue is empty //case 5: looper is locked, message is posted, queue is empty
@@ -70,8 +89,21 @@ void TIsMessageWaitingTest::IsMessageWaiting5()
// Prevent a port read // Prevent a port read
Looper->Lock(); Looper->Lock();
Looper->PostMessage('1234'); Looper->PostMessage('1234');
assert(Looper->MessageQueue()->IsEmpty()); CPPUNIT_ASSERT(Looper->MessageQueue()->IsEmpty());
assert(Looper->IsMessageWaiting()); CPPUNIT_ASSERT(Looper->IsMessageWaiting());
int32 count;
do
{
count = port_buffer_size_etc(_get_looper_port_(Looper), B_TIMEOUT, 0);
} while (count == B_INTERRUPTED);
cout << endl << "port_buffer_size_etc: ";
if (count < 0)
cout << strerror(count);
else
cout << count;
cout << endl;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Test* TIsMessageWaitingTest::Suite() Test* TIsMessageWaitingTest::Suite()
@@ -19,6 +19,67 @@
// Globals --------------------------------------------------------------------- // Globals ---------------------------------------------------------------------
//------------------------------------------------------------------------------
/**
RemoveHandler(BHandler* handler)
@case handler is NULL
@param handler NULL
@results RemoveHandler() returns false. R5 implementation seg faults;
we've fixed that.
*/
void TRemoveHandlerTest::RemoveHandler1()
{
BLooper Looper;
#ifndef TEST_R5
CPPUNIT_ASSERT(!Looper.RemoveHandler(NULL));
#endif
}
//------------------------------------------------------------------------------
/**
RemoveHandler(BHandler* handler)
@case handler doesn't belong to this looper
@param handler Valid BHandler pointer, not assigned to looper
@results
*/
void TRemoveHandlerTest::RemoveHandler2()
{
BLooper Looper;
BHandler Handler;
CPPUNIT_ASSERT(!Looper.RemoveHandler(&Handler));
}
//------------------------------------------------------------------------------
/**
RemoveHandler(BHandler* handler)
@case handler is valid, looper is unlocked
@param handler Valid BHandler pointer, assigned to looper
@results goes to debugger, but removes handler anyway
*/
void TRemoveHandlerTest::RemoveHandler3()
{
DEBUGGER_ESCAPE;
BLooper Looper;
BHandler Handler;
Looper.AddHandler(&Handler);
Looper.Unlock();
CPPUNIT_ASSERT(Looper.RemoveHandler(&Handler));
}
//------------------------------------------------------------------------------
/**
RemoveHandler(BHandler* handler)
@case handler doesn't belong to this looper, looper is unlocked
@param handler Valid BHandler pointer, not assigned to looper
@results
*/
void TRemoveHandlerTest::RemoveHandler4()
{
DEBUGGER_ESCAPE;
BLooper Looper;
BHandler Handler;
Looper.Unlock();
CPPUNIT_ASSERT(!Looper.RemoveHandler(&Handler));
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
RemoveHandler(BHandler* handler) RemoveHandler(BHandler* handler)
@@ -27,7 +88,7 @@
@results RemoveHandler() returns true @results RemoveHandler() returns true
handler->FilterList() returns NULL after removal handler->FilterList() returns NULL after removal
*/ */
void TRemoveHandlerTest::RemoveHandler1() void TRemoveHandlerTest::RemoveHandler5()
{ {
BLooper Looper; BLooper Looper;
BHandler Handler; BHandler Handler;
@@ -35,8 +96,8 @@ void TRemoveHandlerTest::RemoveHandler1()
Handler.AddFilter(MessageFilter); Handler.AddFilter(MessageFilter);
Looper.AddHandler(&Handler); Looper.AddHandler(&Handler);
Looper.RemoveHandler(&Handler); CPPUNIT_ASSERT(Looper.RemoveHandler(&Handler));
assert(Handler.FilterList()); CPPUNIT_ASSERT(Handler.FilterList());
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Test* TRemoveHandlerTest::Suite() Test* TRemoveHandlerTest::Suite()
@@ -44,6 +105,10 @@ Test* TRemoveHandlerTest::Suite()
TestSuite* suite = new TestSuite("BLooper::RemoveHandler(BHandler* handler)"); TestSuite* suite = new TestSuite("BLooper::RemoveHandler(BHandler* handler)");
ADD_TEST(suite, TRemoveHandlerTest, RemoveHandler1); ADD_TEST(suite, TRemoveHandlerTest, RemoveHandler1);
ADD_TEST(suite, TRemoveHandlerTest, RemoveHandler2);
ADD_TEST(suite, TRemoveHandlerTest, RemoveHandler3);
ADD_TEST(suite, TRemoveHandlerTest, RemoveHandler4);
ADD_TEST(suite, TRemoveHandlerTest, RemoveHandler5);
return suite; return suite;
} }
@@ -26,6 +26,10 @@ class TRemoveHandlerTest : public TestCase
TRemoveHandlerTest(std::string name) : TestCase(name) {;} TRemoveHandlerTest(std::string name) : TestCase(name) {;}
void RemoveHandler1(); void RemoveHandler1();
void RemoveHandler2();
void RemoveHandler3();
void RemoveHandler4();
void RemoveHandler5();
static Test* Suite(); static Test* Suite();
}; };
+6
View File
@@ -39,6 +39,12 @@
cout << endl << "status_t == \"" << strerror((status__)) << "\" (" \ cout << endl << "status_t == \"" << strerror((status__)) << "\" (" \
<< (status__) << ") in " << __PRETTY_FUNCTION__ << endl << (status__) << ") in " << __PRETTY_FUNCTION__ << endl
#ifdef USE_DEBUGGER_TESTS
#define DEBUGGER_ESCAPE
#else
#define DEBUGGER_ESCAPE return
#endif
// Globals --------------------------------------------------------------------- // Globals ---------------------------------------------------------------------
using namespace CppUnit; using namespace CppUnit;