haiku/src/tests/kits/app/bmessagequeue/MessageQueueTestCase.h
Tyler Dauwalder be2939cab7 Moved the rest of the App Kit tests over to the new framework.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@383 a95241bf-73f2-0310-859d-f6bbb57e9c96
2002-07-22 09:28:00 +00:00

84 lines
1.9 KiB
C++

/*
$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 <List.h>
#include <Locker.h>
#include <Message.h>
#include <MessageQueue.h>
#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