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