MessageQueueTestCase.cpp revision 52a38012
152a38012Sejakowatz/*
252a38012Sejakowatz	$Id: MessageQueueTestCase.cpp,v 1.1 2002/07/09 12:24:56 ejakowatz Exp $
352a38012Sejakowatz
452a38012Sejakowatz	This file implements a base class for testing BMessageQueue functionality.
552a38012Sejakowatz
652a38012Sejakowatz	*/
752a38012Sejakowatz
852a38012Sejakowatz
952a38012Sejakowatz#include "MessageQueueTestCase.h"
1052a38012Sejakowatz#include <MessageQueue.h>
1152a38012Sejakowatz#include "MessageQueue.h"
1252a38012Sejakowatz
1352a38012Sejakowatz
1452a38012Sejakowatzint testMessageClass::messageDestructorCount = 0;
1552a38012Sejakowatz
1652a38012Sejakowatz
1752a38012Sejakowatztemplate<class MessageQueue>
1852a38012Sejakowatz	MessageQueueTestCase<MessageQueue>::MessageQueueTestCase(
1952a38012Sejakowatz		std::string name) : TestCase(name),
2052a38012Sejakowatz							theMessageQueue(new MessageQueue)
2152a38012Sejakowatz{
2252a38012Sejakowatz	}
2352a38012Sejakowatz
2452a38012Sejakowatz
2552a38012Sejakowatztemplate<class MessageQueue>
2652a38012Sejakowatz	MessageQueueTestCase<MessageQueue>::~MessageQueueTestCase()
2752a38012Sejakowatz{
2852a38012Sejakowatz	delete theMessageQueue;
2952a38012Sejakowatz	theMessageQueue = NULL;
3052a38012Sejakowatz	}
3152a38012Sejakowatz
3252a38012Sejakowatz
3352a38012Sejakowatztemplate<class MessageQueue>
3452a38012Sejakowatz	void MessageQueueTestCase<MessageQueue>::CheckQueueAgainstList(void)
3552a38012Sejakowatz{
3652a38012Sejakowatz	SafetyLock<MessageQueue> theSafetyLock(theMessageQueue);
3752a38012Sejakowatz
3852a38012Sejakowatz	if (theMessageQueue->Lock()) {
3952a38012Sejakowatz		assert(theMessageQueue->CountMessages() == messageList.CountItems());
4052a38012Sejakowatz		int i;
4152a38012Sejakowatz		for (i = 0; i < theMessageQueue->CountMessages(); i++) {
4252a38012Sejakowatz			assert(theMessageQueue->FindMessage((int32)i) ==
4352a38012Sejakowatz					messageList.ItemAt(i));
4452a38012Sejakowatz		}
4552a38012Sejakowatz		theMessageQueue->Unlock();
4652a38012Sejakowatz	}
4752a38012Sejakowatz}
4852a38012Sejakowatz
4952a38012Sejakowatz
5052a38012Sejakowatztemplate<class MessageQueue>
5152a38012Sejakowatz	void MessageQueueTestCase<MessageQueue>::AddMessage(BMessage *message)
5252a38012Sejakowatz{
5352a38012Sejakowatz	if (theMessageQueue->Lock()) {
5452a38012Sejakowatz		theMessageQueue->AddMessage(message);
5552a38012Sejakowatz		messageList.AddItem(message);
5652a38012Sejakowatz		theMessageQueue->Unlock();
5752a38012Sejakowatz	}
5852a38012Sejakowatz}
5952a38012Sejakowatz
6052a38012Sejakowatztemplate<class MessageQueue>
6152a38012Sejakowatz	void MessageQueueTestCase<MessageQueue>::RemoveMessage(BMessage *message)
6252a38012Sejakowatz{
6352a38012Sejakowatz	if (theMessageQueue->Lock()) {
6452a38012Sejakowatz		theMessageQueue->RemoveMessage(message);
6552a38012Sejakowatz		messageList.RemoveItem((void *)message);
6652a38012Sejakowatz		theMessageQueue->Unlock();
6752a38012Sejakowatz	}
6852a38012Sejakowatz}
6952a38012Sejakowatz
7052a38012Sejakowatztemplate<class MessageQueue>
7152a38012Sejakowatz	BMessage *MessageQueueTestCase<MessageQueue>::NextMessage(void)
7252a38012Sejakowatz{
7352a38012Sejakowatz	SafetyLock<MessageQueue> theSafetyLock(theMessageQueue);
7452a38012Sejakowatz
7552a38012Sejakowatz	BMessage *result = NULL;
7652a38012Sejakowatz	if (theMessageQueue->Lock()) {
7752a38012Sejakowatz		result = theMessageQueue->NextMessage();
7852a38012Sejakowatz		assert(result == messageList.RemoveItem((int32)0));
7952a38012Sejakowatz		theMessageQueue->Unlock();
8052a38012Sejakowatz	}
8152a38012Sejakowatz	return(result);
8252a38012Sejakowatz}
8352a38012Sejakowatz
8452a38012Sejakowatz
8552a38012Sejakowatztemplate<class MessageQueue>
8652a38012Sejakowatz	BMessage *MessageQueueTestCase<MessageQueue>::FindMessage(uint32 what, int index)
8752a38012Sejakowatz{
8852a38012Sejakowatz	int listCount = messageList.CountItems();
8952a38012Sejakowatz	int i;
9052a38012Sejakowatz
9152a38012Sejakowatz	for (i = 0; i < listCount; i++) {
9252a38012Sejakowatz		BMessage *theMessage = (BMessage *)messageList.ItemAt(i);
9352a38012Sejakowatz		if (theMessage->what == what) {
9452a38012Sejakowatz			if (index == 0) {
9552a38012Sejakowatz				return(theMessage);
9652a38012Sejakowatz			}
9752a38012Sejakowatz			index--;
9852a38012Sejakowatz		}
9952a38012Sejakowatz	}
10052a38012Sejakowatz
10152a38012Sejakowatz	return(NULL);
10252a38012Sejakowatz}
10352a38012Sejakowatz
10452a38012Sejakowatz
10552a38012Sejakowatztemplate class MessageQueueTestCase<BMessageQueue>;
10652a38012Sejakowatztemplate class MessageQueueTestCase<OpenBeOS::BMessageQueue>;