xref: /haiku/src/tests/kits/app/bmessage/MessageItemTest.h (revision be45e9989d16b0f7dd19ee55544c921cc564cdc8)
1*be45e998Sejakowatz //------------------------------------------------------------------------------
2*be45e998Sejakowatz //	MessageItemTest.h
3*be45e998Sejakowatz //
4*be45e998Sejakowatz //------------------------------------------------------------------------------
5*be45e998Sejakowatz 
6*be45e998Sejakowatz #ifndef MESSAGEITEMTEST_H
7*be45e998Sejakowatz #define MESSAGEITEMTEST_H
8*be45e998Sejakowatz 
9*be45e998Sejakowatz // A sad attempt to get rid of the horrible and pathetic vector<bool> specialization
10*be45e998Sejakowatz #define __SGI_STL_INTERNAL_BVECTOR_H
11*be45e998Sejakowatz 
12*be45e998Sejakowatz // Standard Includes -----------------------------------------------------------
13*be45e998Sejakowatz #include <iostream>
14*be45e998Sejakowatz #include <stdio.h>
15*be45e998Sejakowatz #ifdef TEST_OBOS
16*be45e998Sejakowatz #include <posix/typeinfo>
17*be45e998Sejakowatz #else
18*be45e998Sejakowatz #include <typeinfo>
19*be45e998Sejakowatz #endif
20*be45e998Sejakowatz #include <posix/string.h>
21*be45e998Sejakowatz 
22*be45e998Sejakowatz // System Includes -------------------------------------------------------------
23*be45e998Sejakowatz #include <Message.h>
24*be45e998Sejakowatz 
25*be45e998Sejakowatz // Project Includes ------------------------------------------------------------
26*be45e998Sejakowatz 
27*be45e998Sejakowatz // Local Includes --------------------------------------------------------------
28*be45e998Sejakowatz #include "../common.h"
29*be45e998Sejakowatz 
30*be45e998Sejakowatz // Local Defines ---------------------------------------------------------------
31*be45e998Sejakowatz #define TEMPLATE_TEST_PARAMS <Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy>
32*be45e998Sejakowatz #define ADD_TEMPLATE_TEST(classbeingtested, suitename, classname, funcname)				\
33*be45e998Sejakowatz 	(suitename)->addTest(new TestCaller<classname>(((string(#classbeingtested) + "::" + #funcname + "::" + typeid(Type).name()).c_str() ),	\
34*be45e998Sejakowatz 						 &classname::funcname));
35*be45e998Sejakowatz 
36*be45e998Sejakowatz // Globals ---------------------------------------------------------------------
37*be45e998Sejakowatz template
38*be45e998Sejakowatz <
39*be45e998Sejakowatz 	class Type,				// int32
40*be45e998Sejakowatz 	type_code TypeCode,		// B_INT32_TYPE
41*be45e998Sejakowatz 	class FuncPolicy,		// status_t Add(BMessage&, const char*, Type&)
42*be45e998Sejakowatz 							// status_t Find(BMessage&, const char*, int32, Type*)
43*be45e998Sejakowatz 							// Type QuickFind(BMessage&, const char*, int32)
44*be45e998Sejakowatz 							// bool Has(BMessage&, const char*, int32)
45*be45e998Sejakowatz 							// status_t Replace(BMessage&, const char*, int32, Type)
46*be45e998Sejakowatz 	class InitPolicy,		// Type Zero()
47*be45e998Sejakowatz 							// Type Test1()
48*be45e998Sejakowatz 							// Type Test2()
49*be45e998Sejakowatz 							// vector<Type> Array()
50*be45e998Sejakowatz 	class AssertPolicy		// Type Zero()
51*be45e998Sejakowatz >
52*be45e998Sejakowatz class TMessageItemTest;
53*be45e998Sejakowatz 
54*be45e998Sejakowatz 
55*be45e998Sejakowatz //------------------------------------------------------------------------------
56*be45e998Sejakowatz template<class T>
57*be45e998Sejakowatz struct ArrayTypeBase
58*be45e998Sejakowatz {
59*be45e998Sejakowatz 	typedef vector<T> ArrayType;
60*be45e998Sejakowatz 	typedef typename ArrayType::size_type SizeType;
61*be45e998Sejakowatz 	static SizeType Size(ArrayType& array) { return array.size(); }
62*be45e998Sejakowatz };
63*be45e998Sejakowatz //------------------------------------------------------------------------------
64*be45e998Sejakowatz template
65*be45e998Sejakowatz <
66*be45e998Sejakowatz 	typename Type,
67*be45e998Sejakowatz 	status_t (BMessage::*AddFunc)(const char*, Type),
68*be45e998Sejakowatz 	status_t (BMessage::*FindFunc)(const char*, int32, Type*) const,
69*be45e998Sejakowatz 	Type (BMessage::*QuickFindFunc)(const char*, int32) const,
70*be45e998Sejakowatz 	bool (BMessage::*HasFunc)(const char*, int32) const,
71*be45e998Sejakowatz 	status_t (BMessage::*ReplaceFunc)(const char*, int32, Type)
72*be45e998Sejakowatz >
73*be45e998Sejakowatz struct TMessageItemFuncPolicy
74*be45e998Sejakowatz {
75*be45e998Sejakowatz 	static status_t Add(BMessage& msg, const char* name, Type& val)
76*be45e998Sejakowatz 	{
77*be45e998Sejakowatz 		return (msg.*AddFunc)(name, val);
78*be45e998Sejakowatz 	}
79*be45e998Sejakowatz 	static status_t Find(BMessage& msg, const char* name, int32 index, Type* val)
80*be45e998Sejakowatz 	{
81*be45e998Sejakowatz 		return (msg.*FindFunc)(name, index, val);
82*be45e998Sejakowatz 	}
83*be45e998Sejakowatz 	static Type QuickFind(BMessage& msg, const char* name, int32 index)
84*be45e998Sejakowatz 	{
85*be45e998Sejakowatz 		return (msg.*QuickFindFunc)(name, index);
86*be45e998Sejakowatz 	}
87*be45e998Sejakowatz 	static bool Has(BMessage& msg, const char* name, int32 index)
88*be45e998Sejakowatz 	{
89*be45e998Sejakowatz 		return (msg.*HasFunc)(name, index);
90*be45e998Sejakowatz 	}
91*be45e998Sejakowatz 	static status_t Replace(BMessage& msg, const char* name, int32 index, Type val)
92*be45e998Sejakowatz 	{
93*be45e998Sejakowatz 		return (msg.*ReplaceFunc)(name, index, val);
94*be45e998Sejakowatz 	}
95*be45e998Sejakowatz };
96*be45e998Sejakowatz //------------------------------------------------------------------------------
97*be45e998Sejakowatz template
98*be45e998Sejakowatz <
99*be45e998Sejakowatz 	class Type,				// int32
100*be45e998Sejakowatz 	type_code TypeCode,		// B_INT32_TYPE
101*be45e998Sejakowatz 	class FuncPolicy,		// status_t Add(BMessage&, const char*, Type&)
102*be45e998Sejakowatz 							// status_t Find(BMessage&, const char*, int32, Type*)
103*be45e998Sejakowatz 							// Type QuickFind(BMessage&, const char*, int32)
104*be45e998Sejakowatz 							// bool Has(BMessage&, const char*, int32)
105*be45e998Sejakowatz 							// status_t Replace(BMessage&, const char*, int32, Type)
106*be45e998Sejakowatz 	class InitPolicy,		// Type Zero()
107*be45e998Sejakowatz 							// Type Test1()
108*be45e998Sejakowatz 							// Type Test2()
109*be45e998Sejakowatz 							// ArrayType Array()
110*be45e998Sejakowatz 							// typedef XXX ArrayType
111*be45e998Sejakowatz 	class AssertPolicy		// Type Zero()
112*be45e998Sejakowatz 							// Type Invalid()
113*be45e998Sejakowatz >
114*be45e998Sejakowatz class TMessageItemTest : public TestCase
115*be45e998Sejakowatz {
116*be45e998Sejakowatz 	public:
117*be45e998Sejakowatz 		TMessageItemTest() {;}
118*be45e998Sejakowatz 		TMessageItemTest(std::string name) : TestCase(name) {;}
119*be45e998Sejakowatz 
120*be45e998Sejakowatz 		void MessageItemTest1();
121*be45e998Sejakowatz 		void MessageItemTest2();
122*be45e998Sejakowatz 		void MessageItemTest3();
123*be45e998Sejakowatz 		void MessageItemTest4();
124*be45e998Sejakowatz 		void MessageItemTest5();
125*be45e998Sejakowatz 		void MessageItemTest6();
126*be45e998Sejakowatz 		void MessageItemTest7();
127*be45e998Sejakowatz 		void MessageItemTest8();
128*be45e998Sejakowatz 
129*be45e998Sejakowatz 		static TestSuite* Suite();
130*be45e998Sejakowatz 
131*be45e998Sejakowatz 	typedef typename InitPolicy::ArrayType ArrayType;
132*be45e998Sejakowatz };
133*be45e998Sejakowatz 
134*be45e998Sejakowatz 
135*be45e998Sejakowatz //------------------------------------------------------------------------------
136*be45e998Sejakowatz template
137*be45e998Sejakowatz <
138*be45e998Sejakowatz 	class Type,
139*be45e998Sejakowatz 	type_code TypeCode,
140*be45e998Sejakowatz 	class FuncPolicy,
141*be45e998Sejakowatz 	class InitPolicy,
142*be45e998Sejakowatz 	class AssertPolicy
143*be45e998Sejakowatz >
144*be45e998Sejakowatz void
145*be45e998Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy>::
146*be45e998Sejakowatz MessageItemTest1()
147*be45e998Sejakowatz {
148*be45e998Sejakowatz 	BMessage msg;
149*be45e998Sejakowatz 	Type out = InitPolicy::Zero();
150*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_NAME_NOT_FOUND);
151*be45e998Sejakowatz 	CPPUNIT_ASSERT(out == AssertPolicy::Invalid());
152*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::QuickFind(msg, "item", 0) == AssertPolicy::Invalid());
153*be45e998Sejakowatz 	CPPUNIT_ASSERT(!FuncPolicy::Has(msg, "item", 0));
154*be45e998Sejakowatz 	const void* ptr = &out;
155*be45e998Sejakowatz 	ssize_t size;
156*be45e998Sejakowatz 	CPPUNIT_ASSERT(msg.FindData("item", TypeCode, &ptr, &size) ==
157*be45e998Sejakowatz 				   B_NAME_NOT_FOUND);
158*be45e998Sejakowatz 	CPPUNIT_ASSERT(ptr == NULL);
159*be45e998Sejakowatz }
160*be45e998Sejakowatz //------------------------------------------------------------------------------
161*be45e998Sejakowatz template
162*be45e998Sejakowatz <
163*be45e998Sejakowatz 	class Type,
164*be45e998Sejakowatz 	type_code TypeCode,
165*be45e998Sejakowatz 	class FuncPolicy,
166*be45e998Sejakowatz 	class InitPolicy,
167*be45e998Sejakowatz 	class AssertPolicy
168*be45e998Sejakowatz >
169*be45e998Sejakowatz void
170*be45e998Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy>::
171*be45e998Sejakowatz MessageItemTest2()
172*be45e998Sejakowatz {
173*be45e998Sejakowatz 	BMessage msg;
174*be45e998Sejakowatz 	Type in = InitPolicy::Test1();
175*be45e998Sejakowatz 	Type out = InitPolicy::Zero();
176*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK);
177*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0));
178*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::QuickFind(msg, "item", 0) == in);
179*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK);
180*be45e998Sejakowatz 	CPPUNIT_ASSERT(out == in);
181*be45e998Sejakowatz 	Type* pout = NULL;
182*be45e998Sejakowatz 	ssize_t size;
183*be45e998Sejakowatz 	status_t err = msg.FindData("item", TypeCode, (const void**)&pout, &size);
184*be45e998Sejakowatz 	CPPUNIT_ASSERT(err == B_OK);
185*be45e998Sejakowatz 	CPPUNIT_ASSERT(*pout == in);
186*be45e998Sejakowatz 	CPPUNIT_ASSERT(size == sizeof (Type));
187*be45e998Sejakowatz }
188*be45e998Sejakowatz //------------------------------------------------------------------------------
189*be45e998Sejakowatz template
190*be45e998Sejakowatz <
191*be45e998Sejakowatz 	class Type,
192*be45e998Sejakowatz 	type_code TypeCode,
193*be45e998Sejakowatz 	class FuncPolicy,
194*be45e998Sejakowatz 	class InitPolicy,
195*be45e998Sejakowatz 	class AssertPolicy
196*be45e998Sejakowatz >
197*be45e998Sejakowatz void
198*be45e998Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy>::
199*be45e998Sejakowatz MessageItemTest3()
200*be45e998Sejakowatz {
201*be45e998Sejakowatz 	BMessage msg;
202*be45e998Sejakowatz 	Type in = InitPolicy::Test1();
203*be45e998Sejakowatz 	Type in2 = InitPolicy::Test2();
204*be45e998Sejakowatz 	Type out = InitPolicy::Zero();
205*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK);
206*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::Replace(msg, "item", 0, in2) == B_OK);
207*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0));
208*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::QuickFind(msg, "item", 0) == in2);
209*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK);
210*be45e998Sejakowatz 	CPPUNIT_ASSERT(out == in2);
211*be45e998Sejakowatz 	out = InitPolicy::Zero();
212*be45e998Sejakowatz 	Type* pout;
213*be45e998Sejakowatz 	ssize_t size;
214*be45e998Sejakowatz 	CPPUNIT_ASSERT(msg.FindData("item", TypeCode, (const void**)&pout,
215*be45e998Sejakowatz 				   &size) == B_OK);
216*be45e998Sejakowatz 	CPPUNIT_ASSERT(*pout == in2);
217*be45e998Sejakowatz 	CPPUNIT_ASSERT(size == sizeof (Type));
218*be45e998Sejakowatz }
219*be45e998Sejakowatz //------------------------------------------------------------------------------
220*be45e998Sejakowatz template
221*be45e998Sejakowatz <
222*be45e998Sejakowatz 	class Type,
223*be45e998Sejakowatz 	type_code TypeCode,
224*be45e998Sejakowatz 	class FuncPolicy,
225*be45e998Sejakowatz 	class InitPolicy,
226*be45e998Sejakowatz 	class AssertPolicy
227*be45e998Sejakowatz >
228*be45e998Sejakowatz void
229*be45e998Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy>::
230*be45e998Sejakowatz MessageItemTest4()
231*be45e998Sejakowatz {
232*be45e998Sejakowatz 	BMessage msg;
233*be45e998Sejakowatz 	Type out = InitPolicy::Zero();
234*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 1, &out) == B_NAME_NOT_FOUND);
235*be45e998Sejakowatz 	CPPUNIT_ASSERT(out == AssertPolicy::Invalid());
236*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::QuickFind(msg, "item", 1) == AssertPolicy::Invalid());
237*be45e998Sejakowatz 	CPPUNIT_ASSERT(!FuncPolicy::Has(msg, "item", 1));
238*be45e998Sejakowatz 	const void* ptr = &out;
239*be45e998Sejakowatz 	ssize_t size;
240*be45e998Sejakowatz 	CPPUNIT_ASSERT(msg.FindData("item", TypeCode, 1, &ptr, &size) ==
241*be45e998Sejakowatz 				   B_NAME_NOT_FOUND);
242*be45e998Sejakowatz 	CPPUNIT_ASSERT(ptr == NULL);
243*be45e998Sejakowatz }
244*be45e998Sejakowatz //------------------------------------------------------------------------------
245*be45e998Sejakowatz template
246*be45e998Sejakowatz <
247*be45e998Sejakowatz 	class Type,
248*be45e998Sejakowatz 	type_code TypeCode,
249*be45e998Sejakowatz 	class FuncPolicy,
250*be45e998Sejakowatz 	class InitPolicy,
251*be45e998Sejakowatz 	class AssertPolicy
252*be45e998Sejakowatz >
253*be45e998Sejakowatz void
254*be45e998Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy>::
255*be45e998Sejakowatz MessageItemTest5()
256*be45e998Sejakowatz {
257*be45e998Sejakowatz 	BMessage msg;
258*be45e998Sejakowatz 	ArrayType in = InitPolicy::Array();
259*be45e998Sejakowatz 	Type out = InitPolicy::Zero();
260*be45e998Sejakowatz 	Type* pout;
261*be45e998Sejakowatz 	ssize_t size;
262*be45e998Sejakowatz 
263*be45e998Sejakowatz 	for (int32 i = 0; i < InitPolicy::Size(in); ++i)
264*be45e998Sejakowatz 	{
265*be45e998Sejakowatz 		CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in[i]) == B_OK);
266*be45e998Sejakowatz 	}
267*be45e998Sejakowatz 
268*be45e998Sejakowatz 	for (int32 i = 0; i < InitPolicy::Size(in); ++i)
269*be45e998Sejakowatz 	{
270*be45e998Sejakowatz 		CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", i));
271*be45e998Sejakowatz 		CPPUNIT_ASSERT(FuncPolicy::QuickFind(msg, "item", i) == in[i]);
272*be45e998Sejakowatz 		CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", i, &out) == B_OK);
273*be45e998Sejakowatz 		CPPUNIT_ASSERT(out == in[i]);
274*be45e998Sejakowatz 		CPPUNIT_ASSERT(msg.FindData("item", TypeCode, i,
275*be45e998Sejakowatz 					   (const void**)&pout, &size) == B_OK);
276*be45e998Sejakowatz 		CPPUNIT_ASSERT(*pout == in[i]);
277*be45e998Sejakowatz 		CPPUNIT_ASSERT(size == sizeof (Type));
278*be45e998Sejakowatz 	}
279*be45e998Sejakowatz }
280*be45e998Sejakowatz //------------------------------------------------------------------------------
281*be45e998Sejakowatz template
282*be45e998Sejakowatz <
283*be45e998Sejakowatz 	class Type,
284*be45e998Sejakowatz 	type_code TypeCode,
285*be45e998Sejakowatz 	class FuncPolicy,
286*be45e998Sejakowatz 	class InitPolicy,
287*be45e998Sejakowatz 	class AssertPolicy
288*be45e998Sejakowatz >
289*be45e998Sejakowatz void
290*be45e998Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy>::
291*be45e998Sejakowatz MessageItemTest6()
292*be45e998Sejakowatz {
293*be45e998Sejakowatz 	BMessage msg;
294*be45e998Sejakowatz 	ArrayType in = InitPolicy::Array();
295*be45e998Sejakowatz 	Type in2 = InitPolicy::Test2();
296*be45e998Sejakowatz 	Type out = InitPolicy::Zero();
297*be45e998Sejakowatz 	const int rIndex = 2;
298*be45e998Sejakowatz 
299*be45e998Sejakowatz 	for (int32 i = 0; i < InitPolicy::Size(in); ++i)
300*be45e998Sejakowatz 	{
301*be45e998Sejakowatz 		CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in[i]) == B_OK);
302*be45e998Sejakowatz 	}
303*be45e998Sejakowatz 
304*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::Replace(msg, "item", rIndex, in2) == B_OK);
305*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", rIndex));
306*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::QuickFind(msg, "item", rIndex) == in2);
307*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", rIndex, &out) == B_OK);
308*be45e998Sejakowatz 	CPPUNIT_ASSERT(out == in2);
309*be45e998Sejakowatz 	out = InitPolicy::Zero();
310*be45e998Sejakowatz 	Type* pout;
311*be45e998Sejakowatz 	ssize_t size;
312*be45e998Sejakowatz 	CPPUNIT_ASSERT(msg.FindData("item", TypeCode, rIndex,
313*be45e998Sejakowatz 				   (const void**)&pout, &size) == B_OK);
314*be45e998Sejakowatz 	CPPUNIT_ASSERT(*pout == in2);
315*be45e998Sejakowatz 	CPPUNIT_ASSERT(size == sizeof (Type));
316*be45e998Sejakowatz }
317*be45e998Sejakowatz //------------------------------------------------------------------------------
318*be45e998Sejakowatz template
319*be45e998Sejakowatz <
320*be45e998Sejakowatz 	class Type,
321*be45e998Sejakowatz 	type_code TypeCode,
322*be45e998Sejakowatz 	class FuncPolicy,
323*be45e998Sejakowatz 	class InitPolicy,
324*be45e998Sejakowatz 	class AssertPolicy
325*be45e998Sejakowatz >
326*be45e998Sejakowatz void
327*be45e998Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy>::
328*be45e998Sejakowatz MessageItemTest7()
329*be45e998Sejakowatz {
330*be45e998Sejakowatz 	BMessage msg;
331*be45e998Sejakowatz 	Type in = InitPolicy::Test1();
332*be45e998Sejakowatz 	Type out = InitPolicy::Zero();
333*be45e998Sejakowatz 	CPPUNIT_ASSERT(msg.AddData("item", TypeCode, (const void*)&in,
334*be45e998Sejakowatz 							   sizeof (Type)) == B_OK);
335*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0));
336*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::QuickFind(msg, "item", 0) == in);
337*be45e998Sejakowatz 	CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK);
338*be45e998Sejakowatz 	CPPUNIT_ASSERT(out == in);
339*be45e998Sejakowatz 	Type* pout = NULL;
340*be45e998Sejakowatz 	ssize_t size;
341*be45e998Sejakowatz 	CPPUNIT_ASSERT(msg.FindData("item", TypeCode, (const void**)&pout,
342*be45e998Sejakowatz 				   &size) == B_OK);
343*be45e998Sejakowatz 	CPPUNIT_ASSERT(*pout == in);
344*be45e998Sejakowatz 	CPPUNIT_ASSERT(size == sizeof (Type));
345*be45e998Sejakowatz }
346*be45e998Sejakowatz //------------------------------------------------------------------------------
347*be45e998Sejakowatz template
348*be45e998Sejakowatz <
349*be45e998Sejakowatz 	class Type,
350*be45e998Sejakowatz 	type_code TypeCode,
351*be45e998Sejakowatz 	class FuncPolicy,
352*be45e998Sejakowatz 	class InitPolicy,
353*be45e998Sejakowatz 	class AssertPolicy
354*be45e998Sejakowatz >
355*be45e998Sejakowatz void
356*be45e998Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy>::
357*be45e998Sejakowatz MessageItemTest8()
358*be45e998Sejakowatz {
359*be45e998Sejakowatz 	BMessage msg;
360*be45e998Sejakowatz 	ArrayType in = InitPolicy::Array();
361*be45e998Sejakowatz 	Type out = InitPolicy::Zero();
362*be45e998Sejakowatz 	Type* pout;
363*be45e998Sejakowatz 	ssize_t size;
364*be45e998Sejakowatz 
365*be45e998Sejakowatz 	for (int32 i = 0; i < InitPolicy::Size(in); ++i)
366*be45e998Sejakowatz 	{
367*be45e998Sejakowatz 		CPPUNIT_ASSERT(msg.AddData("item", TypeCode,
368*be45e998Sejakowatz 					   (const void*)&in[i], sizeof (Type)) == B_OK);
369*be45e998Sejakowatz 	}
370*be45e998Sejakowatz 
371*be45e998Sejakowatz 	for (int32 i = 0; i < InitPolicy::Size(in); ++i)
372*be45e998Sejakowatz 	{
373*be45e998Sejakowatz 		CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", i));
374*be45e998Sejakowatz 		CPPUNIT_ASSERT(FuncPolicy::QuickFind(msg, "item", i) == in[i]);
375*be45e998Sejakowatz 		CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", i, &out) == B_OK);
376*be45e998Sejakowatz 		CPPUNIT_ASSERT(out == in[i]);
377*be45e998Sejakowatz 		CPPUNIT_ASSERT(msg.FindData("item", TypeCode, i,
378*be45e998Sejakowatz 					   (const void**)&pout, &size) == B_OK);
379*be45e998Sejakowatz 		CPPUNIT_ASSERT(*pout == in[i]);
380*be45e998Sejakowatz 		CPPUNIT_ASSERT(size == sizeof (Type));
381*be45e998Sejakowatz 	}
382*be45e998Sejakowatz }
383*be45e998Sejakowatz //------------------------------------------------------------------------------
384*be45e998Sejakowatz template
385*be45e998Sejakowatz <
386*be45e998Sejakowatz 	class Type,
387*be45e998Sejakowatz 	type_code TypeCode,
388*be45e998Sejakowatz 	class FuncPolicy,
389*be45e998Sejakowatz 	class InitPolicy,
390*be45e998Sejakowatz 	class AssertPolicy
391*be45e998Sejakowatz >
392*be45e998Sejakowatz TestSuite*
393*be45e998Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy>::
394*be45e998Sejakowatz Suite()
395*be45e998Sejakowatz {
396*be45e998Sejakowatz 	TestSuite* suite = new TestSuite("BMessage::Add/Find/Replace/HasRect()");
397*be45e998Sejakowatz 
398*be45e998Sejakowatz 	ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest1);
399*be45e998Sejakowatz 	ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest2);
400*be45e998Sejakowatz 	ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest3);
401*be45e998Sejakowatz 	ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest4);
402*be45e998Sejakowatz 	ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest5);
403*be45e998Sejakowatz 	ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest6);
404*be45e998Sejakowatz 	ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest7);
405*be45e998Sejakowatz 	ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest8);
406*be45e998Sejakowatz 
407*be45e998Sejakowatz 	return suite;
408*be45e998Sejakowatz }
409*be45e998Sejakowatz //------------------------------------------------------------------------------
410*be45e998Sejakowatz 
411*be45e998Sejakowatz #endif	// MESSAGEITEMTEST_H
412*be45e998Sejakowatz 
413*be45e998Sejakowatz /*
414*be45e998Sejakowatz  * $Log $
415*be45e998Sejakowatz  *
416*be45e998Sejakowatz  * $Id  $
417*be45e998Sejakowatz  *
418*be45e998Sejakowatz 
419*be45e998Sejakowatz  */