1/*
2	$Id: MessageQueueTestCase.cpp 383 2002-07-22 09:28:00Z tylerdauwalder $
3
4	This file implements a base class for testing BMessageQueue functionality.
5
6	*/
7
8
9#include "MessageQueueTestCase.h"
10#include <MessageQueue.h>
11#include "MessageQueue.h"
12
13
14int testMessageClass::messageDestructorCount = 0;
15
16
17
18	MessageQueueTestCase::MessageQueueTestCase(
19		std::string name) : BThreadedTestCase(name),
20							theMessageQueue(new BMessageQueue())
21{
22	}
23
24
25
26	MessageQueueTestCase::~MessageQueueTestCase()
27{
28	delete theMessageQueue;
29	theMessageQueue = NULL;
30	}
31
32
33
34	void MessageQueueTestCase::CheckQueueAgainstList(void)
35{
36	SafetyLock theSafetyLock(theMessageQueue);
37
38	if (theMessageQueue->Lock()) {
39		CPPUNIT_ASSERT(theMessageQueue->CountMessages() == messageList.CountItems());
40		int i;
41		for (i = 0; i < theMessageQueue->CountMessages(); i++) {
42			CPPUNIT_ASSERT(theMessageQueue->FindMessage((int32)i) ==
43					messageList.ItemAt(i));
44		}
45		theMessageQueue->Unlock();
46	}
47}
48
49
50
51	void MessageQueueTestCase::AddMessage(BMessage *message)
52{
53	if (theMessageQueue->Lock()) {
54		theMessageQueue->AddMessage(message);
55		messageList.AddItem(message);
56		theMessageQueue->Unlock();
57	}
58}
59
60
61	void MessageQueueTestCase::RemoveMessage(BMessage *message)
62{
63	if (theMessageQueue->Lock()) {
64		theMessageQueue->RemoveMessage(message);
65		messageList.RemoveItem((void *)message);
66		theMessageQueue->Unlock();
67	}
68}
69
70
71	BMessage *MessageQueueTestCase::NextMessage(void)
72{
73	SafetyLock theSafetyLock(theMessageQueue);
74
75	BMessage *result = NULL;
76	if (theMessageQueue->Lock()) {
77		result = theMessageQueue->NextMessage();
78		CPPUNIT_ASSERT(result == messageList.RemoveItem((int32)0));
79		theMessageQueue->Unlock();
80	}
81	return(result);
82}
83
84
85
86	BMessage *MessageQueueTestCase::FindMessage(uint32 what, int index)
87{
88	int listCount = messageList.CountItems();
89	int i;
90
91	for (i = 0; i < listCount; i++) {
92		BMessage *theMessage = (BMessage *)messageList.ItemAt(i);
93		if (theMessage->what == what) {
94			if (index == 0) {
95				return(theMessage);
96			}
97			index--;
98		}
99	}
100
101	return(NULL);
102}
103
104
105
106