1be45e998Sejakowatz //------------------------------------------------------------------------------
2be45e998Sejakowatz // MessageItemTest.h
3be45e998Sejakowatz //
4be45e998Sejakowatz //------------------------------------------------------------------------------
5be45e998Sejakowatz
6be45e998Sejakowatz #ifndef MESSAGEITEMTEST_H
7be45e998Sejakowatz #define MESSAGEITEMTEST_H
8be45e998Sejakowatz
9be45e998Sejakowatz // A sad attempt to get rid of the horrible and pathetic vector<bool> specialization
10be45e998Sejakowatz #define __SGI_STL_INTERNAL_BVECTOR_H
11be45e998Sejakowatz
12be45e998Sejakowatz // Standard Includes -----------------------------------------------------------
13be45e998Sejakowatz #include <iostream>
14be45e998Sejakowatz #include <stdio.h>
15be45e998Sejakowatz #include <typeinfo>
16be45e998Sejakowatz #include <posix/string.h>
17be45e998Sejakowatz
18be45e998Sejakowatz // System Includes -------------------------------------------------------------
19be45e998Sejakowatz #include <Message.h>
20be45e998Sejakowatz
21be45e998Sejakowatz // Project Includes ------------------------------------------------------------
22be45e998Sejakowatz
23be45e998Sejakowatz // Local Includes --------------------------------------------------------------
24be45e998Sejakowatz #include "../common.h"
25be45e998Sejakowatz
26be45e998Sejakowatz // Local Defines ---------------------------------------------------------------
27e5b24a58Sejakowatz #define TEMPLATE_TEST_PARAMS <Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>
28be45e998Sejakowatz #define ADD_TEMPLATE_TEST(classbeingtested, suitename, classname, funcname) \
29be45e998Sejakowatz (suitename)->addTest(new TestCaller<classname>(((string(#classbeingtested) + "::" + #funcname + "::" + typeid(Type).name()).c_str() ), \
30be45e998Sejakowatz &classname::funcname));
31be45e998Sejakowatz
32be45e998Sejakowatz // Globals ---------------------------------------------------------------------
33be45e998Sejakowatz template
34be45e998Sejakowatz <
35be45e998Sejakowatz class Type, // int32
36be45e998Sejakowatz type_code TypeCode, // B_INT32_TYPE
37be45e998Sejakowatz class FuncPolicy, // status_t Add(BMessage&, const char*, Type&)
38be45e998Sejakowatz // status_t Find(BMessage&, const char*, int32, Type*)
39be45e998Sejakowatz // Type QuickFind(BMessage&, const char*, int32)
40be45e998Sejakowatz // bool Has(BMessage&, const char*, int32)
41be45e998Sejakowatz // status_t Replace(BMessage&, const char*, int32, Type)
42be45e998Sejakowatz class InitPolicy, // Type Zero()
43be45e998Sejakowatz // Type Test1()
44be45e998Sejakowatz // Type Test2()
45e5b24a58Sejakowatz // size_t SizeOf(const Type&)
46e5b24a58Sejakowatz // ArrayType Array()
47e5b24a58Sejakowatz // typedef XXX ArrayType
48e5b24a58Sejakowatz class AssertPolicy, // Type Zero()
49e5b24a58Sejakowatz // Type Invalid()
50e5b24a58Sejakowatz class ComparePolicy // bool Compare(const Type& lhs, const Type& rhs)
51be45e998Sejakowatz >
52be45e998Sejakowatz class TMessageItemTest;
53be45e998Sejakowatz
54be45e998Sejakowatz
55be45e998Sejakowatz //------------------------------------------------------------------------------
56be45e998Sejakowatz template<class T>
57be45e998Sejakowatz struct ArrayTypeBase
58be45e998Sejakowatz {
59be45e998Sejakowatz typedef vector<T> ArrayType;
60be45e998Sejakowatz typedef typename ArrayType::size_type SizeType;
SizeArrayTypeBase61be45e998Sejakowatz static SizeType Size(ArrayType& array) { return array.size(); }
62be45e998Sejakowatz };
63be45e998Sejakowatz //------------------------------------------------------------------------------
64159d60f9Sejakowatz template<class Type>
65159d60f9Sejakowatz struct TypePolicy
66159d60f9Sejakowatz {
67159d60f9Sejakowatz enum { FixedSize = true };
DereferenceTypePolicy68*bef39d09SClemens Zeidler inline Type& Dereference(Type* p)
69159d60f9Sejakowatz {
70159d60f9Sejakowatz return *p;
71159d60f9Sejakowatz }
AddressOfTypePolicy72*bef39d09SClemens Zeidler inline Type* AddressOf(Type& t) { return &t; }
73159d60f9Sejakowatz };
74159d60f9Sejakowatz //------------------------------------------------------------------------------
75be45e998Sejakowatz template
76be45e998Sejakowatz <
77be45e998Sejakowatz typename Type,
78be45e998Sejakowatz status_t (BMessage::*AddFunc)(const char*, Type),
79be45e998Sejakowatz status_t (BMessage::*FindFunc)(const char*, int32, Type*) const,
802605a4f5Sejakowatz status_t (BMessage::*ShortFindFunc)(const char*, Type*) const,
81be45e998Sejakowatz Type (BMessage::*QuickFindFunc)(const char*, int32) const,
82be45e998Sejakowatz bool (BMessage::*HasFunc)(const char*, int32) const,
83e5b24a58Sejakowatz status_t (BMessage::*ReplaceFunc)(const char*, int32, Type),
84e5b24a58Sejakowatz status_t (BMessage::*AddDataFunc)(const char*, type_code, const void*,
85e5b24a58Sejakowatz ssize_t, bool, int32) = &BMessage::AddData,
86e5b24a58Sejakowatz status_t (BMessage::*FindDataFunc)(const char*, type_code, int32,
87e5b24a58Sejakowatz const void**, ssize_t*) const = &BMessage::FindData
88be45e998Sejakowatz >
89159d60f9Sejakowatz struct TMessageItemFuncPolicy : public TypePolicy<Type>
90be45e998Sejakowatz {
AddTMessageItemFuncPolicy91be45e998Sejakowatz static status_t Add(BMessage& msg, const char* name, Type& val)
92be45e998Sejakowatz {
93be45e998Sejakowatz return (msg.*AddFunc)(name, val);
94be45e998Sejakowatz }
95e5b24a58Sejakowatz static status_t AddData(BMessage& msg, const char* name, type_code type,
96*bef39d09SClemens Zeidler Type* val, ssize_t size, bool fixedSize = true)
97e5b24a58Sejakowatz {
98*bef39d09SClemens Zeidler return (msg.*AddDataFunc)(name, type, (const void*)val, size, fixedSize, 1);
99e5b24a58Sejakowatz }
FindTMessageItemFuncPolicy100be45e998Sejakowatz static status_t Find(BMessage& msg, const char* name, int32 index, Type* val)
101be45e998Sejakowatz {
102be45e998Sejakowatz return (msg.*FindFunc)(name, index, val);
103be45e998Sejakowatz }
ShortFindTMessageItemFuncPolicy1042605a4f5Sejakowatz static status_t ShortFind(BMessage& msg, const char* name, Type* val)
1052605a4f5Sejakowatz {
1062605a4f5Sejakowatz return (msg.*ShortFindFunc)(name, val);
1072605a4f5Sejakowatz }
QuickFindTMessageItemFuncPolicy108be45e998Sejakowatz static Type QuickFind(BMessage& msg, const char* name, int32 index)
109be45e998Sejakowatz {
110be45e998Sejakowatz return (msg.*QuickFindFunc)(name, index);
111be45e998Sejakowatz }
HasTMessageItemFuncPolicy112be45e998Sejakowatz static bool Has(BMessage& msg, const char* name, int32 index)
113be45e998Sejakowatz {
114be45e998Sejakowatz return (msg.*HasFunc)(name, index);
115be45e998Sejakowatz }
ReplaceTMessageItemFuncPolicy116e5b24a58Sejakowatz static status_t Replace(BMessage& msg, const char* name, int32 index, Type& val)
117be45e998Sejakowatz {
118be45e998Sejakowatz return (msg.*ReplaceFunc)(name, index, val);
119be45e998Sejakowatz }
FindDataTMessageItemFuncPolicy120e5b24a58Sejakowatz static status_t FindData(BMessage& msg, const char* name, type_code type,
121e5b24a58Sejakowatz int32 index, const void** data, ssize_t* size)
122e5b24a58Sejakowatz {
123e5b24a58Sejakowatz return (msg.*FindDataFunc)(name, type, index, data, size);
124e5b24a58Sejakowatz }
125e5b24a58Sejakowatz };
126e5b24a58Sejakowatz //------------------------------------------------------------------------------
127e5b24a58Sejakowatz template<class T, T zero = T(), T invalid = T()>
128e5b24a58Sejakowatz struct TMessageItemAssertPolicy
129e5b24a58Sejakowatz {
ZeroTMessageItemAssertPolicy130e5b24a58Sejakowatz inline static T Zero() { return zero; }
InvalidTMessageItemAssertPolicy131e5b24a58Sejakowatz inline static T Invalid() { return invalid; }
SizeTMessageItemAssertPolicy132e5b24a58Sejakowatz inline static bool Size(size_t size, T& t)
133e5b24a58Sejakowatz { return size == sizeof (t); }
134e5b24a58Sejakowatz };
135e5b24a58Sejakowatz //------------------------------------------------------------------------------
136e5b24a58Sejakowatz template<class T>
137e5b24a58Sejakowatz struct TMessageItemComparePolicy
138e5b24a58Sejakowatz {
139c5d8f91dSejakowatz inline static bool Compare(const T& lhs, const T& rhs);
140c5d8f91dSejakowatz // { return lhs == rhs; }
141be45e998Sejakowatz };
142c5d8f91dSejakowatz template<class T>
143c5d8f91dSejakowatz bool
Compare(const T & lhs,const T & rhs)144c5d8f91dSejakowatz TMessageItemComparePolicy<T>::Compare(const T &lhs, const T &rhs)
145c5d8f91dSejakowatz {
146c5d8f91dSejakowatz return lhs == rhs;
147c5d8f91dSejakowatz }
148be45e998Sejakowatz //------------------------------------------------------------------------------
149be45e998Sejakowatz template
150be45e998Sejakowatz <
151be45e998Sejakowatz class Type, // int32
152be45e998Sejakowatz type_code TypeCode, // B_INT32_TYPE
153be45e998Sejakowatz class FuncPolicy, // status_t Add(BMessage&, const char*, Type&)
154be45e998Sejakowatz // status_t Find(BMessage&, const char*, int32, Type*)
155be45e998Sejakowatz // Type QuickFind(BMessage&, const char*, int32)
156be45e998Sejakowatz // bool Has(BMessage&, const char*, int32)
157be45e998Sejakowatz // status_t Replace(BMessage&, const char*, int32, Type)
158e5b24a58Sejakowatz // status_t FindData(BMessage&, const char*, type_code, int32, const void**, ssize_t*)
159be45e998Sejakowatz class InitPolicy, // Type Zero()
160be45e998Sejakowatz // Type Test1()
161be45e998Sejakowatz // Type Test2()
162e5b24a58Sejakowatz // size_t SizeOf(const Type&)
163be45e998Sejakowatz // ArrayType Array()
164be45e998Sejakowatz // typedef XXX ArrayType
165e5b24a58Sejakowatz class AssertPolicy, // Type Zero()
166be45e998Sejakowatz // Type Invalid()
167e5b24a58Sejakowatz // bool Size(size_t, T&)
168e5b24a58Sejakowatz class ComparePolicy // bool Compare(const Type& lhs, const Type& rhs)
169e5b24a58Sejakowatz = TMessageItemComparePolicy<Type>
170be45e998Sejakowatz >
171159d60f9Sejakowatz class TMessageItemTest : public TestCase, public TypePolicy<Type>
172be45e998Sejakowatz {
173be45e998Sejakowatz public:
TMessageItemTest()174be45e998Sejakowatz TMessageItemTest() {;}
TMessageItemTest(std::string name)175be45e998Sejakowatz TMessageItemTest(std::string name) : TestCase(name) {;}
176be45e998Sejakowatz
177be45e998Sejakowatz void MessageItemTest1();
178be45e998Sejakowatz void MessageItemTest2();
179be45e998Sejakowatz void MessageItemTest3();
180be45e998Sejakowatz void MessageItemTest4();
181be45e998Sejakowatz void MessageItemTest5();
182be45e998Sejakowatz void MessageItemTest6();
183be45e998Sejakowatz void MessageItemTest7();
184be45e998Sejakowatz void MessageItemTest8();
1850cc48ce6Sejakowatz void MessageItemTest9();
1860cc48ce6Sejakowatz void MessageItemTest10();
1879fa0302aSejakowatz void MessageItemTest11();
1889fa0302aSejakowatz void MessageItemTest12();
189be45e998Sejakowatz
190be45e998Sejakowatz static TestSuite* Suite();
191be45e998Sejakowatz
192be45e998Sejakowatz typedef typename InitPolicy::ArrayType ArrayType;
193be45e998Sejakowatz };
194be45e998Sejakowatz
195be45e998Sejakowatz
196be45e998Sejakowatz //------------------------------------------------------------------------------
197be45e998Sejakowatz template
198be45e998Sejakowatz <
199be45e998Sejakowatz class Type,
200be45e998Sejakowatz type_code TypeCode,
201be45e998Sejakowatz class FuncPolicy,
202be45e998Sejakowatz class InitPolicy,
203e5b24a58Sejakowatz class AssertPolicy,
204e5b24a58Sejakowatz class ComparePolicy
205be45e998Sejakowatz >
206be45e998Sejakowatz void
207e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>::
MessageItemTest1()208be45e998Sejakowatz MessageItemTest1()
209be45e998Sejakowatz {
210be45e998Sejakowatz BMessage msg;
211be45e998Sejakowatz Type out = InitPolicy::Zero();
2122605a4f5Sejakowatz CPPUNIT_ASSERT(FuncPolicy::ShortFind(msg, "item", &out) == B_NAME_NOT_FOUND);
213be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_NAME_NOT_FOUND);
214e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, AssertPolicy::Invalid()));
215e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0),
216e5b24a58Sejakowatz AssertPolicy::Invalid()));
217be45e998Sejakowatz CPPUNIT_ASSERT(!FuncPolicy::Has(msg, "item", 0));
218be45e998Sejakowatz const void* ptr = &out;
219be45e998Sejakowatz ssize_t size;
220e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0, &ptr, &size) ==
221be45e998Sejakowatz B_NAME_NOT_FOUND);
222be45e998Sejakowatz CPPUNIT_ASSERT(ptr == NULL);
223be45e998Sejakowatz }
224be45e998Sejakowatz //------------------------------------------------------------------------------
225be45e998Sejakowatz template
226be45e998Sejakowatz <
227be45e998Sejakowatz class Type,
228be45e998Sejakowatz type_code TypeCode,
229be45e998Sejakowatz class FuncPolicy,
230be45e998Sejakowatz class InitPolicy,
231e5b24a58Sejakowatz class AssertPolicy,
232e5b24a58Sejakowatz class ComparePolicy
233be45e998Sejakowatz >
234be45e998Sejakowatz void
235e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>::
MessageItemTest2()236be45e998Sejakowatz MessageItemTest2()
2370cc48ce6Sejakowatz {
238be45e998Sejakowatz BMessage msg;
239be45e998Sejakowatz Type in = InitPolicy::Test1();
240be45e998Sejakowatz Type out = InitPolicy::Zero();
241be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK);
242be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0));
243e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), in));
2442605a4f5Sejakowatz CPPUNIT_ASSERT(FuncPolicy::ShortFind(msg, "item", &out) == B_OK);
245be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK);
246e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in));
247*bef39d09SClemens Zeidler Type* pout = NULL;
248be45e998Sejakowatz ssize_t size;
249e5b24a58Sejakowatz status_t err = FuncPolicy::FindData(msg, "item", TypeCode, 0,
250e5b24a58Sejakowatz (const void**)&pout, &size);
251be45e998Sejakowatz CPPUNIT_ASSERT(err == B_OK);
252159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in));
253159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout)));
254be45e998Sejakowatz }
255be45e998Sejakowatz //------------------------------------------------------------------------------
256be45e998Sejakowatz template
257be45e998Sejakowatz <
258be45e998Sejakowatz class Type,
259be45e998Sejakowatz type_code TypeCode,
260be45e998Sejakowatz class FuncPolicy,
261be45e998Sejakowatz class InitPolicy,
262e5b24a58Sejakowatz class AssertPolicy,
263e5b24a58Sejakowatz class ComparePolicy
264be45e998Sejakowatz >
265be45e998Sejakowatz void
266e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>::
MessageItemTest3()267be45e998Sejakowatz MessageItemTest3()
268be45e998Sejakowatz {
269be45e998Sejakowatz BMessage msg;
270be45e998Sejakowatz Type in = InitPolicy::Test1();
271be45e998Sejakowatz Type in2 = InitPolicy::Test2();
272be45e998Sejakowatz Type out = InitPolicy::Zero();
273be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK);
274be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Replace(msg, "item", 0, in2) == B_OK);
275be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0));
276e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), in2));
2772605a4f5Sejakowatz CPPUNIT_ASSERT(FuncPolicy::ShortFind(msg, "item", &out) == B_OK);
278be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK);
279e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in2));
280be45e998Sejakowatz out = InitPolicy::Zero();
281*bef39d09SClemens Zeidler Type* pout;
282be45e998Sejakowatz ssize_t size;
283e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0,
284e5b24a58Sejakowatz (const void**)&pout, &size) == B_OK);
285159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in2));
286159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout)));
287be45e998Sejakowatz }
288be45e998Sejakowatz //------------------------------------------------------------------------------
289be45e998Sejakowatz template
290be45e998Sejakowatz <
291be45e998Sejakowatz class Type,
292be45e998Sejakowatz type_code TypeCode,
293be45e998Sejakowatz class FuncPolicy,
294be45e998Sejakowatz class InitPolicy,
295e5b24a58Sejakowatz class AssertPolicy,
296e5b24a58Sejakowatz class ComparePolicy
297be45e998Sejakowatz >
298be45e998Sejakowatz void
299e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>::
MessageItemTest4()300be45e998Sejakowatz MessageItemTest4()
301be45e998Sejakowatz {
302be45e998Sejakowatz BMessage msg;
303be45e998Sejakowatz Type out = InitPolicy::Zero();
304be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 1, &out) == B_NAME_NOT_FOUND);
305e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, AssertPolicy::Invalid()));
306e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 1),
307e5b24a58Sejakowatz AssertPolicy::Invalid()));
308be45e998Sejakowatz CPPUNIT_ASSERT(!FuncPolicy::Has(msg, "item", 1));
309be45e998Sejakowatz const void* ptr = &out;
310be45e998Sejakowatz ssize_t size;
311e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 1, &ptr, &size) ==
312be45e998Sejakowatz B_NAME_NOT_FOUND);
313be45e998Sejakowatz CPPUNIT_ASSERT(ptr == NULL);
314be45e998Sejakowatz }
315be45e998Sejakowatz //------------------------------------------------------------------------------
316be45e998Sejakowatz template
317be45e998Sejakowatz <
318be45e998Sejakowatz class Type,
319be45e998Sejakowatz type_code TypeCode,
320be45e998Sejakowatz class FuncPolicy,
321be45e998Sejakowatz class InitPolicy,
322e5b24a58Sejakowatz class AssertPolicy,
323e5b24a58Sejakowatz class ComparePolicy
324be45e998Sejakowatz >
325be45e998Sejakowatz void
326e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>::
MessageItemTest5()327be45e998Sejakowatz MessageItemTest5()
328be45e998Sejakowatz {
329be45e998Sejakowatz BMessage msg;
330be45e998Sejakowatz ArrayType in = InitPolicy::Array();
331be45e998Sejakowatz Type out = InitPolicy::Zero();
332*bef39d09SClemens Zeidler Type* pout;
333be45e998Sejakowatz ssize_t size;
334be45e998Sejakowatz
3359fa0302aSejakowatz for (uint32 ii = 0; ii < InitPolicy::Size(in); ++ii)
336be45e998Sejakowatz {
3379fa0302aSejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in[ii]) == B_OK);
338be45e998Sejakowatz }
339be45e998Sejakowatz
340169ae266Sejakowatz for (uint32 i = 0; i < InitPolicy::Size(in); ++i)
341be45e998Sejakowatz {
342be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", i));
343e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", i),
344e5b24a58Sejakowatz in[i]));
345be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", i, &out) == B_OK);
346e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in[i]));
347e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, i,
348be45e998Sejakowatz (const void**)&pout, &size) == B_OK);
349159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in[i]));
350159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout)));
351be45e998Sejakowatz }
352be45e998Sejakowatz }
353be45e998Sejakowatz //------------------------------------------------------------------------------
354be45e998Sejakowatz template
355be45e998Sejakowatz <
356be45e998Sejakowatz class Type,
357be45e998Sejakowatz type_code TypeCode,
358be45e998Sejakowatz class FuncPolicy,
359be45e998Sejakowatz class InitPolicy,
360e5b24a58Sejakowatz class AssertPolicy,
361e5b24a58Sejakowatz class ComparePolicy
362be45e998Sejakowatz >
363be45e998Sejakowatz void
364e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>::
MessageItemTest6()365be45e998Sejakowatz MessageItemTest6()
366be45e998Sejakowatz {
367be45e998Sejakowatz BMessage msg;
368be45e998Sejakowatz ArrayType in = InitPolicy::Array();
369be45e998Sejakowatz Type in2 = InitPolicy::Test2();
370be45e998Sejakowatz Type out = InitPolicy::Zero();
371be45e998Sejakowatz const int rIndex = 2;
372be45e998Sejakowatz
373169ae266Sejakowatz for (uint32 i = 0; i < InitPolicy::Size(in); ++i)
374be45e998Sejakowatz {
375be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in[i]) == B_OK);
376be45e998Sejakowatz }
377be45e998Sejakowatz
378be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Replace(msg, "item", rIndex, in2) == B_OK);
379be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", rIndex));
380e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", rIndex),
381e5b24a58Sejakowatz in2));
382be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", rIndex, &out) == B_OK);
383e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in2));
384be45e998Sejakowatz out = InitPolicy::Zero();
385*bef39d09SClemens Zeidler Type* pout;
386be45e998Sejakowatz ssize_t size;
387e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, rIndex,
388be45e998Sejakowatz (const void**)&pout, &size) == B_OK);
389159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in2));
390159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout)));
391be45e998Sejakowatz }
392be45e998Sejakowatz //------------------------------------------------------------------------------
393be45e998Sejakowatz template
394be45e998Sejakowatz <
395be45e998Sejakowatz class Type,
396be45e998Sejakowatz type_code TypeCode,
397be45e998Sejakowatz class FuncPolicy,
398be45e998Sejakowatz class InitPolicy,
399e5b24a58Sejakowatz class AssertPolicy,
400e5b24a58Sejakowatz class ComparePolicy
401be45e998Sejakowatz >
402be45e998Sejakowatz void
403e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>::
MessageItemTest7()404be45e998Sejakowatz MessageItemTest7()
405be45e998Sejakowatz {
406be45e998Sejakowatz BMessage msg;
407be45e998Sejakowatz Type in = InitPolicy::Test1();
408be45e998Sejakowatz Type out = InitPolicy::Zero();
409159d60f9Sejakowatz CPPUNIT_ASSERT(FuncPolicy::AddData(msg, "item", TypeCode, AddressOf(in),
410159d60f9Sejakowatz InitPolicy::SizeOf(in),
411159d60f9Sejakowatz TypePolicy<Type>::FixedSize) == B_OK);
412be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0));
413e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0),
414e5b24a58Sejakowatz in));
4152605a4f5Sejakowatz CPPUNIT_ASSERT(FuncPolicy::ShortFind(msg, "item", &out) == B_OK);
416be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK);
417e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in));
418*bef39d09SClemens Zeidler Type* pout = NULL;
419be45e998Sejakowatz ssize_t size;
420e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0,
421e5b24a58Sejakowatz (const void**)&pout, &size) == B_OK);
422159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in));
423159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout)));
424be45e998Sejakowatz }
425be45e998Sejakowatz //------------------------------------------------------------------------------
426159d60f9Sejakowatz #include <stdio.h>
427be45e998Sejakowatz template
428be45e998Sejakowatz <
429be45e998Sejakowatz class Type,
430be45e998Sejakowatz type_code TypeCode,
431be45e998Sejakowatz class FuncPolicy,
432be45e998Sejakowatz class InitPolicy,
433e5b24a58Sejakowatz class AssertPolicy,
434e5b24a58Sejakowatz class ComparePolicy
435be45e998Sejakowatz >
436be45e998Sejakowatz void
437e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>::
MessageItemTest8()438be45e998Sejakowatz MessageItemTest8()
439be45e998Sejakowatz {
440be45e998Sejakowatz BMessage msg;
441be45e998Sejakowatz ArrayType in = InitPolicy::Array();
442be45e998Sejakowatz Type out = InitPolicy::Zero();
443*bef39d09SClemens Zeidler Type* pout;
444be45e998Sejakowatz ssize_t size;
445169ae266Sejakowatz for (uint32 i = 0; i < InitPolicy::Size(in); ++i)
446be45e998Sejakowatz {
447e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::AddData(msg, "item", TypeCode,
448159d60f9Sejakowatz AddressOf(in[i]), InitPolicy::SizeOf(in[i]),
449159d60f9Sejakowatz TypePolicy<Type>::FixedSize) == B_OK);
450be45e998Sejakowatz }
451be45e998Sejakowatz
452169ae266Sejakowatz for (uint32 i = 0; i < InitPolicy::Size(in); ++i)
453be45e998Sejakowatz {
454be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", i));
455e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", i),
456e5b24a58Sejakowatz in[i]));
457be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", i, &out) == B_OK);
458e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in[i]));
459e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, i,
460be45e998Sejakowatz (const void**)&pout, &size) == B_OK);
461159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in[i]));
462159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout)));
463be45e998Sejakowatz }
464be45e998Sejakowatz }
465be45e998Sejakowatz //------------------------------------------------------------------------------
466be45e998Sejakowatz template
467be45e998Sejakowatz <
468be45e998Sejakowatz class Type,
469be45e998Sejakowatz type_code TypeCode,
470be45e998Sejakowatz class FuncPolicy,
471be45e998Sejakowatz class InitPolicy,
472e5b24a58Sejakowatz class AssertPolicy,
473e5b24a58Sejakowatz class ComparePolicy
474be45e998Sejakowatz >
4750cc48ce6Sejakowatz void
4760cc48ce6Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>::
MessageItemTest9()4770cc48ce6Sejakowatz MessageItemTest9()
4780cc48ce6Sejakowatz {
4790cc48ce6Sejakowatz BMessage msg;
4800cc48ce6Sejakowatz Type in = InitPolicy::Test1();
4810cc48ce6Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, NULL, in) == B_BAD_VALUE);
4820cc48ce6Sejakowatz }
4830cc48ce6Sejakowatz //------------------------------------------------------------------------------
4840cc48ce6Sejakowatz template
4850cc48ce6Sejakowatz <
4860cc48ce6Sejakowatz class Type,
4870cc48ce6Sejakowatz type_code TypeCode,
4880cc48ce6Sejakowatz class FuncPolicy,
4890cc48ce6Sejakowatz class InitPolicy,
4900cc48ce6Sejakowatz class AssertPolicy,
4910cc48ce6Sejakowatz class ComparePolicy
4920cc48ce6Sejakowatz >
4930cc48ce6Sejakowatz void
4940cc48ce6Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>::
MessageItemTest10()4950cc48ce6Sejakowatz MessageItemTest10()
4960cc48ce6Sejakowatz {
4970cc48ce6Sejakowatz BMessage msg;
4980cc48ce6Sejakowatz Type in = InitPolicy::Test1();
4990cc48ce6Sejakowatz Type out = InitPolicy::Zero();
5000cc48ce6Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK);
5010cc48ce6Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, NULL, 0) == false);
5020cc48ce6Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, NULL, 0),
5030cc48ce6Sejakowatz AssertPolicy::Invalid()));
5042605a4f5Sejakowatz CPPUNIT_ASSERT(FuncPolicy::ShortFind(msg, NULL, &out) == B_BAD_VALUE);
5050cc48ce6Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, NULL, 0, &out) == B_BAD_VALUE);
506*bef39d09SClemens Zeidler Type* pout = NULL;
5070cc48ce6Sejakowatz ssize_t size;
5080cc48ce6Sejakowatz status_t err = FuncPolicy::FindData(msg, NULL, TypeCode, 0,
5090cc48ce6Sejakowatz (const void**)&pout, &size);
5103a7d8dfaSMichael Lotz CPPUNIT_ASSERT(err == B_BAD_VALUE);
5110cc48ce6Sejakowatz }
5120cc48ce6Sejakowatz //------------------------------------------------------------------------------
5130cc48ce6Sejakowatz template
5140cc48ce6Sejakowatz <
5150cc48ce6Sejakowatz class Type,
5160cc48ce6Sejakowatz type_code TypeCode,
5170cc48ce6Sejakowatz class FuncPolicy,
5180cc48ce6Sejakowatz class InitPolicy,
5190cc48ce6Sejakowatz class AssertPolicy,
5200cc48ce6Sejakowatz class ComparePolicy
5210cc48ce6Sejakowatz >
5229fa0302aSejakowatz void
5239fa0302aSejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>::
MessageItemTest11()5249fa0302aSejakowatz MessageItemTest11()
5259fa0302aSejakowatz {
5269fa0302aSejakowatz BMessage msg;
5279fa0302aSejakowatz Type in = InitPolicy::Test1();
5289fa0302aSejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK);
5299fa0302aSejakowatz
5309fa0302aSejakowatz ssize_t flatSize = msg.FlattenedSize();
531*bef39d09SClemens Zeidler char* buf = new char[flatSize];
5329fa0302aSejakowatz CPPUNIT_ASSERT(buf);
5339fa0302aSejakowatz
5349fa0302aSejakowatz CPPUNIT_ASSERT(msg.Flatten(buf, flatSize) == B_OK);
5359fa0302aSejakowatz
5369fa0302aSejakowatz BMessage msg2;
5379fa0302aSejakowatz Type out = InitPolicy::Zero();
5389fa0302aSejakowatz CPPUNIT_ASSERT(msg2.Unflatten(buf) == B_OK);
5399fa0302aSejakowatz CPPUNIT_ASSERT(FuncPolicy::ShortFind(msg, "item", &out) == B_OK);
5409fa0302aSejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(in, out));
5419fa0302aSejakowatz
5429fa0302aSejakowatz delete[] buf;
5439fa0302aSejakowatz }
5449fa0302aSejakowatz //------------------------------------------------------------------------------
5459fa0302aSejakowatz template
5469fa0302aSejakowatz <
5479fa0302aSejakowatz class Type,
5489fa0302aSejakowatz type_code TypeCode,
5499fa0302aSejakowatz class FuncPolicy,
5509fa0302aSejakowatz class InitPolicy,
5519fa0302aSejakowatz class AssertPolicy,
5529fa0302aSejakowatz class ComparePolicy
5539fa0302aSejakowatz >
5549fa0302aSejakowatz void
5559fa0302aSejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>::
MessageItemTest12()5569fa0302aSejakowatz MessageItemTest12()
5579fa0302aSejakowatz {
5589fa0302aSejakowatz BMessage msg;
5599fa0302aSejakowatz ArrayType in = InitPolicy::Array();
5609fa0302aSejakowatz
5619fa0302aSejakowatz for (uint32 ii = 0; ii < InitPolicy::Size(in); ++ii)
5629fa0302aSejakowatz {
5639fa0302aSejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in[ii]) == B_OK);
5649fa0302aSejakowatz }
5659fa0302aSejakowatz
5669fa0302aSejakowatz ssize_t flatSize = msg.FlattenedSize();
567*bef39d09SClemens Zeidler char* buf = new char[flatSize];
5689fa0302aSejakowatz CPPUNIT_ASSERT(buf);
5699fa0302aSejakowatz
5709fa0302aSejakowatz CPPUNIT_ASSERT(msg.Flatten(buf, flatSize) == B_OK);
5719fa0302aSejakowatz
5729fa0302aSejakowatz BMessage msg2;
5739fa0302aSejakowatz Type out = InitPolicy::Zero();
574*bef39d09SClemens Zeidler Type* pout;
5759fa0302aSejakowatz ssize_t size;
5769fa0302aSejakowatz CPPUNIT_ASSERT(msg2.Unflatten(buf) == B_OK);
5779fa0302aSejakowatz
5789fa0302aSejakowatz for (uint32 i = 0; i < InitPolicy::Size(in); ++i)
5799fa0302aSejakowatz {
5809fa0302aSejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", i));
5819fa0302aSejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", i),
5829fa0302aSejakowatz in[i]));
5839fa0302aSejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", i, &out) == B_OK);
5849fa0302aSejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in[i]));
5859fa0302aSejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, i,
5869fa0302aSejakowatz (const void**)&pout, &size) == B_OK);
5879fa0302aSejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in[i]));
5889fa0302aSejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout)));
5899fa0302aSejakowatz }
5909fa0302aSejakowatz
5919fa0302aSejakowatz delete[] buf;
5929fa0302aSejakowatz }
5939fa0302aSejakowatz //------------------------------------------------------------------------------
5949fa0302aSejakowatz template
5959fa0302aSejakowatz <
5969fa0302aSejakowatz class Type,
5979fa0302aSejakowatz type_code TypeCode,
5989fa0302aSejakowatz class FuncPolicy,
5999fa0302aSejakowatz class InitPolicy,
6009fa0302aSejakowatz class AssertPolicy,
6019fa0302aSejakowatz class ComparePolicy
6029fa0302aSejakowatz >
603be45e998Sejakowatz TestSuite*
604e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>::
Suite()605be45e998Sejakowatz Suite()
606be45e998Sejakowatz {
607be45e998Sejakowatz TestSuite* suite = new TestSuite("BMessage::Add/Find/Replace/HasRect()");
608be45e998Sejakowatz
609be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest1);
610be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest2);
611be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest3);
612be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest4);
613be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest5);
614be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest6);
615be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest7);
616be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest8);
6170cc48ce6Sejakowatz #ifndef TEST_R5
6180cc48ce6Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest9);
6190cc48ce6Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest10);
6200cc48ce6Sejakowatz #endif
6219fa0302aSejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest11);
6229fa0302aSejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest12);
623be45e998Sejakowatz
624be45e998Sejakowatz return suite;
625be45e998Sejakowatz }
626be45e998Sejakowatz //------------------------------------------------------------------------------
627be45e998Sejakowatz
628be45e998Sejakowatz #endif // MESSAGEITEMTEST_H
629be45e998Sejakowatz
630be45e998Sejakowatz /*
631be45e998Sejakowatz * $Log $
632be45e998Sejakowatz *
633be45e998Sejakowatz * $Id $
634be45e998Sejakowatz *
635be45e998Sejakowatz
636be45e998Sejakowatz */
637