1//------------------------------------------------------------------------------
2//	BHandlerTester.cpp
3//
4//------------------------------------------------------------------------------
5
6// Standard Includes -----------------------------------------------------------
7
8// System Includes -------------------------------------------------------------
9#include <Message.h>
10#include <OS.h>
11#include <Handler.h>
12#include <Looper.h>
13#include <MessageFilter.h>
14
15// Project Includes ------------------------------------------------------------
16
17// Local Includes --------------------------------------------------------------
18#include "BHandlerTester.h"
19#include "LockLooperTestCommon.h"
20// Local Defines ---------------------------------------------------------------
21
22// Globals ---------------------------------------------------------------------
23
24//------------------------------------------------------------------------------
25/**
26	BHandler(const char* name)
27	@case			Construct with NULL name
28	@param	name	NULL
29	@results		BHandler::Name() should return NULL
30 */
31void TBHandlerTester::BHandler1()
32{
33	BHandler Handler((const char*)NULL);
34	CPPUNIT_ASSERT(Handler.Name() == NULL);
35}
36//------------------------------------------------------------------------------
37/**
38	BHandler(const char* name)
39	@case			Construct with valid name
40	@param	name	valid string
41	@results		BHandler::Name() returns name
42 */
43void TBHandlerTester::BHandler2()
44{
45	BHandler Handler("name");
46	CPPUNIT_ASSERT(string("name") == Handler.Name());
47}
48//------------------------------------------------------------------------------
49/**
50	BHandler(BMessage* archive)
51	@case			archive is valid and has field "_name"
52	@param	archive	valid BMessage pointer
53	@results		BHandler::Name() returns _name
54 */
55void TBHandlerTester::BHandler3()
56{
57	BMessage Archive;
58	Archive.AddString("_name", "the name");
59	BHandler Handler(&Archive);
60	CPPUNIT_ASSERT(string("the name") == Handler.Name());
61}
62//------------------------------------------------------------------------------
63/**
64	BHandler(BMessage* archive)
65	@case			archive is valid, but has no field "_name"
66	@param	archive	valid BMessage pointer
67	@results		BHandler::Name() returns NULL
68 */
69void TBHandlerTester::BHandler4()
70{
71	BMessage Archive;
72	BHandler Handler(&Archive);
73	CPPUNIT_ASSERT(Handler.Name() == NULL);
74}
75//------------------------------------------------------------------------------
76/**
77	BHandler(BMessage* archive)
78	@case			archive is NULL
79	@param	archive	NULL
80	@results		BHandler::Name() returns NULL
81	@note			This test is not enabled against the original implementation
82					as it doesn't check for a NULL parameter and seg faults.
83 */
84
85void TBHandlerTester::BHandler5()
86{
87#if !defined(TEST_R5)
88	BHandler Handler((BMessage*)NULL);
89	CPPUNIT_ASSERT(Handler.Name() == NULL);
90#endif
91}
92//------------------------------------------------------------------------------
93/**
94	Archive(BMessage* data, bool deep = true)
95	@case			data is NULL, deep is false
96	@param	data	NULL
97	@param	deep	false
98	@results		Returns B_BAD_VALUE
99	@note			This test is not enabled against the original implementation
100					as it doesn't check for NULL parameters and seg faults
101 */
102void TBHandlerTester::Archive1()
103{
104#if !defined(TEST_R5)
105	BHandler Handler;
106	CPPUNIT_ASSERT(Handler.Archive(NULL, false) == B_BAD_VALUE);
107#endif
108}
109//------------------------------------------------------------------------------
110/**
111	Archive(BMessage* data, bool deep = true)
112	@case			data is NULL, deep is true
113	@param	data	NULL
114	@param	deep	false
115	@results		Returns B_BAD_VALUE
116	@note			This test is not enabled against the original implementation
117					as it doesn't check for NULL parameters and seg faults
118 */
119void TBHandlerTester::Archive2()
120{
121#if !defined(TEST_R5)
122	BHandler Handler;
123	CPPUNIT_ASSERT(Handler.Archive(NULL) == B_BAD_VALUE);
124#endif
125}
126//------------------------------------------------------------------------------
127/**
128	Archive(BMessage* data, bool deep = true)
129	@case			data is valid, deep is false
130	@param	data	valid BMessage pointer
131	@param	deep	false
132	@results		Returns B_OK
133					Resultant archive has string field labeled "_name"
134					Field "_name" contains the string "a name"
135					Resultant archive has string field labeled "class"
136					Field "class" contains the string "BHandler"
137 */
138void TBHandlerTester::Archive3()
139{
140	BMessage Archive;
141	BHandler Handler("a name");
142	CPPUNIT_ASSERT(Handler.Archive(&Archive, false) == B_OK);
143
144	const char* data;
145	CPPUNIT_ASSERT(Archive.FindString("_name", &data) == B_OK);
146	CPPUNIT_ASSERT(string("a name") == data);
147	CPPUNIT_ASSERT(Archive.FindString("class", &data) == B_OK);
148	CPPUNIT_ASSERT(string("BHandler") == data);
149}
150//------------------------------------------------------------------------------
151/**
152	Archive(BMessage *data, bool deep = true)
153	@case			data is valid, deep is true
154	@param	data	valid BMessage pointer
155	@param	deep	true
156	@results		Returns B_OK
157					Resultant archive has string field labeled "_name"
158					Field "_name" contains the string "a name"
159					Resultant archive has string field labeled "class"
160					Field "class" contains the string "BHandler"
161 */
162void TBHandlerTester::Archive4()
163{
164	BMessage Archive;
165	BHandler Handler("another name");
166	CPPUNIT_ASSERT(Handler.Archive(&Archive) == B_OK);
167
168	const char* data;
169	CPPUNIT_ASSERT(Archive.FindString("_name", &data) == B_OK);
170	CPPUNIT_ASSERT(string("another name") == data);
171	CPPUNIT_ASSERT(Archive.FindString("class", &data) == B_OK);
172	CPPUNIT_ASSERT(string("BHandler") == data);
173}
174//------------------------------------------------------------------------------
175/**
176	Instantiate(BMessage* data)
177	@case			data is NULL
178	@param	data	NULL
179	@results
180	@note			This test is not enabled against the original implementation
181					as it doesn't check for NULL parameters and seg faults
182 */
183void TBHandlerTester::Instantiate1()
184{
185#if !defined(TEST_R5)
186	CPPUNIT_ASSERT(BHandler::Instantiate(NULL) == NULL);
187	CPPUNIT_ASSERT(errno == B_BAD_VALUE);
188#endif
189}
190//------------------------------------------------------------------------------
191/**
192	Instantiate(BMessage* data)
193	@case			data is valid, has field "_name"
194	@param	data	Valid BMessage pointer with string field "class" containing
195					string "BHandler" and with string field "_name" containing
196					string "a name"
197	@results		BHandler::Name() returns "a name"
198 */
199void TBHandlerTester::Instantiate2()
200{
201	BMessage Archive;
202	Archive.AddString("class", "BHandler");
203	Archive.AddString("_name", "a name");
204
205	BHandler* Handler =
206		dynamic_cast<BHandler*>(BHandler::Instantiate(&Archive));
207	CPPUNIT_ASSERT(Handler != NULL);
208	CPPUNIT_ASSERT(string("a name") == Handler->Name());
209	CPPUNIT_ASSERT(errno == B_OK);
210}
211//------------------------------------------------------------------------------
212/**
213	Instantiate(BMessage *data)
214	@case			data is valid, has no field "_name"
215	@param	data	valid BMessage pointer with string field "class" containing
216					string "BHandler"
217	@results		BHandler::Name() returns NULL
218 */
219
220void TBHandlerTester::Instantiate3()
221{
222	BMessage Archive;
223	Archive.AddString("class", "BHandler");
224
225	BHandler* Handler =
226		dynamic_cast<BHandler*>(BHandler::Instantiate(&Archive));
227	CPPUNIT_ASSERT(Handler != NULL);
228	CPPUNIT_ASSERT(Handler->Name() == NULL);
229	CPPUNIT_ASSERT(errno == B_OK);
230}
231//------------------------------------------------------------------------------
232/**
233	SetName(const char* name)
234	Name()
235	@case			name is NULL
236	@param	name	NULL
237	@results		BHandler::Name() returns NULL
238
239 */
240void TBHandlerTester::SetName1()
241{
242	BHandler Handler("a name");
243	CPPUNIT_ASSERT(string("a name") == Handler.Name());
244
245	Handler.SetName(NULL);
246	CPPUNIT_ASSERT(Handler.Name() == NULL);
247}
248//------------------------------------------------------------------------------
249/**
250	SetName(const char *name)
251	Name()
252	@case			name is valid
253	@param	name	Valid string pointer
254	@results		BHandler::Name returns name
255 */
256void TBHandlerTester::SetName2()
257{
258	BHandler Handler("a name");
259	CPPUNIT_ASSERT(string("a name") == Handler.Name());
260
261	Handler.SetName("another name");
262	CPPUNIT_ASSERT(string("another name") == Handler.Name());
263}
264//------------------------------------------------------------------------------
265/**
266	Perform(perform_code d, void *arg)
267	@case		feed meaningless data, should return B_NAME_NOT_FOUND
268	@param	d	N/A
269	@param	arg	NULL
270	@results	Returns B_NAME_NOT_FOUND
271 */
272void TBHandlerTester::Perform1()
273{
274	BHandler Handler;
275	CPPUNIT_ASSERT(Handler.Perform(0, NULL) == B_NAME_NOT_FOUND);
276}
277//------------------------------------------------------------------------------
278/**
279	FilterList();
280	@case		Default constructed BHandler
281	@results	FilterList() returns NULL
282 */
283void TBHandlerTester::FilterList1()
284{
285	BHandler Handler;
286	CPPUNIT_ASSERT(!Handler.FilterList());
287}
288//------------------------------------------------------------------------------
289Test* TBHandlerTester::Suite()
290{
291	TestSuite* SuiteOfTests = new TestSuite;
292
293	ADD_TEST4(BHandler, SuiteOfTests, TBHandlerTester, BHandler1);
294	ADD_TEST4(BHandler, SuiteOfTests, TBHandlerTester, BHandler2);
295	ADD_TEST4(BHandler, SuiteOfTests, TBHandlerTester, BHandler3);
296	ADD_TEST4(BHandler, SuiteOfTests, TBHandlerTester, BHandler4);
297	ADD_TEST4(BHandler, SuiteOfTests, TBHandlerTester, BHandler5);
298
299	ADD_TEST4(BHandler, SuiteOfTests, TBHandlerTester, Archive1);
300	ADD_TEST4(BHandler, SuiteOfTests, TBHandlerTester, Archive2);
301	ADD_TEST4(BHandler, SuiteOfTests, TBHandlerTester, Archive3);
302	ADD_TEST4(BHandler, SuiteOfTests, TBHandlerTester, Archive4);
303
304	ADD_TEST4(BHandler, SuiteOfTests, TBHandlerTester, Instantiate1);
305	ADD_TEST4(BHandler, SuiteOfTests, TBHandlerTester, Instantiate2);
306	ADD_TEST4(BHandler, SuiteOfTests, TBHandlerTester, Instantiate3);
307
308	ADD_TEST4(BHandler, SuiteOfTests, TBHandlerTester, SetName1);
309	ADD_TEST4(BHandler, SuiteOfTests, TBHandlerTester, SetName2);
310
311	ADD_TEST4(BHandler, SuiteOfTests, TBHandlerTester, Perform1);
312
313	ADD_TEST4(BHandler, SuiteOfTests, TBHandlerTester, FilterList1);
314
315	return SuiteOfTests;
316}
317//------------------------------------------------------------------------------
318
319/*
320 * $Log $
321 *
322 * $Id  $
323 *
324 */
325
326
327
328