/* $Id: MessageQueueTestCase.h,v 1.2 2002/07/22 09:28:00 tylerdauwalder Exp $ This file defines a set of classes for testing BMessageQueue functionality. */ #ifndef MessageQueueTestCase_H #define MessageQueueTestCase_H #include #include #include #include #include "ThreadedTestCase.h" // // The SafetyLock class is a utility class for use in actual tests // of the BMessageQueue interfaces. It is used to make sure that if the // test fails and an exception is thrown with the lock held on the message // queue, that lock will be released. Without this SafetyLock, there // could be deadlocks if one thread in a test has a failure while holding // the lock. It should be used like so: // // void myTestClass::myTestFunc(void) // { // SafetyLock mySafetyLock(theMessageQueue); // ...perform tests without worrying about holding the lock on assert... // class SafetyLock { private: BMessageQueue *theMessageQueue; public: SafetyLock(BMessageQueue *aMessageQueue) {theMessageQueue = aMessageQueue;} virtual ~SafetyLock() {if (theMessageQueue != NULL) theMessageQueue->Unlock(); }; }; // // The testMessageClass is used to count the number of messages that are // deleted. This is used to check that all messages on the message queue // were properly free'ed. // class testMessageClass : public BMessage { public: static int messageDestructorCount; virtual ~testMessageClass() { messageDestructorCount++; }; testMessageClass(int what) : BMessage(what) { }; }; class MessageQueueTestCase : public BThreadedTestCase { private: BList messageList; protected: BMessageQueue *theMessageQueue; void AddMessage(BMessage *message); void RemoveMessage(BMessage *message); BMessage *NextMessage(void); BMessage *FindMessage(uint32 what, int index); void CheckQueueAgainstList(void); public: MessageQueueTestCase(std::string); virtual ~MessageQueueTestCase(); }; #endif