1//------------------------------------------------------------------------------
2//	TargetTester.cpp
3//
4//------------------------------------------------------------------------------
5
6// Standard Includes -----------------------------------------------------------
7#include <stdio.h>
8
9// System Includes -------------------------------------------------------------
10#include <Message.h>
11#include <OS.h>
12#include <Handler.h>
13#include <Looper.h>
14#include <Messenger.h>
15
16#define CHK	CPPUNIT_ASSERT
17
18// Project Includes ------------------------------------------------------------
19
20// Local Includes --------------------------------------------------------------
21#include "Helpers.h"
22#include "SMTarget.h"
23#include "TargetTester.h"
24
25// Local Defines ---------------------------------------------------------------
26
27// Globals ---------------------------------------------------------------------
28
29//------------------------------------------------------------------------------
30
31/*
32	bool IsTargetLocal() const
33	@case 1			this is uninitialized
34	@results		should return false.
35 */
36void TargetTester::IsTargetLocalTest1()
37{
38	BMessenger messenger;
39	CHK(messenger.IsTargetLocal() == false);
40}
41
42/*
43	bool IsTargetLocal() const
44	@case 2			this is initialized to local target with preferred handler
45	@results		should return true.
46 */
47void TargetTester::IsTargetLocalTest2()
48{
49	status_t result = B_OK;
50	BLooper *looper = new BLooper;
51	looper->Run();
52	LooperQuitter quitter(looper);
53	BMessenger messenger(NULL, looper, &result);
54	CHK(messenger.IsTargetLocal() == true);
55}
56
57/*
58	bool IsTargetLocal() const
59	@case 3			this is initialized to local target with specific handler
60	@results		should return true.
61 */
62void TargetTester::IsTargetLocalTest3()
63{
64	// create looper and handler
65	status_t result = B_OK;
66	BLooper *looper = new BLooper;
67	looper->Run();
68	LooperQuitter quitter(looper);
69	BHandler *handler = new BHandler;
70	HandlerDeleter deleter(handler);
71	CHK(looper->Lock());
72	looper->AddHandler(handler);
73	looper->Unlock();
74	// create the messenger and do the checks
75	BMessenger messenger(handler, NULL, &result);
76	CHK(messenger.IsTargetLocal() == true);
77}
78
79/*
80	bool IsTargetLocal() const
81	@case 4			this is initialized to remote target with preferred handler
82	@results		should return false.
83 */
84void TargetTester::IsTargetLocalTest4()
85{
86	RemoteSMTarget target(true);
87	BMessenger messenger(target.Messenger());
88	CHK(messenger.IsTargetLocal() == false);
89}
90
91/*
92	bool IsTargetLocal() const
93	@case 5			this is initialized to remote target with specific handler
94	@results		should return false.
95 */
96void TargetTester::IsTargetLocalTest5()
97{
98	RemoteSMTarget target(false);
99	BMessenger messenger(target.Messenger());
100	CHK(messenger.IsTargetLocal() == false);
101}
102
103/*
104	BHandler *Target(BLooper **looper) const
105	@case 1			this is uninitialized, looper is NULL
106	@results		should return NULL.
107 */
108void TargetTester::TargetTest1()
109{
110	BMessenger messenger;
111	CHK(messenger.Target(NULL) == NULL);
112}
113
114/*
115	BHandler *Target(BLooper **looper) const
116	@case 2			this is initialized to local target with preferred handler,
117					looper is NULL
118	@results		should return NULL.
119 */
120void TargetTester::TargetTest2()
121{
122	status_t result = B_OK;
123	BLooper *looper = new BLooper;
124	looper->Run();
125	LooperQuitter quitter(looper);
126	BMessenger messenger(NULL, looper, &result);
127	CHK(messenger.Target(NULL) == NULL);
128}
129
130/*
131	BHandler *Target(BLooper **looper) const
132	@case 3			this is initialized to local target with specific handler,
133					looper is NULL
134	@results		should return correct handler.
135 */
136void TargetTester::TargetTest3()
137{
138	// create looper and handler
139	status_t result = B_OK;
140	BLooper *looper = new BLooper;
141	looper->Run();
142	LooperQuitter quitter(looper);
143	BHandler *handler = new BHandler;
144	HandlerDeleter deleter(handler);
145	CHK(looper->Lock());
146	looper->AddHandler(handler);
147	looper->Unlock();
148	// create the messenger and do the checks
149	BMessenger messenger(handler, NULL, &result);
150	CHK(messenger.Target(NULL) == handler);
151}
152
153/*
154	BHandler *Target(BLooper **looper) const
155	@case 4			this is initialized to remote target with preferred
156					handler, looper is NULL
157	@results		should return NULL.
158 */
159void TargetTester::TargetTest4()
160{
161	RemoteSMTarget target(true);
162	BMessenger messenger(target.Messenger());
163	CHK(messenger.Target(NULL) == NULL);
164}
165
166/*
167	BHandler *Target(BLooper **looper) const
168	@case 5			this is initialized to remote target with specific handler,
169					looper is NULL
170	@results		should return NULL.
171 */
172void TargetTester::TargetTest5()
173{
174	RemoteSMTarget target(false);
175	BMessenger messenger(target.Messenger());
176	CHK(messenger.Target(NULL) == NULL);
177}
178
179
180Test* TargetTester::Suite()
181{
182	TestSuite* SuiteOfTests = new TestSuite;
183
184	ADD_TEST4(BMessenger, SuiteOfTests, TargetTester, IsTargetLocalTest1);
185	ADD_TEST4(BMessenger, SuiteOfTests, TargetTester, IsTargetLocalTest2);
186	ADD_TEST4(BMessenger, SuiteOfTests, TargetTester, IsTargetLocalTest3);
187	ADD_TEST4(BMessenger, SuiteOfTests, TargetTester, IsTargetLocalTest4);
188	ADD_TEST4(BMessenger, SuiteOfTests, TargetTester, IsTargetLocalTest5);
189
190	ADD_TEST4(BMessenger, SuiteOfTests, TargetTester, TargetTest1);
191	ADD_TEST4(BMessenger, SuiteOfTests, TargetTester, TargetTest2);
192	ADD_TEST4(BMessenger, SuiteOfTests, TargetTester, TargetTest3);
193	ADD_TEST4(BMessenger, SuiteOfTests, TargetTester, TargetTest4);
194	ADD_TEST4(BMessenger, SuiteOfTests, TargetTester, TargetTest5);
195
196	return SuiteOfTests;
197}
198
199
200