1//------------------------------------------------------------------------------
2//	SetNextHandlerTest.cpp
3//
4//------------------------------------------------------------------------------
5
6// Standard Includes -----------------------------------------------------------
7
8// System Includes -------------------------------------------------------------
9#include <Looper.h>
10
11// Project Includes ------------------------------------------------------------
12
13// Local Includes --------------------------------------------------------------
14#include "SetNextHandlerTest.h"
15
16// Local Defines ---------------------------------------------------------------
17
18// Globals ---------------------------------------------------------------------
19
20//------------------------------------------------------------------------------
21/**
22	SetNextHandler(BHandler* handler);
23	NextHandler();
24	@case			Clear the next handler
25	@param	handler	Valid BHandler pointer, then NULL
26	@results		NextHandler() returns Handler2, then NULL
27 */
28void TSetNextHandlerTest::SetNextHandler0()
29{
30	BLooper Looper;
31	BHandler Handler1;
32	BHandler Handler2;
33
34	Looper.AddHandler(&Handler1);
35	Looper.AddHandler(&Handler2);
36
37	Handler1.SetNextHandler(&Handler2);
38	CPPUNIT_ASSERT(Handler1.NextHandler() == &Handler2);
39
40	Handler1.SetNextHandler(NULL);
41	CPPUNIT_ASSERT(!Handler1.NextHandler());
42}
43//------------------------------------------------------------------------------
44/**
45	SetNextHandler(BHandler* handler);
46	NextHandler();
47	@case			Handler1 and Handler2 do not belong to a BLooper
48	@param	handler	Valid BHandler pointer
49	@results		NextHandler() returns NULL
50					debug message "handler must belong to looper before setting
51					NextHandler"
52 */
53void TSetNextHandlerTest::SetNextHandler1()
54{
55	DEBUGGER_ESCAPE;
56
57	BHandler Handler1;
58	BHandler Handler2;
59	Handler1.SetNextHandler(&Handler2);
60	CPPUNIT_ASSERT(Handler1.NextHandler() == NULL);
61}
62//------------------------------------------------------------------------------
63/**
64	SetNextHandler(BHandler* handler);
65	NextHandler();
66	@case			Handler1 belongs to a unlocked BLooper, Handler2 does not
67	@param	handler	Valid BHandler pointer
68	@results		NextHandler() returns BLooper
69					debug message "The handler's looper must be locked before
70					setting NextHandler"
71 */
72void TSetNextHandlerTest::SetNextHandler2()
73{
74	DEBUGGER_ESCAPE;
75
76	BHandler Handler1;
77	BHandler Handler2;
78	BLooper Looper;
79	Looper.AddHandler(&Handler1);
80	Looper.Unlock();
81	Handler1.SetNextHandler(&Handler2);
82	CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper);
83}
84//------------------------------------------------------------------------------
85/**
86	SetNextHandler(BHandler* handler);
87	NextHandler();
88	@case			Handler1 belongs to a locked BLooper, Handler2 does not
89	@param	handler	Valid BHandler pointer
90	@results		NextHandler() returns BLooper
91					debug message "The handler and its NextHandler must have
92					the same looper"
93 */
94void TSetNextHandlerTest::SetNextHandler3()
95{
96	DEBUGGER_ESCAPE;
97
98	BHandler Handler1;
99	BHandler Handler2;
100	BLooper Looper;
101	Looper.AddHandler(&Handler1);
102	Handler1.SetNextHandler(&Handler2);
103	CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper);
104}
105//------------------------------------------------------------------------------
106/**
107	SetNextHandler(BHandler* handler);
108	NextHandler();
109	@case			Handler2 belongs to a unlocked BLooper, Handler1 does not
110	@param	handler	Valid BHandler pointer
111	@results		NextHandler() returns NULL
112					debug message "handler must belong to looper before setting
113					NextHandler"
114 */
115void TSetNextHandlerTest::SetNextHandler4()
116{
117	DEBUGGER_ESCAPE;
118
119	BHandler Handler1;
120	BHandler Handler2;
121	BLooper Looper;
122	Looper.AddHandler(&Handler2);
123	Looper.Unlock();
124	Handler1.SetNextHandler(&Handler2);
125	CPPUNIT_ASSERT(Handler1.NextHandler() == NULL);
126}
127//------------------------------------------------------------------------------
128/**
129	SetNextHandler(BHandler* handler);
130	NextHandler();
131	@case			Handler2 belongs to a locked BLooper, Handler1 does not
132	@param	handler	Valid BHandler pointer
133	@results		NextHandler() returns NULL
134					debug message "handler must belong to looper before setting
135					NextHandler"
136 */
137void TSetNextHandlerTest::SetNextHandler5()
138{
139	DEBUGGER_ESCAPE;
140
141	BHandler Handler1;
142	BHandler Handler2;
143	BLooper Looper;
144	Looper.AddHandler(&Handler2);
145	Handler1.SetNextHandler(&Handler2);
146	CPPUNIT_ASSERT(Handler1.NextHandler() == NULL);
147}
148//------------------------------------------------------------------------------
149/**
150	SetNextHandler(BHandler* handler);
151	NextHandler();
152	@case			Handler1 and Handler2 belong to different unlocked BLoopers
153	@param	handler	Valid BHandler pointer
154	@results		Returns BLooper;
155					debug message "The handler and its NextHandler must have the
156					same looper"
157 */
158void TSetNextHandlerTest::SetNextHandler6()
159{
160	DEBUGGER_ESCAPE;
161
162	BHandler Handler1;
163	BHandler Handler2;
164	BLooper Looper1;
165	BLooper Looper2;
166	Looper1.AddHandler(&Handler1);
167	Looper2.AddHandler(&Handler2);
168	Looper1.Unlock();
169	Looper2.Unlock();
170	Handler1.SetNextHandler(&Handler2);
171	CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper1);
172}
173//------------------------------------------------------------------------------
174/**
175	SetNextHandler(BHandler* handler);
176	NextHandler();
177	@case			Handler1 and Handler2 belong to different BLoopers;
178					Handler1's is locked; Handler2's is not
179	@param	handler	Valid BHandler pointer
180	@result			Returns BLooper;
181					debug message "The handler and its NextHandler must have the
182					same looper"
183 */
184void TSetNextHandlerTest::SetNextHandler7()
185{
186	DEBUGGER_ESCAPE;
187
188	BHandler Handler1;
189	BHandler Handler2;
190	BLooper Looper1;
191	BLooper Looper2;
192	Looper1.AddHandler(&Handler1);
193	Looper2.AddHandler(&Handler2);
194	Looper2.Unlock();
195	Handler1.SetNextHandler(&Handler2);
196	CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper1);
197}
198//------------------------------------------------------------------------------
199/**
200	SetNextHandler(BHandler* handler);
201	NextHandler();
202	@case			Handler1 and Handler2 belong to different BLoopers;
203					Handler1's is unlocked; Handler2's is locked
204	@param	handler	Valid BHandler pointer
205	@results		Returns BLooper
206					debug message "The handler and its NextHandler must have the
207					same looper"
208 */
209void TSetNextHandlerTest::SetNextHandler8()
210{
211	DEBUGGER_ESCAPE;
212
213	BHandler Handler1;
214	BHandler Handler2;
215	BLooper Looper1;
216	BLooper Looper2;
217	Looper1.AddHandler(&Handler1);
218	Looper2.AddHandler(&Handler2);
219	Looper1.Unlock();
220	Handler1.SetNextHandler(&Handler2);
221	CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper1);
222}
223//------------------------------------------------------------------------------
224/**
225	SetNextHandler(BHandler* handler);
226	NextHandler();
227	@case			Handler1 and Handler2 belong to different locked BLoopers
228	@param	handler	Valid BHandler pointer
229	@results		Returns BLooper
230					debug message "The handler and its NextHandler must have the
231					same looper"
232 */
233void TSetNextHandlerTest::SetNextHandler9()
234{
235	DEBUGGER_ESCAPE;
236
237	BHandler Handler1;
238	BHandler Handler2;
239	BLooper Looper1;
240	BLooper Looper2;
241	Looper1.AddHandler(&Handler1);
242	Looper2.AddHandler(&Handler2);
243	Handler1.SetNextHandler(&Handler2);
244	CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper1);
245}
246//------------------------------------------------------------------------------
247/**
248	SetNextHandler(BHandler* handler);
249	NextHandler();
250	@case			Handler1 and Handler2 belong to the same unlocked BLooper
251	@param	handler	Valid BHandler pointer
252	@results		Returns Handler2
253					debug message "The handler's looper must be locked before
254					setting NextHandler"
255	@note			R5 implementation allows the next handler to be set anyway;
256					we do the same.
257 */
258void TSetNextHandlerTest::SetNextHandler10()
259{
260	DEBUGGER_ESCAPE;
261
262	BLooper Looper;
263	BHandler Handler1;
264	BHandler Handler2;
265	Looper.AddHandler(&Handler1);
266	Looper.AddHandler(&Handler2);
267	Looper.Unlock();
268	Handler1.SetNextHandler(&Handler2);
269	CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper);
270}
271//------------------------------------------------------------------------------
272/**
273	SetNextHandler(BHandler* handler);
274	NextHandler();
275	@case			Handler1 and Handler2 belong to the same locked BLooper
276	@param	handler	Valid BHandler pointer
277	@results		Returns Handler2
278 */
279void TSetNextHandlerTest::SetNextHandler11()
280{
281	BLooper Looper;
282	BHandler Handler1;
283	BHandler Handler2;
284	Looper.AddHandler(&Handler1);
285	Looper.AddHandler(&Handler2);
286	Handler1.SetNextHandler(&Handler2);
287	CPPUNIT_ASSERT(Handler1.NextHandler() == &Handler2);
288}
289//------------------------------------------------------------------------------
290Test* TSetNextHandlerTest::Suite()
291{
292	TestSuite* SuiteOfTests = new TestSuite("BHandler::SetNextHandler");
293
294	ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler0);
295	ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler1);
296	ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler2);
297	ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler3);
298	ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler4);
299	ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler5);
300	ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler6);
301	ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler7);
302	ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler8);
303	ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler9);
304	ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler10);
305	ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler11);
306
307	return SuiteOfTests;
308}
309//------------------------------------------------------------------------------
310
311/*
312 * $Log $
313 *
314 * $Id  $
315 *
316 */
317
318
319