/* $Id: MessageQueueTestCase.cpp 383 2002-07-22 09:28:00Z tylerdauwalder $ This file implements a base class for testing BMessageQueue functionality. */ #include "MessageQueueTestCase.h" #include #include "MessageQueue.h" int testMessageClass::messageDestructorCount = 0; MessageQueueTestCase::MessageQueueTestCase( std::string name) : BThreadedTestCase(name), theMessageQueue(new BMessageQueue()) { } MessageQueueTestCase::~MessageQueueTestCase() { delete theMessageQueue; theMessageQueue = NULL; } void MessageQueueTestCase::CheckQueueAgainstList(void) { SafetyLock theSafetyLock(theMessageQueue); if (theMessageQueue->Lock()) { CPPUNIT_ASSERT(theMessageQueue->CountMessages() == messageList.CountItems()); int i; for (i = 0; i < theMessageQueue->CountMessages(); i++) { CPPUNIT_ASSERT(theMessageQueue->FindMessage((int32)i) == messageList.ItemAt(i)); } theMessageQueue->Unlock(); } } void MessageQueueTestCase::AddMessage(BMessage *message) { if (theMessageQueue->Lock()) { theMessageQueue->AddMessage(message); messageList.AddItem(message); theMessageQueue->Unlock(); } } void MessageQueueTestCase::RemoveMessage(BMessage *message) { if (theMessageQueue->Lock()) { theMessageQueue->RemoveMessage(message); messageList.RemoveItem((void *)message); theMessageQueue->Unlock(); } } BMessage *MessageQueueTestCase::NextMessage(void) { SafetyLock theSafetyLock(theMessageQueue); BMessage *result = NULL; if (theMessageQueue->Lock()) { result = theMessageQueue->NextMessage(); CPPUNIT_ASSERT(result == messageList.RemoveItem((int32)0)); theMessageQueue->Unlock(); } return(result); } BMessage *MessageQueueTestCase::FindMessage(uint32 what, int index) { int listCount = messageList.CountItems(); int i; for (i = 0; i < listCount; i++) { BMessage *theMessage = (BMessage *)messageList.ItemAt(i); if (theMessage->what == what) { if (index == 0) { return(theMessage); } index--; } } return(NULL); }