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 { 139c5d8f91dSejakowatz inline static bool Compare(const T& lhs, const T& rhs); 140c5d8f91dSejakowatz // { return lhs == rhs; } 141be45e998Sejakowatz }; 142c5d8f91dSejakowatz template<class T> 143c5d8f91dSejakowatz bool 144c5d8f91dSejakowatz TMessageItemComparePolicy<T>::Compare(const T &lhs, const T &rhs) 145c5d8f91dSejakowatz { 146c5d8f91dSejakowatz return lhs == rhs; 147c5d8f91dSejakowatz } 148be45e998Sejakowatz //------------------------------------------------------------------------------ 149be45e998Sejakowatz template 150be45e998Sejakowatz < 151be45e998Sejakowatz class Type, // int32 152be45e998Sejakowatz type_code TypeCode, // B_INT32_TYPE 153be45e998Sejakowatz class FuncPolicy, // status_t Add(BMessage&, const char*, Type&) 154be45e998Sejakowatz // status_t Find(BMessage&, const char*, int32, Type*) 155be45e998Sejakowatz // Type QuickFind(BMessage&, const char*, int32) 156be45e998Sejakowatz // bool Has(BMessage&, const char*, int32) 157be45e998Sejakowatz // status_t Replace(BMessage&, const char*, int32, Type) 158e5b24a58Sejakowatz // status_t FindData(BMessage&, const char*, type_code, int32, const void**, ssize_t*) 159be45e998Sejakowatz class InitPolicy, // Type Zero() 160be45e998Sejakowatz // Type Test1() 161be45e998Sejakowatz // Type Test2() 162e5b24a58Sejakowatz // size_t SizeOf(const Type&) 163be45e998Sejakowatz // ArrayType Array() 164be45e998Sejakowatz // typedef XXX ArrayType 165e5b24a58Sejakowatz class AssertPolicy, // Type Zero() 166be45e998Sejakowatz // Type Invalid() 167e5b24a58Sejakowatz // bool Size(size_t, T&) 168e5b24a58Sejakowatz class ComparePolicy // bool Compare(const Type& lhs, const Type& rhs) 169e5b24a58Sejakowatz = TMessageItemComparePolicy<Type> 170be45e998Sejakowatz > 171159d60f9Sejakowatz class TMessageItemTest : public TestCase, public TypePolicy<Type> 172be45e998Sejakowatz { 173be45e998Sejakowatz public: 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(); 185*0cc48ce6Sejakowatz void MessageItemTest9(); 186*0cc48ce6Sejakowatz void MessageItemTest10(); 187be45e998Sejakowatz 188be45e998Sejakowatz static TestSuite* Suite(); 189be45e998Sejakowatz 190be45e998Sejakowatz typedef typename InitPolicy::ArrayType ArrayType; 191be45e998Sejakowatz }; 192be45e998Sejakowatz 193be45e998Sejakowatz 194be45e998Sejakowatz //------------------------------------------------------------------------------ 195be45e998Sejakowatz template 196be45e998Sejakowatz < 197be45e998Sejakowatz class Type, 198be45e998Sejakowatz type_code TypeCode, 199be45e998Sejakowatz class FuncPolicy, 200be45e998Sejakowatz class InitPolicy, 201e5b24a58Sejakowatz class AssertPolicy, 202e5b24a58Sejakowatz class ComparePolicy 203be45e998Sejakowatz > 204be45e998Sejakowatz void 205e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 206be45e998Sejakowatz MessageItemTest1() 207be45e998Sejakowatz { 208be45e998Sejakowatz BMessage msg; 209be45e998Sejakowatz Type out = InitPolicy::Zero(); 210be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_NAME_NOT_FOUND); 211e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, AssertPolicy::Invalid())); 212e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), 213e5b24a58Sejakowatz AssertPolicy::Invalid())); 214be45e998Sejakowatz CPPUNIT_ASSERT(!FuncPolicy::Has(msg, "item", 0)); 215be45e998Sejakowatz const void* ptr = &out; 216be45e998Sejakowatz ssize_t size; 217e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0, &ptr, &size) == 218be45e998Sejakowatz B_NAME_NOT_FOUND); 219be45e998Sejakowatz CPPUNIT_ASSERT(ptr == NULL); 220be45e998Sejakowatz } 221be45e998Sejakowatz //------------------------------------------------------------------------------ 222be45e998Sejakowatz template 223be45e998Sejakowatz < 224be45e998Sejakowatz class Type, 225be45e998Sejakowatz type_code TypeCode, 226be45e998Sejakowatz class FuncPolicy, 227be45e998Sejakowatz class InitPolicy, 228e5b24a58Sejakowatz class AssertPolicy, 229e5b24a58Sejakowatz class ComparePolicy 230be45e998Sejakowatz > 231be45e998Sejakowatz void 232e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 233be45e998Sejakowatz MessageItemTest2() 234*0cc48ce6Sejakowatz { 235be45e998Sejakowatz BMessage msg; 236be45e998Sejakowatz Type in = InitPolicy::Test1(); 237be45e998Sejakowatz Type out = InitPolicy::Zero(); 238be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK); 239be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0)); 240e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), in)); 241be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK); 242e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in)); 243159d60f9Sejakowatz TypePtr pout = NULL; 244be45e998Sejakowatz ssize_t size; 245e5b24a58Sejakowatz status_t err = FuncPolicy::FindData(msg, "item", TypeCode, 0, 246e5b24a58Sejakowatz (const void**)&pout, &size); 247be45e998Sejakowatz CPPUNIT_ASSERT(err == B_OK); 248159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in)); 249159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 250be45e998Sejakowatz } 251be45e998Sejakowatz //------------------------------------------------------------------------------ 252be45e998Sejakowatz template 253be45e998Sejakowatz < 254be45e998Sejakowatz class Type, 255be45e998Sejakowatz type_code TypeCode, 256be45e998Sejakowatz class FuncPolicy, 257be45e998Sejakowatz class InitPolicy, 258e5b24a58Sejakowatz class AssertPolicy, 259e5b24a58Sejakowatz class ComparePolicy 260be45e998Sejakowatz > 261be45e998Sejakowatz void 262e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 263be45e998Sejakowatz MessageItemTest3() 264be45e998Sejakowatz { 265be45e998Sejakowatz BMessage msg; 266be45e998Sejakowatz Type in = InitPolicy::Test1(); 267be45e998Sejakowatz Type in2 = InitPolicy::Test2(); 268be45e998Sejakowatz Type out = InitPolicy::Zero(); 269be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK); 270be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Replace(msg, "item", 0, in2) == B_OK); 271be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0)); 272e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), in2)); 273be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK); 274e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in2)); 275be45e998Sejakowatz out = InitPolicy::Zero(); 276159d60f9Sejakowatz TypePtr pout; 277be45e998Sejakowatz ssize_t size; 278e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0, 279e5b24a58Sejakowatz (const void**)&pout, &size) == B_OK); 280159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in2)); 281159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 282be45e998Sejakowatz } 283be45e998Sejakowatz //------------------------------------------------------------------------------ 284be45e998Sejakowatz template 285be45e998Sejakowatz < 286be45e998Sejakowatz class Type, 287be45e998Sejakowatz type_code TypeCode, 288be45e998Sejakowatz class FuncPolicy, 289be45e998Sejakowatz class InitPolicy, 290e5b24a58Sejakowatz class AssertPolicy, 291e5b24a58Sejakowatz class ComparePolicy 292be45e998Sejakowatz > 293be45e998Sejakowatz void 294e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 295be45e998Sejakowatz MessageItemTest4() 296be45e998Sejakowatz { 297be45e998Sejakowatz BMessage msg; 298be45e998Sejakowatz Type out = InitPolicy::Zero(); 299be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 1, &out) == B_NAME_NOT_FOUND); 300e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, AssertPolicy::Invalid())); 301e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 1), 302e5b24a58Sejakowatz AssertPolicy::Invalid())); 303be45e998Sejakowatz CPPUNIT_ASSERT(!FuncPolicy::Has(msg, "item", 1)); 304be45e998Sejakowatz const void* ptr = &out; 305be45e998Sejakowatz ssize_t size; 306e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 1, &ptr, &size) == 307be45e998Sejakowatz B_NAME_NOT_FOUND); 308be45e998Sejakowatz CPPUNIT_ASSERT(ptr == NULL); 309be45e998Sejakowatz } 310be45e998Sejakowatz //------------------------------------------------------------------------------ 311be45e998Sejakowatz template 312be45e998Sejakowatz < 313be45e998Sejakowatz class Type, 314be45e998Sejakowatz type_code TypeCode, 315be45e998Sejakowatz class FuncPolicy, 316be45e998Sejakowatz class InitPolicy, 317e5b24a58Sejakowatz class AssertPolicy, 318e5b24a58Sejakowatz class ComparePolicy 319be45e998Sejakowatz > 320be45e998Sejakowatz void 321e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 322be45e998Sejakowatz MessageItemTest5() 323be45e998Sejakowatz { 324be45e998Sejakowatz BMessage msg; 325be45e998Sejakowatz ArrayType in = InitPolicy::Array(); 326be45e998Sejakowatz Type out = InitPolicy::Zero(); 327159d60f9Sejakowatz TypePtr pout; 328be45e998Sejakowatz ssize_t size; 329be45e998Sejakowatz 330be45e998Sejakowatz for (int32 i = 0; i < InitPolicy::Size(in); ++i) 331be45e998Sejakowatz { 332be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in[i]) == B_OK); 333be45e998Sejakowatz } 334be45e998Sejakowatz 335be45e998Sejakowatz for (int32 i = 0; i < InitPolicy::Size(in); ++i) 336be45e998Sejakowatz { 337be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", i)); 338e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", i), 339e5b24a58Sejakowatz in[i])); 340be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", i, &out) == B_OK); 341e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in[i])); 342e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, i, 343be45e998Sejakowatz (const void**)&pout, &size) == B_OK); 344159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in[i])); 345159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 346be45e998Sejakowatz } 347be45e998Sejakowatz } 348be45e998Sejakowatz //------------------------------------------------------------------------------ 349be45e998Sejakowatz template 350be45e998Sejakowatz < 351be45e998Sejakowatz class Type, 352be45e998Sejakowatz type_code TypeCode, 353be45e998Sejakowatz class FuncPolicy, 354be45e998Sejakowatz class InitPolicy, 355e5b24a58Sejakowatz class AssertPolicy, 356e5b24a58Sejakowatz class ComparePolicy 357be45e998Sejakowatz > 358be45e998Sejakowatz void 359e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 360be45e998Sejakowatz MessageItemTest6() 361be45e998Sejakowatz { 362be45e998Sejakowatz BMessage msg; 363be45e998Sejakowatz ArrayType in = InitPolicy::Array(); 364be45e998Sejakowatz Type in2 = InitPolicy::Test2(); 365be45e998Sejakowatz Type out = InitPolicy::Zero(); 366be45e998Sejakowatz const int rIndex = 2; 367be45e998Sejakowatz 368be45e998Sejakowatz for (int32 i = 0; i < InitPolicy::Size(in); ++i) 369be45e998Sejakowatz { 370be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in[i]) == B_OK); 371be45e998Sejakowatz } 372be45e998Sejakowatz 373be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Replace(msg, "item", rIndex, in2) == B_OK); 374be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", rIndex)); 375e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", rIndex), 376e5b24a58Sejakowatz in2)); 377be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", rIndex, &out) == B_OK); 378e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in2)); 379be45e998Sejakowatz out = InitPolicy::Zero(); 380159d60f9Sejakowatz TypePtr pout; 381be45e998Sejakowatz ssize_t size; 382e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, rIndex, 383be45e998Sejakowatz (const void**)&pout, &size) == B_OK); 384159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in2)); 385159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 386be45e998Sejakowatz } 387be45e998Sejakowatz //------------------------------------------------------------------------------ 388be45e998Sejakowatz template 389be45e998Sejakowatz < 390be45e998Sejakowatz class Type, 391be45e998Sejakowatz type_code TypeCode, 392be45e998Sejakowatz class FuncPolicy, 393be45e998Sejakowatz class InitPolicy, 394e5b24a58Sejakowatz class AssertPolicy, 395e5b24a58Sejakowatz class ComparePolicy 396be45e998Sejakowatz > 397be45e998Sejakowatz void 398e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 399be45e998Sejakowatz MessageItemTest7() 400be45e998Sejakowatz { 401be45e998Sejakowatz BMessage msg; 402be45e998Sejakowatz Type in = InitPolicy::Test1(); 403be45e998Sejakowatz Type out = InitPolicy::Zero(); 404159d60f9Sejakowatz CPPUNIT_ASSERT(FuncPolicy::AddData(msg, "item", TypeCode, AddressOf(in), 405159d60f9Sejakowatz InitPolicy::SizeOf(in), 406159d60f9Sejakowatz TypePolicy<Type>::FixedSize) == B_OK); 407be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0)); 408e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), 409e5b24a58Sejakowatz in)); 410be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK); 411e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in)); 412159d60f9Sejakowatz TypePtr pout = NULL; 413be45e998Sejakowatz ssize_t size; 414e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0, 415e5b24a58Sejakowatz (const void**)&pout, &size) == B_OK); 416159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in)); 417159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 418be45e998Sejakowatz } 419be45e998Sejakowatz //------------------------------------------------------------------------------ 420159d60f9Sejakowatz #include <stdio.h> 421be45e998Sejakowatz template 422be45e998Sejakowatz < 423be45e998Sejakowatz class Type, 424be45e998Sejakowatz type_code TypeCode, 425be45e998Sejakowatz class FuncPolicy, 426be45e998Sejakowatz class InitPolicy, 427e5b24a58Sejakowatz class AssertPolicy, 428e5b24a58Sejakowatz class ComparePolicy 429be45e998Sejakowatz > 430be45e998Sejakowatz void 431e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 432be45e998Sejakowatz MessageItemTest8() 433be45e998Sejakowatz { 434be45e998Sejakowatz BMessage msg; 435be45e998Sejakowatz ArrayType in = InitPolicy::Array(); 436be45e998Sejakowatz Type out = InitPolicy::Zero(); 437159d60f9Sejakowatz TypePtr pout; 438be45e998Sejakowatz ssize_t size; 439be45e998Sejakowatz for (int32 i = 0; i < InitPolicy::Size(in); ++i) 440be45e998Sejakowatz { 441e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::AddData(msg, "item", TypeCode, 442159d60f9Sejakowatz AddressOf(in[i]), InitPolicy::SizeOf(in[i]), 443159d60f9Sejakowatz TypePolicy<Type>::FixedSize) == B_OK); 444be45e998Sejakowatz } 445be45e998Sejakowatz 446be45e998Sejakowatz for (int32 i = 0; i < InitPolicy::Size(in); ++i) 447be45e998Sejakowatz { 448be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", i)); 449e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", i), 450e5b24a58Sejakowatz in[i])); 451be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", i, &out) == B_OK); 452e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in[i])); 453e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, i, 454be45e998Sejakowatz (const void**)&pout, &size) == B_OK); 455159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in[i])); 456159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 457be45e998Sejakowatz } 458be45e998Sejakowatz } 459be45e998Sejakowatz //------------------------------------------------------------------------------ 460be45e998Sejakowatz template 461be45e998Sejakowatz < 462be45e998Sejakowatz class Type, 463be45e998Sejakowatz type_code TypeCode, 464be45e998Sejakowatz class FuncPolicy, 465be45e998Sejakowatz class InitPolicy, 466e5b24a58Sejakowatz class AssertPolicy, 467e5b24a58Sejakowatz class ComparePolicy 468be45e998Sejakowatz > 469*0cc48ce6Sejakowatz void 470*0cc48ce6Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 471*0cc48ce6Sejakowatz MessageItemTest9() 472*0cc48ce6Sejakowatz { 473*0cc48ce6Sejakowatz BMessage msg; 474*0cc48ce6Sejakowatz Type in = InitPolicy::Test1(); 475*0cc48ce6Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, NULL, in) == B_BAD_VALUE); 476*0cc48ce6Sejakowatz } 477*0cc48ce6Sejakowatz //------------------------------------------------------------------------------ 478*0cc48ce6Sejakowatz template 479*0cc48ce6Sejakowatz < 480*0cc48ce6Sejakowatz class Type, 481*0cc48ce6Sejakowatz type_code TypeCode, 482*0cc48ce6Sejakowatz class FuncPolicy, 483*0cc48ce6Sejakowatz class InitPolicy, 484*0cc48ce6Sejakowatz class AssertPolicy, 485*0cc48ce6Sejakowatz class ComparePolicy 486*0cc48ce6Sejakowatz > 487*0cc48ce6Sejakowatz void 488*0cc48ce6Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 489*0cc48ce6Sejakowatz MessageItemTest10() 490*0cc48ce6Sejakowatz { 491*0cc48ce6Sejakowatz BMessage msg; 492*0cc48ce6Sejakowatz Type in = InitPolicy::Test1(); 493*0cc48ce6Sejakowatz Type out = InitPolicy::Zero(); 494*0cc48ce6Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK); 495*0cc48ce6Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, NULL, 0) == false); 496*0cc48ce6Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, NULL, 0), 497*0cc48ce6Sejakowatz AssertPolicy::Invalid())); 498*0cc48ce6Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, NULL, 0, &out) == B_BAD_VALUE); 499*0cc48ce6Sejakowatz TypePtr pout = NULL; 500*0cc48ce6Sejakowatz ssize_t size; 501*0cc48ce6Sejakowatz status_t err = FuncPolicy::FindData(msg, NULL, TypeCode, 0, 502*0cc48ce6Sejakowatz (const void**)&pout, &size); 503*0cc48ce6Sejakowatz CPPUNIT_ASSERT(err = B_BAD_VALUE); 504*0cc48ce6Sejakowatz } 505*0cc48ce6Sejakowatz //------------------------------------------------------------------------------ 506*0cc48ce6Sejakowatz template 507*0cc48ce6Sejakowatz < 508*0cc48ce6Sejakowatz class Type, 509*0cc48ce6Sejakowatz type_code TypeCode, 510*0cc48ce6Sejakowatz class FuncPolicy, 511*0cc48ce6Sejakowatz class InitPolicy, 512*0cc48ce6Sejakowatz class AssertPolicy, 513*0cc48ce6Sejakowatz class ComparePolicy 514*0cc48ce6Sejakowatz > 515be45e998Sejakowatz TestSuite* 516e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 517be45e998Sejakowatz Suite() 518be45e998Sejakowatz { 519be45e998Sejakowatz TestSuite* suite = new TestSuite("BMessage::Add/Find/Replace/HasRect()"); 520be45e998Sejakowatz 521be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest1); 522be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest2); 523be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest3); 524be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest4); 525be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest5); 526be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest6); 527be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest7); 528be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest8); 529*0cc48ce6Sejakowatz #ifndef TEST_R5 530*0cc48ce6Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest9); 531*0cc48ce6Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest10); 532*0cc48ce6Sejakowatz #endif 533be45e998Sejakowatz 534be45e998Sejakowatz return suite; 535be45e998Sejakowatz } 536be45e998Sejakowatz //------------------------------------------------------------------------------ 537be45e998Sejakowatz 538be45e998Sejakowatz #endif // MESSAGEITEMTEST_H 539be45e998Sejakowatz 540be45e998Sejakowatz /* 541be45e998Sejakowatz * $Log $ 542be45e998Sejakowatz * 543be45e998Sejakowatz * $Id $ 544be45e998Sejakowatz * 545be45e998Sejakowatz 546be45e998Sejakowatz */