1// MessageRunnerTestHelpers.h
2
3#ifndef MESSAGE_RUNNER_TEST_HELPERS_H
4#define MESSAGE_RUNNER_TEST_HELPERS_H
5
6#include <Application.h>
7#include <List.h>
8
9enum {
10	MSG_RUNNER_MESSAGE	= 'rmsg',
11	MSG_REPLY			= 'rply',
12};
13
14// MessageRunnerTestHandler
15class MessageRunnerTestHandler : public BHandler {
16public:
17	MessageRunnerTestHandler();
18	~MessageRunnerTestHandler();
19
20	virtual void MessageReceived(BMessage *message);
21
22	int32 CountReplies() const { return fReplyCount; }
23
24private:
25	int32					fReplyCount;
26};
27
28// MessageRunnerTestLooper
29class MessageRunnerTestLooper : public BLooper {
30public:
31	MessageRunnerTestLooper();
32	~MessageRunnerTestLooper();
33
34	virtual void MessageReceived(BMessage *message);
35
36	bool CheckMessages(bigtime_t startTime, bigtime_t interval, int32 count);
37	bool CheckMessages(int32 skip, bigtime_t startTime, bigtime_t interval,
38					   int32 count);
39
40private:
41	struct MessageInfo;
42
43private:
44	MessageInfo *MessageInfoAt(int32 index) const;
45
46private:
47	BList	fMessageInfos;
48};
49
50// MessageRunnerTestApp
51class MessageRunnerTestApp : public BApplication {
52public:
53	MessageRunnerTestApp(const char *signature);
54	~MessageRunnerTestApp();
55
56	virtual void MessageReceived(BMessage *message);
57	virtual bool QuitRequested();
58
59	int32 CountReplies() const { return fReplyCount; }
60
61	MessageRunnerTestLooper *TestLooper() const { return fLooper; }
62	MessageRunnerTestHandler *TestHandler() const { return fHandler; }
63
64private:
65	static int32 _ThreadEntry(void *data);
66
67private:
68	thread_id					fThread;
69	int32						fReplyCount;
70	MessageRunnerTestLooper		*fLooper;
71	MessageRunnerTestHandler	*fHandler;
72};
73
74#endif	// MESSAGE_RUNNER_TEST_HELPERS_H
75