MessageQueueTestCase.cpp revision 571d840a
152a38012Sejakowatz/*
2571d840aSOliver Tappe	$Id: MessageQueueTestCase.cpp 383 2002-07-22 09:28:00Z tylerdauwalder $
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
17be2939caSTyler Dauwalder
18be2939caSTyler Dauwalder	MessageQueueTestCase::MessageQueueTestCase(
19be2939caSTyler Dauwalder		std::string name) : BThreadedTestCase(name),
20be2939caSTyler Dauwalder							theMessageQueue(new BMessageQueue())
2152a38012Sejakowatz{
2252a38012Sejakowatz	}
2352a38012Sejakowatz
2452a38012Sejakowatz
25be2939caSTyler Dauwalder
26be2939caSTyler Dauwalder	MessageQueueTestCase::~MessageQueueTestCase()
2752a38012Sejakowatz{
2852a38012Sejakowatz	delete theMessageQueue;
2952a38012Sejakowatz	theMessageQueue = NULL;
3052a38012Sejakowatz	}
3152a38012Sejakowatz
3252a38012Sejakowatz
33be2939caSTyler Dauwalder
34be2939caSTyler Dauwalder	void MessageQueueTestCase::CheckQueueAgainstList(void)
3552a38012Sejakowatz{
36be2939caSTyler Dauwalder	SafetyLock theSafetyLock(theMessageQueue);
3752a38012Sejakowatz
3852a38012Sejakowatz	if (theMessageQueue->Lock()) {
39be2939caSTyler Dauwalder		CPPUNIT_ASSERT(theMessageQueue->CountMessages() == messageList.CountItems());
4052a38012Sejakowatz		int i;
4152a38012Sejakowatz		for (i = 0; i < theMessageQueue->CountMessages(); i++) {
42be2939caSTyler Dauwalder			CPPUNIT_ASSERT(theMessageQueue->FindMessage((int32)i) ==
4352a38012Sejakowatz					messageList.ItemAt(i));
4452a38012Sejakowatz		}
4552a38012Sejakowatz		theMessageQueue->Unlock();
4652a38012Sejakowatz	}
4752a38012Sejakowatz}
4852a38012Sejakowatz
4952a38012Sejakowatz
50be2939caSTyler Dauwalder
51be2939caSTyler Dauwalder	void MessageQueueTestCase::AddMessage(BMessage *message)
5252a38012Sejakowatz{
5352a38012Sejakowatz	if (theMessageQueue->Lock()) {
5452a38012Sejakowatz		theMessageQueue->AddMessage(message);
5552a38012Sejakowatz		messageList.AddItem(message);
5652a38012Sejakowatz		theMessageQueue->Unlock();
5752a38012Sejakowatz	}
5852a38012Sejakowatz}
5952a38012Sejakowatz
60be2939caSTyler Dauwalder
61be2939caSTyler Dauwalder	void MessageQueueTestCase::RemoveMessage(BMessage *message)
6252a38012Sejakowatz{
6352a38012Sejakowatz	if (theMessageQueue->Lock()) {
6452a38012Sejakowatz		theMessageQueue->RemoveMessage(message);
6552a38012Sejakowatz		messageList.RemoveItem((void *)message);
6652a38012Sejakowatz		theMessageQueue->Unlock();
6752a38012Sejakowatz	}
6852a38012Sejakowatz}
6952a38012Sejakowatz
70be2939caSTyler Dauwalder
71be2939caSTyler Dauwalder	BMessage *MessageQueueTestCase::NextMessage(void)
7252a38012Sejakowatz{
73be2939caSTyler Dauwalder	SafetyLock theSafetyLock(theMessageQueue);
7452a38012Sejakowatz
7552a38012Sejakowatz	BMessage *result = NULL;
7652a38012Sejakowatz	if (theMessageQueue->Lock()) {
7752a38012Sejakowatz		result = theMessageQueue->NextMessage();
78be2939caSTyler Dauwalder		CPPUNIT_ASSERT(result == messageList.RemoveItem((int32)0));
7952a38012Sejakowatz		theMessageQueue->Unlock();
8052a38012Sejakowatz	}
8152a38012Sejakowatz	return(result);
8252a38012Sejakowatz}
8352a38012Sejakowatz
8452a38012Sejakowatz
85be2939caSTyler Dauwalder
86be2939caSTyler Dauwalder	BMessage *MessageQueueTestCase::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
105be2939caSTyler Dauwalder
106