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 //------------------------------------------------------------------------------ 68*159d60f9Sejakowatz template<class Type> 69*159d60f9Sejakowatz struct TypePolicy 70*159d60f9Sejakowatz { 71*159d60f9Sejakowatz typedef Type* TypePtr; 72*159d60f9Sejakowatz enum { FixedSize = true }; 73*159d60f9Sejakowatz inline Type& Dereference(TypePtr p) 74*159d60f9Sejakowatz { 75*159d60f9Sejakowatz return *p; 76*159d60f9Sejakowatz } 77*159d60f9Sejakowatz inline TypePtr AddressOf(Type& t) { return &t; } 78*159d60f9Sejakowatz }; 79*159d60f9Sejakowatz //------------------------------------------------------------------------------ 80be45e998Sejakowatz template 81be45e998Sejakowatz < 82be45e998Sejakowatz typename Type, 83be45e998Sejakowatz status_t (BMessage::*AddFunc)(const char*, Type), 84be45e998Sejakowatz status_t (BMessage::*FindFunc)(const char*, int32, Type*) const, 85be45e998Sejakowatz Type (BMessage::*QuickFindFunc)(const char*, int32) const, 86be45e998Sejakowatz bool (BMessage::*HasFunc)(const char*, int32) const, 87e5b24a58Sejakowatz status_t (BMessage::*ReplaceFunc)(const char*, int32, Type), 88e5b24a58Sejakowatz status_t (BMessage::*AddDataFunc)(const char*, type_code, const void*, 89e5b24a58Sejakowatz ssize_t, bool, int32) = &BMessage::AddData, 90e5b24a58Sejakowatz status_t (BMessage::*FindDataFunc)(const char*, type_code, int32, 91e5b24a58Sejakowatz const void**, ssize_t*) const = &BMessage::FindData 92be45e998Sejakowatz > 93*159d60f9Sejakowatz struct TMessageItemFuncPolicy : public TypePolicy<Type> 94be45e998Sejakowatz { 95be45e998Sejakowatz static status_t Add(BMessage& msg, const char* name, Type& val) 96be45e998Sejakowatz { 97be45e998Sejakowatz return (msg.*AddFunc)(name, val); 98be45e998Sejakowatz } 99e5b24a58Sejakowatz static status_t AddData(BMessage& msg, const char* name, type_code type, 100*159d60f9Sejakowatz TypePtr val, ssize_t size, bool fixedSize = true) 101e5b24a58Sejakowatz { 102*159d60f9Sejakowatz return (msg.*AddDataFunc)(name, type, (const void*)val, size, fixedSize); 103e5b24a58Sejakowatz } 104be45e998Sejakowatz static status_t Find(BMessage& msg, const char* name, int32 index, Type* val) 105be45e998Sejakowatz { 106be45e998Sejakowatz return (msg.*FindFunc)(name, index, val); 107be45e998Sejakowatz } 108be45e998Sejakowatz static Type QuickFind(BMessage& msg, const char* name, int32 index) 109be45e998Sejakowatz { 110be45e998Sejakowatz return (msg.*QuickFindFunc)(name, index); 111be45e998Sejakowatz } 112be45e998Sejakowatz static bool Has(BMessage& msg, const char* name, int32 index) 113be45e998Sejakowatz { 114be45e998Sejakowatz return (msg.*HasFunc)(name, index); 115be45e998Sejakowatz } 116e5b24a58Sejakowatz static status_t Replace(BMessage& msg, const char* name, int32 index, Type& val) 117be45e998Sejakowatz { 118be45e998Sejakowatz return (msg.*ReplaceFunc)(name, index, val); 119be45e998Sejakowatz } 120e5b24a58Sejakowatz 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 { 130e5b24a58Sejakowatz inline static T Zero() { return zero; } 131e5b24a58Sejakowatz inline static T Invalid() { return invalid; } 132e5b24a58Sejakowatz inline static bool Size(size_t size, T& t) 133e5b24a58Sejakowatz { return size == sizeof (t); } 134e5b24a58Sejakowatz }; 135e5b24a58Sejakowatz //------------------------------------------------------------------------------ 136e5b24a58Sejakowatz template<class T> 137e5b24a58Sejakowatz struct TMessageItemComparePolicy 138e5b24a58Sejakowatz { 139e5b24a58Sejakowatz inline static bool Compare(const T& lhs, const T& rhs) 140e5b24a58Sejakowatz { return lhs == rhs; } 141be45e998Sejakowatz }; 142be45e998Sejakowatz //------------------------------------------------------------------------------ 143be45e998Sejakowatz template 144be45e998Sejakowatz < 145be45e998Sejakowatz class Type, // int32 146be45e998Sejakowatz type_code TypeCode, // B_INT32_TYPE 147be45e998Sejakowatz class FuncPolicy, // status_t Add(BMessage&, const char*, Type&) 148be45e998Sejakowatz // status_t Find(BMessage&, const char*, int32, Type*) 149be45e998Sejakowatz // Type QuickFind(BMessage&, const char*, int32) 150be45e998Sejakowatz // bool Has(BMessage&, const char*, int32) 151be45e998Sejakowatz // status_t Replace(BMessage&, const char*, int32, Type) 152e5b24a58Sejakowatz // status_t FindData(BMessage&, const char*, type_code, int32, const void**, ssize_t*) 153be45e998Sejakowatz class InitPolicy, // Type Zero() 154be45e998Sejakowatz // Type Test1() 155be45e998Sejakowatz // Type Test2() 156e5b24a58Sejakowatz // size_t SizeOf(const Type&) 157be45e998Sejakowatz // ArrayType Array() 158be45e998Sejakowatz // typedef XXX ArrayType 159e5b24a58Sejakowatz class AssertPolicy, // Type Zero() 160be45e998Sejakowatz // Type Invalid() 161e5b24a58Sejakowatz // bool Size(size_t, T&) 162e5b24a58Sejakowatz class ComparePolicy // bool Compare(const Type& lhs, const Type& rhs) 163e5b24a58Sejakowatz = TMessageItemComparePolicy<Type> 164be45e998Sejakowatz > 165*159d60f9Sejakowatz class TMessageItemTest : public TestCase, public TypePolicy<Type> 166be45e998Sejakowatz { 167be45e998Sejakowatz public: 168be45e998Sejakowatz TMessageItemTest() {;} 169be45e998Sejakowatz TMessageItemTest(std::string name) : TestCase(name) {;} 170be45e998Sejakowatz 171be45e998Sejakowatz void MessageItemTest1(); 172be45e998Sejakowatz void MessageItemTest2(); 173be45e998Sejakowatz void MessageItemTest3(); 174be45e998Sejakowatz void MessageItemTest4(); 175be45e998Sejakowatz void MessageItemTest5(); 176be45e998Sejakowatz void MessageItemTest6(); 177be45e998Sejakowatz void MessageItemTest7(); 178be45e998Sejakowatz void MessageItemTest8(); 179be45e998Sejakowatz 180be45e998Sejakowatz static TestSuite* Suite(); 181be45e998Sejakowatz 182be45e998Sejakowatz typedef typename InitPolicy::ArrayType ArrayType; 183be45e998Sejakowatz }; 184be45e998Sejakowatz 185be45e998Sejakowatz 186be45e998Sejakowatz //------------------------------------------------------------------------------ 187be45e998Sejakowatz template 188be45e998Sejakowatz < 189be45e998Sejakowatz class Type, 190be45e998Sejakowatz type_code TypeCode, 191be45e998Sejakowatz class FuncPolicy, 192be45e998Sejakowatz class InitPolicy, 193e5b24a58Sejakowatz class AssertPolicy, 194e5b24a58Sejakowatz class ComparePolicy 195be45e998Sejakowatz > 196be45e998Sejakowatz void 197e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 198be45e998Sejakowatz MessageItemTest1() 199be45e998Sejakowatz { 200be45e998Sejakowatz BMessage msg; 201be45e998Sejakowatz Type out = InitPolicy::Zero(); 202be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_NAME_NOT_FOUND); 203e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, AssertPolicy::Invalid())); 204e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), 205e5b24a58Sejakowatz AssertPolicy::Invalid())); 206be45e998Sejakowatz CPPUNIT_ASSERT(!FuncPolicy::Has(msg, "item", 0)); 207be45e998Sejakowatz const void* ptr = &out; 208be45e998Sejakowatz ssize_t size; 209e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0, &ptr, &size) == 210be45e998Sejakowatz B_NAME_NOT_FOUND); 211be45e998Sejakowatz CPPUNIT_ASSERT(ptr == NULL); 212be45e998Sejakowatz } 213be45e998Sejakowatz //------------------------------------------------------------------------------ 214be45e998Sejakowatz template 215be45e998Sejakowatz < 216be45e998Sejakowatz class Type, 217be45e998Sejakowatz type_code TypeCode, 218be45e998Sejakowatz class FuncPolicy, 219be45e998Sejakowatz class InitPolicy, 220e5b24a58Sejakowatz class AssertPolicy, 221e5b24a58Sejakowatz class ComparePolicy 222be45e998Sejakowatz > 223be45e998Sejakowatz void 224e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 225be45e998Sejakowatz MessageItemTest2() 226be45e998Sejakowatz { 227be45e998Sejakowatz BMessage msg; 228be45e998Sejakowatz Type in = InitPolicy::Test1(); 229be45e998Sejakowatz Type out = InitPolicy::Zero(); 230be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK); 231be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0)); 232e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), in)); 233be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK); 234e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in)); 235*159d60f9Sejakowatz TypePtr pout = NULL; 236be45e998Sejakowatz ssize_t size; 237e5b24a58Sejakowatz status_t err = FuncPolicy::FindData(msg, "item", TypeCode, 0, 238e5b24a58Sejakowatz (const void**)&pout, &size); 239be45e998Sejakowatz CPPUNIT_ASSERT(err == B_OK); 240*159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in)); 241*159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 242be45e998Sejakowatz } 243be45e998Sejakowatz //------------------------------------------------------------------------------ 244be45e998Sejakowatz template 245be45e998Sejakowatz < 246be45e998Sejakowatz class Type, 247be45e998Sejakowatz type_code TypeCode, 248be45e998Sejakowatz class FuncPolicy, 249be45e998Sejakowatz class InitPolicy, 250e5b24a58Sejakowatz class AssertPolicy, 251e5b24a58Sejakowatz class ComparePolicy 252be45e998Sejakowatz > 253be45e998Sejakowatz void 254e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 255be45e998Sejakowatz MessageItemTest3() 256be45e998Sejakowatz { 257be45e998Sejakowatz BMessage msg; 258be45e998Sejakowatz Type in = InitPolicy::Test1(); 259be45e998Sejakowatz Type in2 = InitPolicy::Test2(); 260be45e998Sejakowatz Type out = InitPolicy::Zero(); 261be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK); 262be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Replace(msg, "item", 0, in2) == B_OK); 263be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0)); 264e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), in2)); 265be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK); 266e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in2)); 267be45e998Sejakowatz out = InitPolicy::Zero(); 268*159d60f9Sejakowatz TypePtr pout; 269be45e998Sejakowatz ssize_t size; 270e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0, 271e5b24a58Sejakowatz (const void**)&pout, &size) == B_OK); 272*159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in2)); 273*159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 274be45e998Sejakowatz } 275be45e998Sejakowatz //------------------------------------------------------------------------------ 276be45e998Sejakowatz template 277be45e998Sejakowatz < 278be45e998Sejakowatz class Type, 279be45e998Sejakowatz type_code TypeCode, 280be45e998Sejakowatz class FuncPolicy, 281be45e998Sejakowatz class InitPolicy, 282e5b24a58Sejakowatz class AssertPolicy, 283e5b24a58Sejakowatz class ComparePolicy 284be45e998Sejakowatz > 285be45e998Sejakowatz void 286e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 287be45e998Sejakowatz MessageItemTest4() 288be45e998Sejakowatz { 289be45e998Sejakowatz BMessage msg; 290be45e998Sejakowatz Type out = InitPolicy::Zero(); 291be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 1, &out) == B_NAME_NOT_FOUND); 292e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, AssertPolicy::Invalid())); 293e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 1), 294e5b24a58Sejakowatz AssertPolicy::Invalid())); 295be45e998Sejakowatz CPPUNIT_ASSERT(!FuncPolicy::Has(msg, "item", 1)); 296be45e998Sejakowatz const void* ptr = &out; 297be45e998Sejakowatz ssize_t size; 298e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 1, &ptr, &size) == 299be45e998Sejakowatz B_NAME_NOT_FOUND); 300be45e998Sejakowatz CPPUNIT_ASSERT(ptr == NULL); 301be45e998Sejakowatz } 302be45e998Sejakowatz //------------------------------------------------------------------------------ 303be45e998Sejakowatz template 304be45e998Sejakowatz < 305be45e998Sejakowatz class Type, 306be45e998Sejakowatz type_code TypeCode, 307be45e998Sejakowatz class FuncPolicy, 308be45e998Sejakowatz class InitPolicy, 309e5b24a58Sejakowatz class AssertPolicy, 310e5b24a58Sejakowatz class ComparePolicy 311be45e998Sejakowatz > 312be45e998Sejakowatz void 313e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 314be45e998Sejakowatz MessageItemTest5() 315be45e998Sejakowatz { 316be45e998Sejakowatz BMessage msg; 317be45e998Sejakowatz ArrayType in = InitPolicy::Array(); 318be45e998Sejakowatz Type out = InitPolicy::Zero(); 319*159d60f9Sejakowatz TypePtr pout; 320be45e998Sejakowatz ssize_t size; 321be45e998Sejakowatz 322be45e998Sejakowatz for (int32 i = 0; i < InitPolicy::Size(in); ++i) 323be45e998Sejakowatz { 324be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in[i]) == B_OK); 325be45e998Sejakowatz } 326be45e998Sejakowatz 327be45e998Sejakowatz for (int32 i = 0; i < InitPolicy::Size(in); ++i) 328be45e998Sejakowatz { 329be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", i)); 330e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", i), 331e5b24a58Sejakowatz in[i])); 332be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", i, &out) == B_OK); 333e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in[i])); 334e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, i, 335be45e998Sejakowatz (const void**)&pout, &size) == B_OK); 336*159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in[i])); 337*159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 338be45e998Sejakowatz } 339be45e998Sejakowatz } 340be45e998Sejakowatz //------------------------------------------------------------------------------ 341be45e998Sejakowatz template 342be45e998Sejakowatz < 343be45e998Sejakowatz class Type, 344be45e998Sejakowatz type_code TypeCode, 345be45e998Sejakowatz class FuncPolicy, 346be45e998Sejakowatz class InitPolicy, 347e5b24a58Sejakowatz class AssertPolicy, 348e5b24a58Sejakowatz class ComparePolicy 349be45e998Sejakowatz > 350be45e998Sejakowatz void 351e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 352be45e998Sejakowatz MessageItemTest6() 353be45e998Sejakowatz { 354be45e998Sejakowatz BMessage msg; 355be45e998Sejakowatz ArrayType in = InitPolicy::Array(); 356be45e998Sejakowatz Type in2 = InitPolicy::Test2(); 357be45e998Sejakowatz Type out = InitPolicy::Zero(); 358be45e998Sejakowatz const int rIndex = 2; 359be45e998Sejakowatz 360be45e998Sejakowatz for (int32 i = 0; i < InitPolicy::Size(in); ++i) 361be45e998Sejakowatz { 362be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in[i]) == B_OK); 363be45e998Sejakowatz } 364be45e998Sejakowatz 365be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Replace(msg, "item", rIndex, in2) == B_OK); 366be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", rIndex)); 367e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", rIndex), 368e5b24a58Sejakowatz in2)); 369be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", rIndex, &out) == B_OK); 370e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in2)); 371be45e998Sejakowatz out = InitPolicy::Zero(); 372*159d60f9Sejakowatz TypePtr pout; 373be45e998Sejakowatz ssize_t size; 374e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, rIndex, 375be45e998Sejakowatz (const void**)&pout, &size) == B_OK); 376*159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in2)); 377*159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 378be45e998Sejakowatz } 379be45e998Sejakowatz //------------------------------------------------------------------------------ 380be45e998Sejakowatz template 381be45e998Sejakowatz < 382be45e998Sejakowatz class Type, 383be45e998Sejakowatz type_code TypeCode, 384be45e998Sejakowatz class FuncPolicy, 385be45e998Sejakowatz class InitPolicy, 386e5b24a58Sejakowatz class AssertPolicy, 387e5b24a58Sejakowatz class ComparePolicy 388be45e998Sejakowatz > 389be45e998Sejakowatz void 390e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 391be45e998Sejakowatz MessageItemTest7() 392be45e998Sejakowatz { 393be45e998Sejakowatz BMessage msg; 394be45e998Sejakowatz Type in = InitPolicy::Test1(); 395be45e998Sejakowatz Type out = InitPolicy::Zero(); 396*159d60f9Sejakowatz CPPUNIT_ASSERT(FuncPolicy::AddData(msg, "item", TypeCode, AddressOf(in), 397*159d60f9Sejakowatz InitPolicy::SizeOf(in), 398*159d60f9Sejakowatz TypePolicy<Type>::FixedSize) == B_OK); 399be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0)); 400e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), 401e5b24a58Sejakowatz in)); 402be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK); 403e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in)); 404*159d60f9Sejakowatz TypePtr pout = NULL; 405be45e998Sejakowatz ssize_t size; 406e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0, 407e5b24a58Sejakowatz (const void**)&pout, &size) == B_OK); 408*159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in)); 409*159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 410be45e998Sejakowatz } 411be45e998Sejakowatz //------------------------------------------------------------------------------ 412*159d60f9Sejakowatz #include <stdio.h> 413be45e998Sejakowatz template 414be45e998Sejakowatz < 415be45e998Sejakowatz class Type, 416be45e998Sejakowatz type_code TypeCode, 417be45e998Sejakowatz class FuncPolicy, 418be45e998Sejakowatz class InitPolicy, 419e5b24a58Sejakowatz class AssertPolicy, 420e5b24a58Sejakowatz class ComparePolicy 421be45e998Sejakowatz > 422be45e998Sejakowatz void 423e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 424be45e998Sejakowatz MessageItemTest8() 425be45e998Sejakowatz { 426be45e998Sejakowatz BMessage msg; 427be45e998Sejakowatz ArrayType in = InitPolicy::Array(); 428be45e998Sejakowatz Type out = InitPolicy::Zero(); 429*159d60f9Sejakowatz TypePtr pout; 430be45e998Sejakowatz ssize_t size; 431be45e998Sejakowatz for (int32 i = 0; i < InitPolicy::Size(in); ++i) 432be45e998Sejakowatz { 433e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::AddData(msg, "item", TypeCode, 434*159d60f9Sejakowatz AddressOf(in[i]), InitPolicy::SizeOf(in[i]), 435*159d60f9Sejakowatz TypePolicy<Type>::FixedSize) == B_OK); 436be45e998Sejakowatz } 437be45e998Sejakowatz 438be45e998Sejakowatz for (int32 i = 0; i < InitPolicy::Size(in); ++i) 439be45e998Sejakowatz { 440be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", i)); 441e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", i), 442e5b24a58Sejakowatz in[i])); 443be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", i, &out) == B_OK); 444e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in[i])); 445e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, i, 446be45e998Sejakowatz (const void**)&pout, &size) == B_OK); 447*159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in[i])); 448*159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 449be45e998Sejakowatz } 450be45e998Sejakowatz } 451be45e998Sejakowatz //------------------------------------------------------------------------------ 452be45e998Sejakowatz template 453be45e998Sejakowatz < 454be45e998Sejakowatz class Type, 455be45e998Sejakowatz type_code TypeCode, 456be45e998Sejakowatz class FuncPolicy, 457be45e998Sejakowatz class InitPolicy, 458e5b24a58Sejakowatz class AssertPolicy, 459e5b24a58Sejakowatz class ComparePolicy 460be45e998Sejakowatz > 461be45e998Sejakowatz TestSuite* 462e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 463be45e998Sejakowatz Suite() 464be45e998Sejakowatz { 465be45e998Sejakowatz TestSuite* suite = new TestSuite("BMessage::Add/Find/Replace/HasRect()"); 466be45e998Sejakowatz 467be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest1); 468be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest2); 469be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest3); 470be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest4); 471be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest5); 472be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest6); 473be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest7); 474be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest8); 475be45e998Sejakowatz 476be45e998Sejakowatz return suite; 477be45e998Sejakowatz } 478be45e998Sejakowatz //------------------------------------------------------------------------------ 479be45e998Sejakowatz 480be45e998Sejakowatz #endif // MESSAGEITEMTEST_H 481be45e998Sejakowatz 482be45e998Sejakowatz /* 483be45e998Sejakowatz * $Log $ 484be45e998Sejakowatz * 485be45e998Sejakowatz * $Id $ 486be45e998Sejakowatz * 487be45e998Sejakowatz 488be45e998Sejakowatz */