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 #ifdef TEST_OBOS 16be45e998Sejakowatz #include <posix/typeinfo> 17be45e998Sejakowatz #else 18be45e998Sejakowatz #include <typeinfo> 19be45e998Sejakowatz #endif 20be45e998Sejakowatz #include <posix/string.h> 21be45e998Sejakowatz 22be45e998Sejakowatz // System Includes ------------------------------------------------------------- 23be45e998Sejakowatz #include <Message.h> 24be45e998Sejakowatz 25be45e998Sejakowatz // Project Includes ------------------------------------------------------------ 26be45e998Sejakowatz 27be45e998Sejakowatz // Local Includes -------------------------------------------------------------- 28be45e998Sejakowatz #include "../common.h" 29be45e998Sejakowatz 30be45e998Sejakowatz // Local Defines --------------------------------------------------------------- 31e5b24a58Sejakowatz #define TEMPLATE_TEST_PARAMS <Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy> 32be45e998Sejakowatz #define ADD_TEMPLATE_TEST(classbeingtested, suitename, classname, funcname) \ 33be45e998Sejakowatz (suitename)->addTest(new TestCaller<classname>(((string(#classbeingtested) + "::" + #funcname + "::" + typeid(Type).name()).c_str() ), \ 34be45e998Sejakowatz &classname::funcname)); 35be45e998Sejakowatz 36be45e998Sejakowatz // Globals --------------------------------------------------------------------- 37be45e998Sejakowatz template 38be45e998Sejakowatz < 39be45e998Sejakowatz class Type, // int32 40be45e998Sejakowatz type_code TypeCode, // B_INT32_TYPE 41be45e998Sejakowatz class FuncPolicy, // status_t Add(BMessage&, const char*, Type&) 42be45e998Sejakowatz // status_t Find(BMessage&, const char*, int32, Type*) 43be45e998Sejakowatz // Type QuickFind(BMessage&, const char*, int32) 44be45e998Sejakowatz // bool Has(BMessage&, const char*, int32) 45be45e998Sejakowatz // status_t Replace(BMessage&, const char*, int32, Type) 46be45e998Sejakowatz class InitPolicy, // Type Zero() 47be45e998Sejakowatz // Type Test1() 48be45e998Sejakowatz // Type Test2() 49e5b24a58Sejakowatz // size_t SizeOf(const Type&) 50e5b24a58Sejakowatz // ArrayType Array() 51e5b24a58Sejakowatz // typedef XXX ArrayType 52e5b24a58Sejakowatz class AssertPolicy, // Type Zero() 53e5b24a58Sejakowatz // Type Invalid() 54e5b24a58Sejakowatz class ComparePolicy // bool Compare(const Type& lhs, const Type& rhs) 55be45e998Sejakowatz > 56be45e998Sejakowatz class TMessageItemTest; 57be45e998Sejakowatz 58be45e998Sejakowatz 59be45e998Sejakowatz //------------------------------------------------------------------------------ 60be45e998Sejakowatz template<class T> 61be45e998Sejakowatz struct ArrayTypeBase 62be45e998Sejakowatz { 63be45e998Sejakowatz typedef vector<T> ArrayType; 64be45e998Sejakowatz typedef typename ArrayType::size_type SizeType; 65be45e998Sejakowatz static SizeType Size(ArrayType& array) { return array.size(); } 66be45e998Sejakowatz }; 67be45e998Sejakowatz //------------------------------------------------------------------------------ 68159d60f9Sejakowatz template<class Type> 69159d60f9Sejakowatz struct TypePolicy 70159d60f9Sejakowatz { 71159d60f9Sejakowatz typedef Type* TypePtr; 72159d60f9Sejakowatz enum { FixedSize = true }; 73159d60f9Sejakowatz inline Type& Dereference(TypePtr p) 74159d60f9Sejakowatz { 75159d60f9Sejakowatz return *p; 76159d60f9Sejakowatz } 77159d60f9Sejakowatz inline TypePtr AddressOf(Type& t) { return &t; } 78159d60f9Sejakowatz }; 79159d60f9Sejakowatz //------------------------------------------------------------------------------ 80be45e998Sejakowatz template 81be45e998Sejakowatz < 82be45e998Sejakowatz typename Type, 83be45e998Sejakowatz status_t (BMessage::*AddFunc)(const char*, Type), 84be45e998Sejakowatz status_t (BMessage::*FindFunc)(const char*, int32, Type*) const, 852605a4f5Sejakowatz status_t (BMessage::*ShortFindFunc)(const char*, Type*) const, 86be45e998Sejakowatz Type (BMessage::*QuickFindFunc)(const char*, int32) const, 87be45e998Sejakowatz bool (BMessage::*HasFunc)(const char*, int32) const, 88e5b24a58Sejakowatz status_t (BMessage::*ReplaceFunc)(const char*, int32, Type), 89e5b24a58Sejakowatz status_t (BMessage::*AddDataFunc)(const char*, type_code, const void*, 90e5b24a58Sejakowatz ssize_t, bool, int32) = &BMessage::AddData, 91e5b24a58Sejakowatz status_t (BMessage::*FindDataFunc)(const char*, type_code, int32, 92e5b24a58Sejakowatz const void**, ssize_t*) const = &BMessage::FindData 93be45e998Sejakowatz > 94159d60f9Sejakowatz struct TMessageItemFuncPolicy : public TypePolicy<Type> 95be45e998Sejakowatz { 96be45e998Sejakowatz static status_t Add(BMessage& msg, const char* name, Type& val) 97be45e998Sejakowatz { 98be45e998Sejakowatz return (msg.*AddFunc)(name, val); 99be45e998Sejakowatz } 100e5b24a58Sejakowatz static status_t AddData(BMessage& msg, const char* name, type_code type, 101159d60f9Sejakowatz TypePtr val, ssize_t size, bool fixedSize = true) 102e5b24a58Sejakowatz { 103159d60f9Sejakowatz return (msg.*AddDataFunc)(name, type, (const void*)val, size, fixedSize); 104e5b24a58Sejakowatz } 105be45e998Sejakowatz static status_t Find(BMessage& msg, const char* name, int32 index, Type* val) 106be45e998Sejakowatz { 107be45e998Sejakowatz return (msg.*FindFunc)(name, index, val); 108be45e998Sejakowatz } 1092605a4f5Sejakowatz static status_t ShortFind(BMessage& msg, const char* name, Type* val) 1102605a4f5Sejakowatz { 1112605a4f5Sejakowatz return (msg.*ShortFindFunc)(name, val); 1122605a4f5Sejakowatz } 113be45e998Sejakowatz static Type QuickFind(BMessage& msg, const char* name, int32 index) 114be45e998Sejakowatz { 115be45e998Sejakowatz return (msg.*QuickFindFunc)(name, index); 116be45e998Sejakowatz } 117be45e998Sejakowatz static bool Has(BMessage& msg, const char* name, int32 index) 118be45e998Sejakowatz { 119be45e998Sejakowatz return (msg.*HasFunc)(name, index); 120be45e998Sejakowatz } 121e5b24a58Sejakowatz static status_t Replace(BMessage& msg, const char* name, int32 index, Type& val) 122be45e998Sejakowatz { 123be45e998Sejakowatz return (msg.*ReplaceFunc)(name, index, val); 124be45e998Sejakowatz } 125e5b24a58Sejakowatz static status_t FindData(BMessage& msg, const char* name, type_code type, 126e5b24a58Sejakowatz int32 index, const void** data, ssize_t* size) 127e5b24a58Sejakowatz { 128e5b24a58Sejakowatz return (msg.*FindDataFunc)(name, type, index, data, size); 129e5b24a58Sejakowatz } 130e5b24a58Sejakowatz }; 131e5b24a58Sejakowatz //------------------------------------------------------------------------------ 132e5b24a58Sejakowatz template<class T, T zero = T(), T invalid = T()> 133e5b24a58Sejakowatz struct TMessageItemAssertPolicy 134e5b24a58Sejakowatz { 135e5b24a58Sejakowatz inline static T Zero() { return zero; } 136e5b24a58Sejakowatz inline static T Invalid() { return invalid; } 137e5b24a58Sejakowatz inline static bool Size(size_t size, T& t) 138e5b24a58Sejakowatz { return size == sizeof (t); } 139e5b24a58Sejakowatz }; 140e5b24a58Sejakowatz //------------------------------------------------------------------------------ 141e5b24a58Sejakowatz template<class T> 142e5b24a58Sejakowatz struct TMessageItemComparePolicy 143e5b24a58Sejakowatz { 144c5d8f91dSejakowatz inline static bool Compare(const T& lhs, const T& rhs); 145c5d8f91dSejakowatz // { return lhs == rhs; } 146be45e998Sejakowatz }; 147c5d8f91dSejakowatz template<class T> 148c5d8f91dSejakowatz bool 149c5d8f91dSejakowatz TMessageItemComparePolicy<T>::Compare(const T &lhs, const T &rhs) 150c5d8f91dSejakowatz { 151c5d8f91dSejakowatz return lhs == rhs; 152c5d8f91dSejakowatz } 153be45e998Sejakowatz //------------------------------------------------------------------------------ 154be45e998Sejakowatz template 155be45e998Sejakowatz < 156be45e998Sejakowatz class Type, // int32 157be45e998Sejakowatz type_code TypeCode, // B_INT32_TYPE 158be45e998Sejakowatz class FuncPolicy, // status_t Add(BMessage&, const char*, Type&) 159be45e998Sejakowatz // status_t Find(BMessage&, const char*, int32, Type*) 160be45e998Sejakowatz // Type QuickFind(BMessage&, const char*, int32) 161be45e998Sejakowatz // bool Has(BMessage&, const char*, int32) 162be45e998Sejakowatz // status_t Replace(BMessage&, const char*, int32, Type) 163e5b24a58Sejakowatz // status_t FindData(BMessage&, const char*, type_code, int32, const void**, ssize_t*) 164be45e998Sejakowatz class InitPolicy, // Type Zero() 165be45e998Sejakowatz // Type Test1() 166be45e998Sejakowatz // Type Test2() 167e5b24a58Sejakowatz // size_t SizeOf(const Type&) 168be45e998Sejakowatz // ArrayType Array() 169be45e998Sejakowatz // typedef XXX ArrayType 170e5b24a58Sejakowatz class AssertPolicy, // Type Zero() 171be45e998Sejakowatz // Type Invalid() 172e5b24a58Sejakowatz // bool Size(size_t, T&) 173e5b24a58Sejakowatz class ComparePolicy // bool Compare(const Type& lhs, const Type& rhs) 174e5b24a58Sejakowatz = TMessageItemComparePolicy<Type> 175be45e998Sejakowatz > 176159d60f9Sejakowatz class TMessageItemTest : public TestCase, public TypePolicy<Type> 177be45e998Sejakowatz { 178be45e998Sejakowatz public: 179be45e998Sejakowatz TMessageItemTest() {;} 180be45e998Sejakowatz TMessageItemTest(std::string name) : TestCase(name) {;} 181be45e998Sejakowatz 182be45e998Sejakowatz void MessageItemTest1(); 183be45e998Sejakowatz void MessageItemTest2(); 184be45e998Sejakowatz void MessageItemTest3(); 185be45e998Sejakowatz void MessageItemTest4(); 186be45e998Sejakowatz void MessageItemTest5(); 187be45e998Sejakowatz void MessageItemTest6(); 188be45e998Sejakowatz void MessageItemTest7(); 189be45e998Sejakowatz void MessageItemTest8(); 1900cc48ce6Sejakowatz void MessageItemTest9(); 1910cc48ce6Sejakowatz void MessageItemTest10(); 1929fa0302aSejakowatz void MessageItemTest11(); 1939fa0302aSejakowatz void MessageItemTest12(); 194be45e998Sejakowatz 195be45e998Sejakowatz static TestSuite* Suite(); 196be45e998Sejakowatz 197be45e998Sejakowatz typedef typename InitPolicy::ArrayType ArrayType; 198be45e998Sejakowatz }; 199be45e998Sejakowatz 200be45e998Sejakowatz 201be45e998Sejakowatz //------------------------------------------------------------------------------ 202be45e998Sejakowatz template 203be45e998Sejakowatz < 204be45e998Sejakowatz class Type, 205be45e998Sejakowatz type_code TypeCode, 206be45e998Sejakowatz class FuncPolicy, 207be45e998Sejakowatz class InitPolicy, 208e5b24a58Sejakowatz class AssertPolicy, 209e5b24a58Sejakowatz class ComparePolicy 210be45e998Sejakowatz > 211be45e998Sejakowatz void 212e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 213be45e998Sejakowatz MessageItemTest1() 214be45e998Sejakowatz { 215be45e998Sejakowatz BMessage msg; 216be45e998Sejakowatz Type out = InitPolicy::Zero(); 2172605a4f5Sejakowatz CPPUNIT_ASSERT(FuncPolicy::ShortFind(msg, "item", &out) == B_NAME_NOT_FOUND); 218be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_NAME_NOT_FOUND); 219e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, AssertPolicy::Invalid())); 220e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), 221e5b24a58Sejakowatz AssertPolicy::Invalid())); 222be45e998Sejakowatz CPPUNIT_ASSERT(!FuncPolicy::Has(msg, "item", 0)); 223be45e998Sejakowatz const void* ptr = &out; 224be45e998Sejakowatz ssize_t size; 225e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0, &ptr, &size) == 226be45e998Sejakowatz B_NAME_NOT_FOUND); 227be45e998Sejakowatz CPPUNIT_ASSERT(ptr == NULL); 228be45e998Sejakowatz } 229be45e998Sejakowatz //------------------------------------------------------------------------------ 230be45e998Sejakowatz template 231be45e998Sejakowatz < 232be45e998Sejakowatz class Type, 233be45e998Sejakowatz type_code TypeCode, 234be45e998Sejakowatz class FuncPolicy, 235be45e998Sejakowatz class InitPolicy, 236e5b24a58Sejakowatz class AssertPolicy, 237e5b24a58Sejakowatz class ComparePolicy 238be45e998Sejakowatz > 239be45e998Sejakowatz void 240e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 241be45e998Sejakowatz MessageItemTest2() 2420cc48ce6Sejakowatz { 243be45e998Sejakowatz BMessage msg; 244be45e998Sejakowatz Type in = InitPolicy::Test1(); 245be45e998Sejakowatz Type out = InitPolicy::Zero(); 246be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK); 247be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0)); 248e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), in)); 2492605a4f5Sejakowatz CPPUNIT_ASSERT(FuncPolicy::ShortFind(msg, "item", &out) == B_OK); 250be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK); 251e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in)); 252159d60f9Sejakowatz TypePtr pout = NULL; 253be45e998Sejakowatz ssize_t size; 254e5b24a58Sejakowatz status_t err = FuncPolicy::FindData(msg, "item", TypeCode, 0, 255e5b24a58Sejakowatz (const void**)&pout, &size); 256be45e998Sejakowatz CPPUNIT_ASSERT(err == B_OK); 257159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in)); 258159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 259be45e998Sejakowatz } 260be45e998Sejakowatz //------------------------------------------------------------------------------ 261be45e998Sejakowatz template 262be45e998Sejakowatz < 263be45e998Sejakowatz class Type, 264be45e998Sejakowatz type_code TypeCode, 265be45e998Sejakowatz class FuncPolicy, 266be45e998Sejakowatz class InitPolicy, 267e5b24a58Sejakowatz class AssertPolicy, 268e5b24a58Sejakowatz class ComparePolicy 269be45e998Sejakowatz > 270be45e998Sejakowatz void 271e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 272be45e998Sejakowatz MessageItemTest3() 273be45e998Sejakowatz { 274be45e998Sejakowatz BMessage msg; 275be45e998Sejakowatz Type in = InitPolicy::Test1(); 276be45e998Sejakowatz Type in2 = InitPolicy::Test2(); 277be45e998Sejakowatz Type out = InitPolicy::Zero(); 278be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK); 279be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Replace(msg, "item", 0, in2) == B_OK); 280be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0)); 281e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), in2)); 2822605a4f5Sejakowatz CPPUNIT_ASSERT(FuncPolicy::ShortFind(msg, "item", &out) == B_OK); 283be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK); 284e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in2)); 285be45e998Sejakowatz out = InitPolicy::Zero(); 286159d60f9Sejakowatz TypePtr pout; 287be45e998Sejakowatz ssize_t size; 288e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0, 289e5b24a58Sejakowatz (const void**)&pout, &size) == B_OK); 290159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in2)); 291159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 292be45e998Sejakowatz } 293be45e998Sejakowatz //------------------------------------------------------------------------------ 294be45e998Sejakowatz template 295be45e998Sejakowatz < 296be45e998Sejakowatz class Type, 297be45e998Sejakowatz type_code TypeCode, 298be45e998Sejakowatz class FuncPolicy, 299be45e998Sejakowatz class InitPolicy, 300e5b24a58Sejakowatz class AssertPolicy, 301e5b24a58Sejakowatz class ComparePolicy 302be45e998Sejakowatz > 303be45e998Sejakowatz void 304e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 305be45e998Sejakowatz MessageItemTest4() 306be45e998Sejakowatz { 307be45e998Sejakowatz BMessage msg; 308be45e998Sejakowatz Type out = InitPolicy::Zero(); 309be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 1, &out) == B_NAME_NOT_FOUND); 310e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, AssertPolicy::Invalid())); 311e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 1), 312e5b24a58Sejakowatz AssertPolicy::Invalid())); 313be45e998Sejakowatz CPPUNIT_ASSERT(!FuncPolicy::Has(msg, "item", 1)); 314be45e998Sejakowatz const void* ptr = &out; 315be45e998Sejakowatz ssize_t size; 316e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 1, &ptr, &size) == 317be45e998Sejakowatz B_NAME_NOT_FOUND); 318be45e998Sejakowatz CPPUNIT_ASSERT(ptr == NULL); 319be45e998Sejakowatz } 320be45e998Sejakowatz //------------------------------------------------------------------------------ 321be45e998Sejakowatz template 322be45e998Sejakowatz < 323be45e998Sejakowatz class Type, 324be45e998Sejakowatz type_code TypeCode, 325be45e998Sejakowatz class FuncPolicy, 326be45e998Sejakowatz class InitPolicy, 327e5b24a58Sejakowatz class AssertPolicy, 328e5b24a58Sejakowatz class ComparePolicy 329be45e998Sejakowatz > 330be45e998Sejakowatz void 331e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 332be45e998Sejakowatz MessageItemTest5() 333be45e998Sejakowatz { 334be45e998Sejakowatz BMessage msg; 335be45e998Sejakowatz ArrayType in = InitPolicy::Array(); 336be45e998Sejakowatz Type out = InitPolicy::Zero(); 337159d60f9Sejakowatz TypePtr pout; 338be45e998Sejakowatz ssize_t size; 339be45e998Sejakowatz 3409fa0302aSejakowatz for (uint32 ii = 0; ii < InitPolicy::Size(in); ++ii) 341be45e998Sejakowatz { 3429fa0302aSejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in[ii]) == B_OK); 343be45e998Sejakowatz } 344be45e998Sejakowatz 345169ae266Sejakowatz for (uint32 i = 0; i < InitPolicy::Size(in); ++i) 346be45e998Sejakowatz { 347be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", i)); 348e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", i), 349e5b24a58Sejakowatz in[i])); 350be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", i, &out) == B_OK); 351e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in[i])); 352e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, i, 353be45e998Sejakowatz (const void**)&pout, &size) == B_OK); 354159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in[i])); 355159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 356be45e998Sejakowatz } 357be45e998Sejakowatz } 358be45e998Sejakowatz //------------------------------------------------------------------------------ 359be45e998Sejakowatz template 360be45e998Sejakowatz < 361be45e998Sejakowatz class Type, 362be45e998Sejakowatz type_code TypeCode, 363be45e998Sejakowatz class FuncPolicy, 364be45e998Sejakowatz class InitPolicy, 365e5b24a58Sejakowatz class AssertPolicy, 366e5b24a58Sejakowatz class ComparePolicy 367be45e998Sejakowatz > 368be45e998Sejakowatz void 369e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 370be45e998Sejakowatz MessageItemTest6() 371be45e998Sejakowatz { 372be45e998Sejakowatz BMessage msg; 373be45e998Sejakowatz ArrayType in = InitPolicy::Array(); 374be45e998Sejakowatz Type in2 = InitPolicy::Test2(); 375be45e998Sejakowatz Type out = InitPolicy::Zero(); 376be45e998Sejakowatz const int rIndex = 2; 377be45e998Sejakowatz 378169ae266Sejakowatz for (uint32 i = 0; i < InitPolicy::Size(in); ++i) 379be45e998Sejakowatz { 380be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in[i]) == B_OK); 381be45e998Sejakowatz } 382be45e998Sejakowatz 383be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Replace(msg, "item", rIndex, in2) == B_OK); 384be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", rIndex)); 385e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", rIndex), 386e5b24a58Sejakowatz in2)); 387be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", rIndex, &out) == B_OK); 388e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in2)); 389be45e998Sejakowatz out = InitPolicy::Zero(); 390159d60f9Sejakowatz TypePtr pout; 391be45e998Sejakowatz ssize_t size; 392e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, rIndex, 393be45e998Sejakowatz (const void**)&pout, &size) == B_OK); 394159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in2)); 395159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 396be45e998Sejakowatz } 397be45e998Sejakowatz //------------------------------------------------------------------------------ 398be45e998Sejakowatz template 399be45e998Sejakowatz < 400be45e998Sejakowatz class Type, 401be45e998Sejakowatz type_code TypeCode, 402be45e998Sejakowatz class FuncPolicy, 403be45e998Sejakowatz class InitPolicy, 404e5b24a58Sejakowatz class AssertPolicy, 405e5b24a58Sejakowatz class ComparePolicy 406be45e998Sejakowatz > 407be45e998Sejakowatz void 408e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 409be45e998Sejakowatz MessageItemTest7() 410be45e998Sejakowatz { 411be45e998Sejakowatz BMessage msg; 412be45e998Sejakowatz Type in = InitPolicy::Test1(); 413be45e998Sejakowatz Type out = InitPolicy::Zero(); 414159d60f9Sejakowatz CPPUNIT_ASSERT(FuncPolicy::AddData(msg, "item", TypeCode, AddressOf(in), 415159d60f9Sejakowatz InitPolicy::SizeOf(in), 416159d60f9Sejakowatz TypePolicy<Type>::FixedSize) == B_OK); 417be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0)); 418e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), 419e5b24a58Sejakowatz in)); 4202605a4f5Sejakowatz CPPUNIT_ASSERT(FuncPolicy::ShortFind(msg, "item", &out) == B_OK); 421be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK); 422e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in)); 423159d60f9Sejakowatz TypePtr pout = NULL; 424be45e998Sejakowatz ssize_t size; 425e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0, 426e5b24a58Sejakowatz (const void**)&pout, &size) == B_OK); 427159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in)); 428159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 429be45e998Sejakowatz } 430be45e998Sejakowatz //------------------------------------------------------------------------------ 431159d60f9Sejakowatz #include <stdio.h> 432be45e998Sejakowatz template 433be45e998Sejakowatz < 434be45e998Sejakowatz class Type, 435be45e998Sejakowatz type_code TypeCode, 436be45e998Sejakowatz class FuncPolicy, 437be45e998Sejakowatz class InitPolicy, 438e5b24a58Sejakowatz class AssertPolicy, 439e5b24a58Sejakowatz class ComparePolicy 440be45e998Sejakowatz > 441be45e998Sejakowatz void 442e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 443be45e998Sejakowatz MessageItemTest8() 444be45e998Sejakowatz { 445be45e998Sejakowatz BMessage msg; 446be45e998Sejakowatz ArrayType in = InitPolicy::Array(); 447be45e998Sejakowatz Type out = InitPolicy::Zero(); 448159d60f9Sejakowatz TypePtr pout; 449be45e998Sejakowatz ssize_t size; 450169ae266Sejakowatz for (uint32 i = 0; i < InitPolicy::Size(in); ++i) 451be45e998Sejakowatz { 452e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::AddData(msg, "item", TypeCode, 453159d60f9Sejakowatz AddressOf(in[i]), InitPolicy::SizeOf(in[i]), 454159d60f9Sejakowatz TypePolicy<Type>::FixedSize) == B_OK); 455be45e998Sejakowatz } 456be45e998Sejakowatz 457169ae266Sejakowatz for (uint32 i = 0; i < InitPolicy::Size(in); ++i) 458be45e998Sejakowatz { 459be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", i)); 460e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", i), 461e5b24a58Sejakowatz in[i])); 462be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", i, &out) == B_OK); 463e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in[i])); 464e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, i, 465be45e998Sejakowatz (const void**)&pout, &size) == B_OK); 466159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in[i])); 467159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 468be45e998Sejakowatz } 469be45e998Sejakowatz } 470be45e998Sejakowatz //------------------------------------------------------------------------------ 471be45e998Sejakowatz template 472be45e998Sejakowatz < 473be45e998Sejakowatz class Type, 474be45e998Sejakowatz type_code TypeCode, 475be45e998Sejakowatz class FuncPolicy, 476be45e998Sejakowatz class InitPolicy, 477e5b24a58Sejakowatz class AssertPolicy, 478e5b24a58Sejakowatz class ComparePolicy 479be45e998Sejakowatz > 4800cc48ce6Sejakowatz void 4810cc48ce6Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 4820cc48ce6Sejakowatz MessageItemTest9() 4830cc48ce6Sejakowatz { 4840cc48ce6Sejakowatz BMessage msg; 4850cc48ce6Sejakowatz Type in = InitPolicy::Test1(); 4860cc48ce6Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, NULL, in) == B_BAD_VALUE); 4870cc48ce6Sejakowatz } 4880cc48ce6Sejakowatz //------------------------------------------------------------------------------ 4890cc48ce6Sejakowatz template 4900cc48ce6Sejakowatz < 4910cc48ce6Sejakowatz class Type, 4920cc48ce6Sejakowatz type_code TypeCode, 4930cc48ce6Sejakowatz class FuncPolicy, 4940cc48ce6Sejakowatz class InitPolicy, 4950cc48ce6Sejakowatz class AssertPolicy, 4960cc48ce6Sejakowatz class ComparePolicy 4970cc48ce6Sejakowatz > 4980cc48ce6Sejakowatz void 4990cc48ce6Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 5000cc48ce6Sejakowatz MessageItemTest10() 5010cc48ce6Sejakowatz { 5020cc48ce6Sejakowatz BMessage msg; 5030cc48ce6Sejakowatz Type in = InitPolicy::Test1(); 5040cc48ce6Sejakowatz Type out = InitPolicy::Zero(); 5050cc48ce6Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK); 5060cc48ce6Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, NULL, 0) == false); 5070cc48ce6Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, NULL, 0), 5080cc48ce6Sejakowatz AssertPolicy::Invalid())); 5092605a4f5Sejakowatz CPPUNIT_ASSERT(FuncPolicy::ShortFind(msg, NULL, &out) == B_BAD_VALUE); 5100cc48ce6Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, NULL, 0, &out) == B_BAD_VALUE); 5110cc48ce6Sejakowatz TypePtr pout = NULL; 5120cc48ce6Sejakowatz ssize_t size; 5130cc48ce6Sejakowatz status_t err = FuncPolicy::FindData(msg, NULL, TypeCode, 0, 5140cc48ce6Sejakowatz (const void**)&pout, &size); 515*3a7d8dfaSMichael Lotz CPPUNIT_ASSERT(err == B_BAD_VALUE); 5160cc48ce6Sejakowatz } 5170cc48ce6Sejakowatz //------------------------------------------------------------------------------ 5180cc48ce6Sejakowatz template 5190cc48ce6Sejakowatz < 5200cc48ce6Sejakowatz class Type, 5210cc48ce6Sejakowatz type_code TypeCode, 5220cc48ce6Sejakowatz class FuncPolicy, 5230cc48ce6Sejakowatz class InitPolicy, 5240cc48ce6Sejakowatz class AssertPolicy, 5250cc48ce6Sejakowatz class ComparePolicy 5260cc48ce6Sejakowatz > 5279fa0302aSejakowatz void 5289fa0302aSejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 5299fa0302aSejakowatz MessageItemTest11() 5309fa0302aSejakowatz { 5319fa0302aSejakowatz BMessage msg; 5329fa0302aSejakowatz Type in = InitPolicy::Test1(); 5339fa0302aSejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK); 5349fa0302aSejakowatz 5359fa0302aSejakowatz ssize_t flatSize = msg.FlattenedSize(); 5369fa0302aSejakowatz char* buf = new(nothrow) char[flatSize]; 5379fa0302aSejakowatz CPPUNIT_ASSERT(buf); 5389fa0302aSejakowatz 5399fa0302aSejakowatz CPPUNIT_ASSERT(msg.Flatten(buf, flatSize) == B_OK); 5409fa0302aSejakowatz 5419fa0302aSejakowatz BMessage msg2; 5429fa0302aSejakowatz Type out = InitPolicy::Zero(); 5439fa0302aSejakowatz CPPUNIT_ASSERT(msg2.Unflatten(buf) == B_OK); 5449fa0302aSejakowatz CPPUNIT_ASSERT(FuncPolicy::ShortFind(msg, "item", &out) == B_OK); 5459fa0302aSejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(in, out)); 5469fa0302aSejakowatz 5479fa0302aSejakowatz delete[] buf; 5489fa0302aSejakowatz } 5499fa0302aSejakowatz //------------------------------------------------------------------------------ 5509fa0302aSejakowatz template 5519fa0302aSejakowatz < 5529fa0302aSejakowatz class Type, 5539fa0302aSejakowatz type_code TypeCode, 5549fa0302aSejakowatz class FuncPolicy, 5559fa0302aSejakowatz class InitPolicy, 5569fa0302aSejakowatz class AssertPolicy, 5579fa0302aSejakowatz class ComparePolicy 5589fa0302aSejakowatz > 5599fa0302aSejakowatz void 5609fa0302aSejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 5619fa0302aSejakowatz MessageItemTest12() 5629fa0302aSejakowatz { 5639fa0302aSejakowatz BMessage msg; 5649fa0302aSejakowatz ArrayType in = InitPolicy::Array(); 5659fa0302aSejakowatz 5669fa0302aSejakowatz for (uint32 ii = 0; ii < InitPolicy::Size(in); ++ii) 5679fa0302aSejakowatz { 5689fa0302aSejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in[ii]) == B_OK); 5699fa0302aSejakowatz } 5709fa0302aSejakowatz 5719fa0302aSejakowatz ssize_t flatSize = msg.FlattenedSize(); 5729fa0302aSejakowatz char* buf = new(nothrow) char[flatSize]; 5739fa0302aSejakowatz CPPUNIT_ASSERT(buf); 5749fa0302aSejakowatz 5759fa0302aSejakowatz CPPUNIT_ASSERT(msg.Flatten(buf, flatSize) == B_OK); 5769fa0302aSejakowatz 5779fa0302aSejakowatz BMessage msg2; 5789fa0302aSejakowatz Type out = InitPolicy::Zero(); 5799fa0302aSejakowatz TypePtr pout; 5809fa0302aSejakowatz ssize_t size; 5819fa0302aSejakowatz CPPUNIT_ASSERT(msg2.Unflatten(buf) == B_OK); 5829fa0302aSejakowatz 5839fa0302aSejakowatz for (uint32 i = 0; i < InitPolicy::Size(in); ++i) 5849fa0302aSejakowatz { 5859fa0302aSejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", i)); 5869fa0302aSejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", i), 5879fa0302aSejakowatz in[i])); 5889fa0302aSejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", i, &out) == B_OK); 5899fa0302aSejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in[i])); 5909fa0302aSejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, i, 5919fa0302aSejakowatz (const void**)&pout, &size) == B_OK); 5929fa0302aSejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in[i])); 5939fa0302aSejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 5949fa0302aSejakowatz } 5959fa0302aSejakowatz 5969fa0302aSejakowatz delete[] buf; 5979fa0302aSejakowatz } 5989fa0302aSejakowatz //------------------------------------------------------------------------------ 5999fa0302aSejakowatz template 6009fa0302aSejakowatz < 6019fa0302aSejakowatz class Type, 6029fa0302aSejakowatz type_code TypeCode, 6039fa0302aSejakowatz class FuncPolicy, 6049fa0302aSejakowatz class InitPolicy, 6059fa0302aSejakowatz class AssertPolicy, 6069fa0302aSejakowatz class ComparePolicy 6079fa0302aSejakowatz > 608be45e998Sejakowatz TestSuite* 609e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 610be45e998Sejakowatz Suite() 611be45e998Sejakowatz { 612be45e998Sejakowatz TestSuite* suite = new TestSuite("BMessage::Add/Find/Replace/HasRect()"); 613be45e998Sejakowatz 614be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest1); 615be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest2); 616be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest3); 617be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest4); 618be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest5); 619be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest6); 620be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest7); 621be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest8); 6220cc48ce6Sejakowatz #ifndef TEST_R5 6230cc48ce6Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest9); 6240cc48ce6Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest10); 6250cc48ce6Sejakowatz #endif 6269fa0302aSejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest11); 6279fa0302aSejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest12); 628be45e998Sejakowatz 629be45e998Sejakowatz return suite; 630be45e998Sejakowatz } 631be45e998Sejakowatz //------------------------------------------------------------------------------ 632be45e998Sejakowatz 633be45e998Sejakowatz #endif // MESSAGEITEMTEST_H 634be45e998Sejakowatz 635be45e998Sejakowatz /* 636be45e998Sejakowatz * $Log $ 637be45e998Sejakowatz * 638be45e998Sejakowatz * $Id $ 639be45e998Sejakowatz * 640be45e998Sejakowatz 641be45e998Sejakowatz */ 642