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, 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 > 93159d60f9Sejakowatz 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, 100159d60f9Sejakowatz TypePtr val, ssize_t size, bool fixedSize = true) 101e5b24a58Sejakowatz { 102159d60f9Sejakowatz 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 { 139*c5d8f91dSejakowatz inline static bool Compare(const T& lhs, const T& rhs); 140*c5d8f91dSejakowatz // { return lhs == rhs; } 141be45e998Sejakowatz }; 142*c5d8f91dSejakowatz template<class T> 143*c5d8f91dSejakowatz bool 144*c5d8f91dSejakowatz TMessageItemComparePolicy<T>::Compare(const T &lhs, const T &rhs) 145*c5d8f91dSejakowatz { 146*c5d8f91dSejakowatz return lhs == rhs; 147*c5d8f91dSejakowatz } 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: 174be45e998Sejakowatz TMessageItemTest() {;} 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(); 185be45e998Sejakowatz 186be45e998Sejakowatz static TestSuite* Suite(); 187be45e998Sejakowatz 188be45e998Sejakowatz typedef typename InitPolicy::ArrayType ArrayType; 189be45e998Sejakowatz }; 190be45e998Sejakowatz 191be45e998Sejakowatz 192be45e998Sejakowatz //------------------------------------------------------------------------------ 193be45e998Sejakowatz template 194be45e998Sejakowatz < 195be45e998Sejakowatz class Type, 196be45e998Sejakowatz type_code TypeCode, 197be45e998Sejakowatz class FuncPolicy, 198be45e998Sejakowatz class InitPolicy, 199e5b24a58Sejakowatz class AssertPolicy, 200e5b24a58Sejakowatz class ComparePolicy 201be45e998Sejakowatz > 202be45e998Sejakowatz void 203e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 204be45e998Sejakowatz MessageItemTest1() 205be45e998Sejakowatz { 206be45e998Sejakowatz BMessage msg; 207be45e998Sejakowatz Type out = InitPolicy::Zero(); 208be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_NAME_NOT_FOUND); 209e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, AssertPolicy::Invalid())); 210e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), 211e5b24a58Sejakowatz AssertPolicy::Invalid())); 212be45e998Sejakowatz CPPUNIT_ASSERT(!FuncPolicy::Has(msg, "item", 0)); 213be45e998Sejakowatz const void* ptr = &out; 214be45e998Sejakowatz ssize_t size; 215e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0, &ptr, &size) == 216be45e998Sejakowatz B_NAME_NOT_FOUND); 217be45e998Sejakowatz CPPUNIT_ASSERT(ptr == NULL); 218be45e998Sejakowatz } 219be45e998Sejakowatz //------------------------------------------------------------------------------ 220be45e998Sejakowatz template 221be45e998Sejakowatz < 222be45e998Sejakowatz class Type, 223be45e998Sejakowatz type_code TypeCode, 224be45e998Sejakowatz class FuncPolicy, 225be45e998Sejakowatz class InitPolicy, 226e5b24a58Sejakowatz class AssertPolicy, 227e5b24a58Sejakowatz class ComparePolicy 228be45e998Sejakowatz > 229be45e998Sejakowatz void 230e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 231be45e998Sejakowatz MessageItemTest2() 232*c5d8f91dSejakowatz {debugger(__PRETTY_FUNCTION__); 233be45e998Sejakowatz BMessage msg; 234be45e998Sejakowatz Type in = InitPolicy::Test1(); 235be45e998Sejakowatz Type out = InitPolicy::Zero(); 236be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK); 237be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0)); 238e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), in)); 239be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK); 240e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in)); 241159d60f9Sejakowatz TypePtr pout = NULL; 242be45e998Sejakowatz ssize_t size; 243e5b24a58Sejakowatz status_t err = FuncPolicy::FindData(msg, "item", TypeCode, 0, 244e5b24a58Sejakowatz (const void**)&pout, &size); 245be45e998Sejakowatz CPPUNIT_ASSERT(err == B_OK); 246159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in)); 247159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 248be45e998Sejakowatz } 249be45e998Sejakowatz //------------------------------------------------------------------------------ 250be45e998Sejakowatz template 251be45e998Sejakowatz < 252be45e998Sejakowatz class Type, 253be45e998Sejakowatz type_code TypeCode, 254be45e998Sejakowatz class FuncPolicy, 255be45e998Sejakowatz class InitPolicy, 256e5b24a58Sejakowatz class AssertPolicy, 257e5b24a58Sejakowatz class ComparePolicy 258be45e998Sejakowatz > 259be45e998Sejakowatz void 260e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 261be45e998Sejakowatz MessageItemTest3() 262be45e998Sejakowatz { 263be45e998Sejakowatz BMessage msg; 264be45e998Sejakowatz Type in = InitPolicy::Test1(); 265be45e998Sejakowatz Type in2 = InitPolicy::Test2(); 266be45e998Sejakowatz Type out = InitPolicy::Zero(); 267be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK); 268be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Replace(msg, "item", 0, in2) == B_OK); 269be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0)); 270e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), in2)); 271be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK); 272e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in2)); 273be45e998Sejakowatz out = InitPolicy::Zero(); 274159d60f9Sejakowatz TypePtr pout; 275be45e998Sejakowatz ssize_t size; 276e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0, 277e5b24a58Sejakowatz (const void**)&pout, &size) == B_OK); 278159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in2)); 279159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 280be45e998Sejakowatz } 281be45e998Sejakowatz //------------------------------------------------------------------------------ 282be45e998Sejakowatz template 283be45e998Sejakowatz < 284be45e998Sejakowatz class Type, 285be45e998Sejakowatz type_code TypeCode, 286be45e998Sejakowatz class FuncPolicy, 287be45e998Sejakowatz class InitPolicy, 288e5b24a58Sejakowatz class AssertPolicy, 289e5b24a58Sejakowatz class ComparePolicy 290be45e998Sejakowatz > 291be45e998Sejakowatz void 292e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 293be45e998Sejakowatz MessageItemTest4() 294be45e998Sejakowatz { 295be45e998Sejakowatz BMessage msg; 296be45e998Sejakowatz Type out = InitPolicy::Zero(); 297be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 1, &out) == B_NAME_NOT_FOUND); 298e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, AssertPolicy::Invalid())); 299e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 1), 300e5b24a58Sejakowatz AssertPolicy::Invalid())); 301be45e998Sejakowatz CPPUNIT_ASSERT(!FuncPolicy::Has(msg, "item", 1)); 302be45e998Sejakowatz const void* ptr = &out; 303be45e998Sejakowatz ssize_t size; 304e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 1, &ptr, &size) == 305be45e998Sejakowatz B_NAME_NOT_FOUND); 306be45e998Sejakowatz CPPUNIT_ASSERT(ptr == NULL); 307be45e998Sejakowatz } 308be45e998Sejakowatz //------------------------------------------------------------------------------ 309be45e998Sejakowatz template 310be45e998Sejakowatz < 311be45e998Sejakowatz class Type, 312be45e998Sejakowatz type_code TypeCode, 313be45e998Sejakowatz class FuncPolicy, 314be45e998Sejakowatz class InitPolicy, 315e5b24a58Sejakowatz class AssertPolicy, 316e5b24a58Sejakowatz class ComparePolicy 317be45e998Sejakowatz > 318be45e998Sejakowatz void 319e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 320be45e998Sejakowatz MessageItemTest5() 321be45e998Sejakowatz { 322be45e998Sejakowatz BMessage msg; 323be45e998Sejakowatz ArrayType in = InitPolicy::Array(); 324be45e998Sejakowatz Type out = InitPolicy::Zero(); 325159d60f9Sejakowatz TypePtr pout; 326be45e998Sejakowatz ssize_t size; 327be45e998Sejakowatz 328be45e998Sejakowatz for (int32 i = 0; i < InitPolicy::Size(in); ++i) 329be45e998Sejakowatz { 330be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in[i]) == B_OK); 331be45e998Sejakowatz } 332be45e998Sejakowatz 333be45e998Sejakowatz for (int32 i = 0; i < InitPolicy::Size(in); ++i) 334be45e998Sejakowatz { 335be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", i)); 336e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", i), 337e5b24a58Sejakowatz in[i])); 338be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", i, &out) == B_OK); 339e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in[i])); 340e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, i, 341be45e998Sejakowatz (const void**)&pout, &size) == B_OK); 342159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in[i])); 343159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 344be45e998Sejakowatz } 345be45e998Sejakowatz } 346be45e998Sejakowatz //------------------------------------------------------------------------------ 347be45e998Sejakowatz template 348be45e998Sejakowatz < 349be45e998Sejakowatz class Type, 350be45e998Sejakowatz type_code TypeCode, 351be45e998Sejakowatz class FuncPolicy, 352be45e998Sejakowatz class InitPolicy, 353e5b24a58Sejakowatz class AssertPolicy, 354e5b24a58Sejakowatz class ComparePolicy 355be45e998Sejakowatz > 356be45e998Sejakowatz void 357e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 358be45e998Sejakowatz MessageItemTest6() 359be45e998Sejakowatz { 360be45e998Sejakowatz BMessage msg; 361be45e998Sejakowatz ArrayType in = InitPolicy::Array(); 362be45e998Sejakowatz Type in2 = InitPolicy::Test2(); 363be45e998Sejakowatz Type out = InitPolicy::Zero(); 364be45e998Sejakowatz const int rIndex = 2; 365be45e998Sejakowatz 366be45e998Sejakowatz for (int32 i = 0; i < InitPolicy::Size(in); ++i) 367be45e998Sejakowatz { 368be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in[i]) == B_OK); 369be45e998Sejakowatz } 370be45e998Sejakowatz 371be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Replace(msg, "item", rIndex, in2) == B_OK); 372be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", rIndex)); 373e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", rIndex), 374e5b24a58Sejakowatz in2)); 375be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", rIndex, &out) == B_OK); 376e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in2)); 377be45e998Sejakowatz out = InitPolicy::Zero(); 378159d60f9Sejakowatz TypePtr pout; 379be45e998Sejakowatz ssize_t size; 380e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, rIndex, 381be45e998Sejakowatz (const void**)&pout, &size) == B_OK); 382159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in2)); 383159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 384be45e998Sejakowatz } 385be45e998Sejakowatz //------------------------------------------------------------------------------ 386be45e998Sejakowatz template 387be45e998Sejakowatz < 388be45e998Sejakowatz class Type, 389be45e998Sejakowatz type_code TypeCode, 390be45e998Sejakowatz class FuncPolicy, 391be45e998Sejakowatz class InitPolicy, 392e5b24a58Sejakowatz class AssertPolicy, 393e5b24a58Sejakowatz class ComparePolicy 394be45e998Sejakowatz > 395be45e998Sejakowatz void 396e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 397be45e998Sejakowatz MessageItemTest7() 398be45e998Sejakowatz { 399be45e998Sejakowatz BMessage msg; 400be45e998Sejakowatz Type in = InitPolicy::Test1(); 401be45e998Sejakowatz Type out = InitPolicy::Zero(); 402159d60f9Sejakowatz CPPUNIT_ASSERT(FuncPolicy::AddData(msg, "item", TypeCode, AddressOf(in), 403159d60f9Sejakowatz InitPolicy::SizeOf(in), 404159d60f9Sejakowatz TypePolicy<Type>::FixedSize) == B_OK); 405be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0)); 406e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), 407e5b24a58Sejakowatz in)); 408be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK); 409e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in)); 410159d60f9Sejakowatz TypePtr pout = NULL; 411be45e998Sejakowatz ssize_t size; 412e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0, 413e5b24a58Sejakowatz (const void**)&pout, &size) == B_OK); 414159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in)); 415159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 416be45e998Sejakowatz } 417be45e998Sejakowatz //------------------------------------------------------------------------------ 418159d60f9Sejakowatz #include <stdio.h> 419be45e998Sejakowatz template 420be45e998Sejakowatz < 421be45e998Sejakowatz class Type, 422be45e998Sejakowatz type_code TypeCode, 423be45e998Sejakowatz class FuncPolicy, 424be45e998Sejakowatz class InitPolicy, 425e5b24a58Sejakowatz class AssertPolicy, 426e5b24a58Sejakowatz class ComparePolicy 427be45e998Sejakowatz > 428be45e998Sejakowatz void 429e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 430be45e998Sejakowatz MessageItemTest8() 431be45e998Sejakowatz { 432be45e998Sejakowatz BMessage msg; 433be45e998Sejakowatz ArrayType in = InitPolicy::Array(); 434be45e998Sejakowatz Type out = InitPolicy::Zero(); 435159d60f9Sejakowatz TypePtr pout; 436be45e998Sejakowatz ssize_t size; 437be45e998Sejakowatz for (int32 i = 0; i < InitPolicy::Size(in); ++i) 438be45e998Sejakowatz { 439e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::AddData(msg, "item", TypeCode, 440159d60f9Sejakowatz AddressOf(in[i]), InitPolicy::SizeOf(in[i]), 441159d60f9Sejakowatz TypePolicy<Type>::FixedSize) == B_OK); 442be45e998Sejakowatz } 443be45e998Sejakowatz 444be45e998Sejakowatz for (int32 i = 0; i < InitPolicy::Size(in); ++i) 445be45e998Sejakowatz { 446be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", i)); 447e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", i), 448e5b24a58Sejakowatz in[i])); 449be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", i, &out) == B_OK); 450e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in[i])); 451e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, i, 452be45e998Sejakowatz (const void**)&pout, &size) == B_OK); 453159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in[i])); 454159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 455be45e998Sejakowatz } 456be45e998Sejakowatz } 457be45e998Sejakowatz //------------------------------------------------------------------------------ 458be45e998Sejakowatz template 459be45e998Sejakowatz < 460be45e998Sejakowatz class Type, 461be45e998Sejakowatz type_code TypeCode, 462be45e998Sejakowatz class FuncPolicy, 463be45e998Sejakowatz class InitPolicy, 464e5b24a58Sejakowatz class AssertPolicy, 465e5b24a58Sejakowatz class ComparePolicy 466be45e998Sejakowatz > 467be45e998Sejakowatz TestSuite* 468e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 469be45e998Sejakowatz Suite() 470be45e998Sejakowatz { 471be45e998Sejakowatz TestSuite* suite = new TestSuite("BMessage::Add/Find/Replace/HasRect()"); 472be45e998Sejakowatz 473be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest1); 474be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest2); 475be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest3); 476be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest4); 477be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest5); 478be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest6); 479be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest7); 480be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest8); 481be45e998Sejakowatz 482be45e998Sejakowatz return suite; 483be45e998Sejakowatz } 484be45e998Sejakowatz //------------------------------------------------------------------------------ 485be45e998Sejakowatz 486be45e998Sejakowatz #endif // MESSAGEITEMTEST_H 487be45e998Sejakowatz 488be45e998Sejakowatz /* 489be45e998Sejakowatz * $Log $ 490be45e998Sejakowatz * 491be45e998Sejakowatz * $Id $ 492be45e998Sejakowatz * 493be45e998Sejakowatz 494be45e998Sejakowatz */