be2939cab7
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@383 a95241bf-73f2-0310-859d-f6bbb57e9c96
84 lines
1.9 KiB
C++
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
|
|
|
|
|
|
|