1be45e998Sejakowatz //------------------------------------------------------------------------------ 2be45e998Sejakowatz // MessageItemTest.h 3be45e998Sejakowatz // 4be45e998Sejakowatz //------------------------------------------------------------------------------ 5be45e998Sejakowatz 6be45e998Sejakowatz #ifndef MESSAGEITEMTEST_H 7be45e998Sejakowatz #define MESSAGEITEMTEST_H 8be45e998Sejakowatz 9be45e998Sejakowatz // A sad attempt to get rid of the horrible and pathetic vector<bool> specialization 10be45e998Sejakowatz #define __SGI_STL_INTERNAL_BVECTOR_H 11be45e998Sejakowatz 12be45e998Sejakowatz // Standard Includes ----------------------------------------------------------- 13be45e998Sejakowatz #include <iostream> 14be45e998Sejakowatz #include <stdio.h> 15be45e998Sejakowatz #ifdef TEST_OBOS 16be45e998Sejakowatz #include <posix/typeinfo> 17be45e998Sejakowatz #else 18be45e998Sejakowatz #include <typeinfo> 19be45e998Sejakowatz #endif 20be45e998Sejakowatz #include <posix/string.h> 21be45e998Sejakowatz 22be45e998Sejakowatz // System Includes ------------------------------------------------------------- 23be45e998Sejakowatz #include <Message.h> 24be45e998Sejakowatz 25be45e998Sejakowatz // Project Includes ------------------------------------------------------------ 26be45e998Sejakowatz 27be45e998Sejakowatz // Local Includes -------------------------------------------------------------- 28be45e998Sejakowatz #include "../common.h" 29be45e998Sejakowatz 30be45e998Sejakowatz // Local Defines --------------------------------------------------------------- 31e5b24a58Sejakowatz #define TEMPLATE_TEST_PARAMS <Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy> 32be45e998Sejakowatz #define ADD_TEMPLATE_TEST(classbeingtested, suitename, classname, funcname) \ 33be45e998Sejakowatz (suitename)->addTest(new TestCaller<classname>(((string(#classbeingtested) + "::" + #funcname + "::" + typeid(Type).name()).c_str() ), \ 34be45e998Sejakowatz &classname::funcname)); 35be45e998Sejakowatz 36be45e998Sejakowatz // Globals --------------------------------------------------------------------- 37be45e998Sejakowatz template 38be45e998Sejakowatz < 39be45e998Sejakowatz class Type, // int32 40be45e998Sejakowatz type_code TypeCode, // B_INT32_TYPE 41be45e998Sejakowatz class FuncPolicy, // status_t Add(BMessage&, const char*, Type&) 42be45e998Sejakowatz // status_t Find(BMessage&, const char*, int32, Type*) 43be45e998Sejakowatz // Type QuickFind(BMessage&, const char*, int32) 44be45e998Sejakowatz // bool Has(BMessage&, const char*, int32) 45be45e998Sejakowatz // status_t Replace(BMessage&, const char*, int32, Type) 46be45e998Sejakowatz class InitPolicy, // Type Zero() 47be45e998Sejakowatz // Type Test1() 48be45e998Sejakowatz // Type Test2() 49e5b24a58Sejakowatz // size_t SizeOf(const Type&) 50e5b24a58Sejakowatz // ArrayType Array() 51e5b24a58Sejakowatz // typedef XXX ArrayType 52e5b24a58Sejakowatz class AssertPolicy, // Type Zero() 53e5b24a58Sejakowatz // Type Invalid() 54e5b24a58Sejakowatz class ComparePolicy // bool Compare(const Type& lhs, const Type& rhs) 55be45e998Sejakowatz > 56be45e998Sejakowatz class TMessageItemTest; 57be45e998Sejakowatz 58be45e998Sejakowatz 59be45e998Sejakowatz //------------------------------------------------------------------------------ 60be45e998Sejakowatz template<class T> 61be45e998Sejakowatz struct ArrayTypeBase 62be45e998Sejakowatz { 63be45e998Sejakowatz typedef vector<T> ArrayType; 64be45e998Sejakowatz typedef typename ArrayType::size_type SizeType; 65be45e998Sejakowatz static SizeType Size(ArrayType& array) { return array.size(); } 66be45e998Sejakowatz }; 67be45e998Sejakowatz //------------------------------------------------------------------------------ 68159d60f9Sejakowatz template<class Type> 69159d60f9Sejakowatz struct TypePolicy 70159d60f9Sejakowatz { 71159d60f9Sejakowatz typedef Type* TypePtr; 72159d60f9Sejakowatz enum { FixedSize = true }; 73159d60f9Sejakowatz inline Type& Dereference(TypePtr p) 74159d60f9Sejakowatz { 75159d60f9Sejakowatz return *p; 76159d60f9Sejakowatz } 77159d60f9Sejakowatz inline TypePtr AddressOf(Type& t) { return &t; } 78159d60f9Sejakowatz }; 79159d60f9Sejakowatz //------------------------------------------------------------------------------ 80be45e998Sejakowatz template 81be45e998Sejakowatz < 82be45e998Sejakowatz typename Type, 83be45e998Sejakowatz status_t (BMessage::*AddFunc)(const char*, Type), 84be45e998Sejakowatz status_t (BMessage::*FindFunc)(const char*, int32, Type*) const, 852605a4f5Sejakowatz status_t (BMessage::*ShortFindFunc)(const char*, Type*) const, 86be45e998Sejakowatz Type (BMessage::*QuickFindFunc)(const char*, int32) const, 87be45e998Sejakowatz bool (BMessage::*HasFunc)(const char*, int32) const, 88e5b24a58Sejakowatz status_t (BMessage::*ReplaceFunc)(const char*, int32, Type), 89e5b24a58Sejakowatz status_t (BMessage::*AddDataFunc)(const char*, type_code, const void*, 90e5b24a58Sejakowatz ssize_t, bool, int32) = &BMessage::AddData, 91e5b24a58Sejakowatz status_t (BMessage::*FindDataFunc)(const char*, type_code, int32, 92e5b24a58Sejakowatz const void**, ssize_t*) const = &BMessage::FindData 93be45e998Sejakowatz > 94159d60f9Sejakowatz struct TMessageItemFuncPolicy : public TypePolicy<Type> 95be45e998Sejakowatz { 96be45e998Sejakowatz static status_t Add(BMessage& msg, const char* name, Type& val) 97be45e998Sejakowatz { 98be45e998Sejakowatz return (msg.*AddFunc)(name, val); 99be45e998Sejakowatz } 100e5b24a58Sejakowatz static status_t AddData(BMessage& msg, const char* name, type_code type, 101159d60f9Sejakowatz TypePtr val, ssize_t size, bool fixedSize = true) 102e5b24a58Sejakowatz { 103159d60f9Sejakowatz return (msg.*AddDataFunc)(name, type, (const void*)val, size, fixedSize); 104e5b24a58Sejakowatz } 105be45e998Sejakowatz static status_t Find(BMessage& msg, const char* name, int32 index, Type* val) 106be45e998Sejakowatz { 107be45e998Sejakowatz return (msg.*FindFunc)(name, index, val); 108be45e998Sejakowatz } 1092605a4f5Sejakowatz static status_t ShortFind(BMessage& msg, const char* name, Type* val) 1102605a4f5Sejakowatz { 1112605a4f5Sejakowatz return (msg.*ShortFindFunc)(name, val); 1122605a4f5Sejakowatz } 113be45e998Sejakowatz static Type QuickFind(BMessage& msg, const char* name, int32 index) 114be45e998Sejakowatz { 115be45e998Sejakowatz return (msg.*QuickFindFunc)(name, index); 116be45e998Sejakowatz } 117be45e998Sejakowatz static bool Has(BMessage& msg, const char* name, int32 index) 118be45e998Sejakowatz { 119be45e998Sejakowatz return (msg.*HasFunc)(name, index); 120be45e998Sejakowatz } 121e5b24a58Sejakowatz static status_t Replace(BMessage& msg, const char* name, int32 index, Type& val) 122be45e998Sejakowatz { 123be45e998Sejakowatz return (msg.*ReplaceFunc)(name, index, val); 124be45e998Sejakowatz } 125e5b24a58Sejakowatz static status_t FindData(BMessage& msg, const char* name, type_code type, 126e5b24a58Sejakowatz int32 index, const void** data, ssize_t* size) 127e5b24a58Sejakowatz { 128e5b24a58Sejakowatz return (msg.*FindDataFunc)(name, type, index, data, size); 129e5b24a58Sejakowatz } 130e5b24a58Sejakowatz }; 131e5b24a58Sejakowatz //------------------------------------------------------------------------------ 132e5b24a58Sejakowatz template<class T, T zero = T(), T invalid = T()> 133e5b24a58Sejakowatz struct TMessageItemAssertPolicy 134e5b24a58Sejakowatz { 135e5b24a58Sejakowatz inline static T Zero() { return zero; } 136e5b24a58Sejakowatz inline static T Invalid() { return invalid; } 137e5b24a58Sejakowatz inline static bool Size(size_t size, T& t) 138e5b24a58Sejakowatz { return size == sizeof (t); } 139e5b24a58Sejakowatz }; 140e5b24a58Sejakowatz //------------------------------------------------------------------------------ 141e5b24a58Sejakowatz template<class T> 142e5b24a58Sejakowatz struct TMessageItemComparePolicy 143e5b24a58Sejakowatz { 144c5d8f91dSejakowatz inline static bool Compare(const T& lhs, const T& rhs); 145c5d8f91dSejakowatz // { return lhs == rhs; } 146be45e998Sejakowatz }; 147c5d8f91dSejakowatz template<class T> 148c5d8f91dSejakowatz bool 149c5d8f91dSejakowatz TMessageItemComparePolicy<T>::Compare(const T &lhs, const T &rhs) 150c5d8f91dSejakowatz { 151c5d8f91dSejakowatz return lhs == rhs; 152c5d8f91dSejakowatz } 153be45e998Sejakowatz //------------------------------------------------------------------------------ 154be45e998Sejakowatz template 155be45e998Sejakowatz < 156be45e998Sejakowatz class Type, // int32 157be45e998Sejakowatz type_code TypeCode, // B_INT32_TYPE 158be45e998Sejakowatz class FuncPolicy, // status_t Add(BMessage&, const char*, Type&) 159be45e998Sejakowatz // status_t Find(BMessage&, const char*, int32, Type*) 160be45e998Sejakowatz // Type QuickFind(BMessage&, const char*, int32) 161be45e998Sejakowatz // bool Has(BMessage&, const char*, int32) 162be45e998Sejakowatz // status_t Replace(BMessage&, const char*, int32, Type) 163e5b24a58Sejakowatz // status_t FindData(BMessage&, const char*, type_code, int32, const void**, ssize_t*) 164be45e998Sejakowatz class InitPolicy, // Type Zero() 165be45e998Sejakowatz // Type Test1() 166be45e998Sejakowatz // Type Test2() 167e5b24a58Sejakowatz // size_t SizeOf(const Type&) 168be45e998Sejakowatz // ArrayType Array() 169be45e998Sejakowatz // typedef XXX ArrayType 170e5b24a58Sejakowatz class AssertPolicy, // Type Zero() 171be45e998Sejakowatz // Type Invalid() 172e5b24a58Sejakowatz // bool Size(size_t, T&) 173e5b24a58Sejakowatz class ComparePolicy // bool Compare(const Type& lhs, const Type& rhs) 174e5b24a58Sejakowatz = TMessageItemComparePolicy<Type> 175be45e998Sejakowatz > 176159d60f9Sejakowatz class TMessageItemTest : public TestCase, public TypePolicy<Type> 177be45e998Sejakowatz { 178be45e998Sejakowatz public: 179be45e998Sejakowatz TMessageItemTest() {;} 180be45e998Sejakowatz TMessageItemTest(std::string name) : TestCase(name) {;} 181be45e998Sejakowatz 182be45e998Sejakowatz void MessageItemTest1(); 183be45e998Sejakowatz void MessageItemTest2(); 184be45e998Sejakowatz void MessageItemTest3(); 185be45e998Sejakowatz void MessageItemTest4(); 186be45e998Sejakowatz void MessageItemTest5(); 187be45e998Sejakowatz void MessageItemTest6(); 188be45e998Sejakowatz void MessageItemTest7(); 189be45e998Sejakowatz void MessageItemTest8(); 1900cc48ce6Sejakowatz void MessageItemTest9(); 1910cc48ce6Sejakowatz void MessageItemTest10(); 192be45e998Sejakowatz 193be45e998Sejakowatz static TestSuite* Suite(); 194be45e998Sejakowatz 195be45e998Sejakowatz typedef typename InitPolicy::ArrayType ArrayType; 196be45e998Sejakowatz }; 197be45e998Sejakowatz 198be45e998Sejakowatz 199be45e998Sejakowatz //------------------------------------------------------------------------------ 200be45e998Sejakowatz template 201be45e998Sejakowatz < 202be45e998Sejakowatz class Type, 203be45e998Sejakowatz type_code TypeCode, 204be45e998Sejakowatz class FuncPolicy, 205be45e998Sejakowatz class InitPolicy, 206e5b24a58Sejakowatz class AssertPolicy, 207e5b24a58Sejakowatz class ComparePolicy 208be45e998Sejakowatz > 209be45e998Sejakowatz void 210e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 211be45e998Sejakowatz MessageItemTest1() 212be45e998Sejakowatz { 213be45e998Sejakowatz BMessage msg; 214be45e998Sejakowatz Type out = InitPolicy::Zero(); 2152605a4f5Sejakowatz CPPUNIT_ASSERT(FuncPolicy::ShortFind(msg, "item", &out) == B_NAME_NOT_FOUND); 216be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_NAME_NOT_FOUND); 217e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, AssertPolicy::Invalid())); 218e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), 219e5b24a58Sejakowatz AssertPolicy::Invalid())); 220be45e998Sejakowatz CPPUNIT_ASSERT(!FuncPolicy::Has(msg, "item", 0)); 221be45e998Sejakowatz const void* ptr = &out; 222be45e998Sejakowatz ssize_t size; 223e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0, &ptr, &size) == 224be45e998Sejakowatz B_NAME_NOT_FOUND); 225be45e998Sejakowatz CPPUNIT_ASSERT(ptr == NULL); 226be45e998Sejakowatz } 227be45e998Sejakowatz //------------------------------------------------------------------------------ 228be45e998Sejakowatz template 229be45e998Sejakowatz < 230be45e998Sejakowatz class Type, 231be45e998Sejakowatz type_code TypeCode, 232be45e998Sejakowatz class FuncPolicy, 233be45e998Sejakowatz class InitPolicy, 234e5b24a58Sejakowatz class AssertPolicy, 235e5b24a58Sejakowatz class ComparePolicy 236be45e998Sejakowatz > 237be45e998Sejakowatz void 238e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 239be45e998Sejakowatz MessageItemTest2() 2400cc48ce6Sejakowatz { 241be45e998Sejakowatz BMessage msg; 242be45e998Sejakowatz Type in = InitPolicy::Test1(); 243be45e998Sejakowatz Type out = InitPolicy::Zero(); 244be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK); 245be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0)); 246e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), in)); 2472605a4f5Sejakowatz CPPUNIT_ASSERT(FuncPolicy::ShortFind(msg, "item", &out) == B_OK); 248be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK); 249e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in)); 250159d60f9Sejakowatz TypePtr pout = NULL; 251be45e998Sejakowatz ssize_t size; 252e5b24a58Sejakowatz status_t err = FuncPolicy::FindData(msg, "item", TypeCode, 0, 253e5b24a58Sejakowatz (const void**)&pout, &size); 254be45e998Sejakowatz CPPUNIT_ASSERT(err == B_OK); 255159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in)); 256159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 257be45e998Sejakowatz } 258be45e998Sejakowatz //------------------------------------------------------------------------------ 259be45e998Sejakowatz template 260be45e998Sejakowatz < 261be45e998Sejakowatz class Type, 262be45e998Sejakowatz type_code TypeCode, 263be45e998Sejakowatz class FuncPolicy, 264be45e998Sejakowatz class InitPolicy, 265e5b24a58Sejakowatz class AssertPolicy, 266e5b24a58Sejakowatz class ComparePolicy 267be45e998Sejakowatz > 268be45e998Sejakowatz void 269e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 270be45e998Sejakowatz MessageItemTest3() 271be45e998Sejakowatz { 272be45e998Sejakowatz BMessage msg; 273be45e998Sejakowatz Type in = InitPolicy::Test1(); 274be45e998Sejakowatz Type in2 = InitPolicy::Test2(); 275be45e998Sejakowatz Type out = InitPolicy::Zero(); 276be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK); 277be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Replace(msg, "item", 0, in2) == B_OK); 278be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0)); 279e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), in2)); 2802605a4f5Sejakowatz CPPUNIT_ASSERT(FuncPolicy::ShortFind(msg, "item", &out) == B_OK); 281be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK); 282e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in2)); 283be45e998Sejakowatz out = InitPolicy::Zero(); 284159d60f9Sejakowatz TypePtr pout; 285be45e998Sejakowatz ssize_t size; 286e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0, 287e5b24a58Sejakowatz (const void**)&pout, &size) == B_OK); 288159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in2)); 289159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 290be45e998Sejakowatz } 291be45e998Sejakowatz //------------------------------------------------------------------------------ 292be45e998Sejakowatz template 293be45e998Sejakowatz < 294be45e998Sejakowatz class Type, 295be45e998Sejakowatz type_code TypeCode, 296be45e998Sejakowatz class FuncPolicy, 297be45e998Sejakowatz class InitPolicy, 298e5b24a58Sejakowatz class AssertPolicy, 299e5b24a58Sejakowatz class ComparePolicy 300be45e998Sejakowatz > 301be45e998Sejakowatz void 302e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 303be45e998Sejakowatz MessageItemTest4() 304be45e998Sejakowatz { 305be45e998Sejakowatz BMessage msg; 306be45e998Sejakowatz Type out = InitPolicy::Zero(); 307be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 1, &out) == B_NAME_NOT_FOUND); 308e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, AssertPolicy::Invalid())); 309e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 1), 310e5b24a58Sejakowatz AssertPolicy::Invalid())); 311be45e998Sejakowatz CPPUNIT_ASSERT(!FuncPolicy::Has(msg, "item", 1)); 312be45e998Sejakowatz const void* ptr = &out; 313be45e998Sejakowatz ssize_t size; 314e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 1, &ptr, &size) == 315be45e998Sejakowatz B_NAME_NOT_FOUND); 316be45e998Sejakowatz CPPUNIT_ASSERT(ptr == NULL); 317be45e998Sejakowatz } 318be45e998Sejakowatz //------------------------------------------------------------------------------ 319be45e998Sejakowatz template 320be45e998Sejakowatz < 321be45e998Sejakowatz class Type, 322be45e998Sejakowatz type_code TypeCode, 323be45e998Sejakowatz class FuncPolicy, 324be45e998Sejakowatz class InitPolicy, 325e5b24a58Sejakowatz class AssertPolicy, 326e5b24a58Sejakowatz class ComparePolicy 327be45e998Sejakowatz > 328be45e998Sejakowatz void 329e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 330be45e998Sejakowatz MessageItemTest5() 331be45e998Sejakowatz { 332be45e998Sejakowatz BMessage msg; 333be45e998Sejakowatz ArrayType in = InitPolicy::Array(); 334be45e998Sejakowatz Type out = InitPolicy::Zero(); 335159d60f9Sejakowatz TypePtr pout; 336be45e998Sejakowatz ssize_t size; 337be45e998Sejakowatz 338*169ae266Sejakowatz for (uint32 i = 0; i < InitPolicy::Size(in); ++i) 339be45e998Sejakowatz { 340be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in[i]) == B_OK); 341be45e998Sejakowatz } 342be45e998Sejakowatz 343*169ae266Sejakowatz for (uint32 i = 0; i < InitPolicy::Size(in); ++i) 344be45e998Sejakowatz { 345be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", i)); 346e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", i), 347e5b24a58Sejakowatz in[i])); 348be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", i, &out) == B_OK); 349e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in[i])); 350e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, i, 351be45e998Sejakowatz (const void**)&pout, &size) == B_OK); 352159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in[i])); 353159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 354be45e998Sejakowatz } 355be45e998Sejakowatz } 356be45e998Sejakowatz //------------------------------------------------------------------------------ 357be45e998Sejakowatz template 358be45e998Sejakowatz < 359be45e998Sejakowatz class Type, 360be45e998Sejakowatz type_code TypeCode, 361be45e998Sejakowatz class FuncPolicy, 362be45e998Sejakowatz class InitPolicy, 363e5b24a58Sejakowatz class AssertPolicy, 364e5b24a58Sejakowatz class ComparePolicy 365be45e998Sejakowatz > 366be45e998Sejakowatz void 367e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 368be45e998Sejakowatz MessageItemTest6() 369be45e998Sejakowatz { 370be45e998Sejakowatz BMessage msg; 371be45e998Sejakowatz ArrayType in = InitPolicy::Array(); 372be45e998Sejakowatz Type in2 = InitPolicy::Test2(); 373be45e998Sejakowatz Type out = InitPolicy::Zero(); 374be45e998Sejakowatz const int rIndex = 2; 375be45e998Sejakowatz 376*169ae266Sejakowatz for (uint32 i = 0; i < InitPolicy::Size(in); ++i) 377be45e998Sejakowatz { 378be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in[i]) == B_OK); 379be45e998Sejakowatz } 380be45e998Sejakowatz 381be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Replace(msg, "item", rIndex, in2) == B_OK); 382be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", rIndex)); 383e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", rIndex), 384e5b24a58Sejakowatz in2)); 385be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", rIndex, &out) == B_OK); 386e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in2)); 387be45e998Sejakowatz out = InitPolicy::Zero(); 388159d60f9Sejakowatz TypePtr pout; 389be45e998Sejakowatz ssize_t size; 390e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, rIndex, 391be45e998Sejakowatz (const void**)&pout, &size) == B_OK); 392159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in2)); 393159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 394be45e998Sejakowatz } 395be45e998Sejakowatz //------------------------------------------------------------------------------ 396be45e998Sejakowatz template 397be45e998Sejakowatz < 398be45e998Sejakowatz class Type, 399be45e998Sejakowatz type_code TypeCode, 400be45e998Sejakowatz class FuncPolicy, 401be45e998Sejakowatz class InitPolicy, 402e5b24a58Sejakowatz class AssertPolicy, 403e5b24a58Sejakowatz class ComparePolicy 404be45e998Sejakowatz > 405be45e998Sejakowatz void 406e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 407be45e998Sejakowatz MessageItemTest7() 408be45e998Sejakowatz { 409be45e998Sejakowatz BMessage msg; 410be45e998Sejakowatz Type in = InitPolicy::Test1(); 411be45e998Sejakowatz Type out = InitPolicy::Zero(); 412159d60f9Sejakowatz CPPUNIT_ASSERT(FuncPolicy::AddData(msg, "item", TypeCode, AddressOf(in), 413159d60f9Sejakowatz InitPolicy::SizeOf(in), 414159d60f9Sejakowatz TypePolicy<Type>::FixedSize) == B_OK); 415be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", 0)); 416e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", 0), 417e5b24a58Sejakowatz in)); 4182605a4f5Sejakowatz CPPUNIT_ASSERT(FuncPolicy::ShortFind(msg, "item", &out) == B_OK); 419be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", 0, &out) == B_OK); 420e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in)); 421159d60f9Sejakowatz TypePtr pout = NULL; 422be45e998Sejakowatz ssize_t size; 423e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, 0, 424e5b24a58Sejakowatz (const void**)&pout, &size) == B_OK); 425159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in)); 426159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 427be45e998Sejakowatz } 428be45e998Sejakowatz //------------------------------------------------------------------------------ 429159d60f9Sejakowatz #include <stdio.h> 430be45e998Sejakowatz template 431be45e998Sejakowatz < 432be45e998Sejakowatz class Type, 433be45e998Sejakowatz type_code TypeCode, 434be45e998Sejakowatz class FuncPolicy, 435be45e998Sejakowatz class InitPolicy, 436e5b24a58Sejakowatz class AssertPolicy, 437e5b24a58Sejakowatz class ComparePolicy 438be45e998Sejakowatz > 439be45e998Sejakowatz void 440e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 441be45e998Sejakowatz MessageItemTest8() 442be45e998Sejakowatz { 443be45e998Sejakowatz BMessage msg; 444be45e998Sejakowatz ArrayType in = InitPolicy::Array(); 445be45e998Sejakowatz Type out = InitPolicy::Zero(); 446159d60f9Sejakowatz TypePtr pout; 447be45e998Sejakowatz ssize_t size; 448*169ae266Sejakowatz for (uint32 i = 0; i < InitPolicy::Size(in); ++i) 449be45e998Sejakowatz { 450e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::AddData(msg, "item", TypeCode, 451159d60f9Sejakowatz AddressOf(in[i]), InitPolicy::SizeOf(in[i]), 452159d60f9Sejakowatz TypePolicy<Type>::FixedSize) == B_OK); 453be45e998Sejakowatz } 454be45e998Sejakowatz 455*169ae266Sejakowatz for (uint32 i = 0; i < InitPolicy::Size(in); ++i) 456be45e998Sejakowatz { 457be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, "item", i)); 458e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, "item", i), 459e5b24a58Sejakowatz in[i])); 460be45e998Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, "item", i, &out) == B_OK); 461e5b24a58Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(out, in[i])); 462e5b24a58Sejakowatz CPPUNIT_ASSERT(FuncPolicy::FindData(msg, "item", TypeCode, i, 463be45e998Sejakowatz (const void**)&pout, &size) == B_OK); 464159d60f9Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(Dereference(pout), in[i])); 465159d60f9Sejakowatz CPPUNIT_ASSERT(AssertPolicy::Size(size, Dereference(pout))); 466be45e998Sejakowatz } 467be45e998Sejakowatz } 468be45e998Sejakowatz //------------------------------------------------------------------------------ 469be45e998Sejakowatz template 470be45e998Sejakowatz < 471be45e998Sejakowatz class Type, 472be45e998Sejakowatz type_code TypeCode, 473be45e998Sejakowatz class FuncPolicy, 474be45e998Sejakowatz class InitPolicy, 475e5b24a58Sejakowatz class AssertPolicy, 476e5b24a58Sejakowatz class ComparePolicy 477be45e998Sejakowatz > 4780cc48ce6Sejakowatz void 4790cc48ce6Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 4800cc48ce6Sejakowatz MessageItemTest9() 4810cc48ce6Sejakowatz { 4820cc48ce6Sejakowatz BMessage msg; 4830cc48ce6Sejakowatz Type in = InitPolicy::Test1(); 4840cc48ce6Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, NULL, in) == B_BAD_VALUE); 4850cc48ce6Sejakowatz } 4860cc48ce6Sejakowatz //------------------------------------------------------------------------------ 4870cc48ce6Sejakowatz template 4880cc48ce6Sejakowatz < 4890cc48ce6Sejakowatz class Type, 4900cc48ce6Sejakowatz type_code TypeCode, 4910cc48ce6Sejakowatz class FuncPolicy, 4920cc48ce6Sejakowatz class InitPolicy, 4930cc48ce6Sejakowatz class AssertPolicy, 4940cc48ce6Sejakowatz class ComparePolicy 4950cc48ce6Sejakowatz > 4960cc48ce6Sejakowatz void 4970cc48ce6Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 4980cc48ce6Sejakowatz MessageItemTest10() 4990cc48ce6Sejakowatz { 5000cc48ce6Sejakowatz BMessage msg; 5010cc48ce6Sejakowatz Type in = InitPolicy::Test1(); 5020cc48ce6Sejakowatz Type out = InitPolicy::Zero(); 5030cc48ce6Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK); 5040cc48ce6Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Has(msg, NULL, 0) == false); 5050cc48ce6Sejakowatz CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, NULL, 0), 5060cc48ce6Sejakowatz AssertPolicy::Invalid())); 5072605a4f5Sejakowatz CPPUNIT_ASSERT(FuncPolicy::ShortFind(msg, NULL, &out) == B_BAD_VALUE); 5080cc48ce6Sejakowatz CPPUNIT_ASSERT(FuncPolicy::Find(msg, NULL, 0, &out) == B_BAD_VALUE); 5090cc48ce6Sejakowatz TypePtr pout = NULL; 5100cc48ce6Sejakowatz ssize_t size; 5110cc48ce6Sejakowatz status_t err = FuncPolicy::FindData(msg, NULL, TypeCode, 0, 5120cc48ce6Sejakowatz (const void**)&pout, &size); 5130cc48ce6Sejakowatz CPPUNIT_ASSERT(err = B_BAD_VALUE); 5140cc48ce6Sejakowatz } 5150cc48ce6Sejakowatz //------------------------------------------------------------------------------ 5160cc48ce6Sejakowatz template 5170cc48ce6Sejakowatz < 5180cc48ce6Sejakowatz class Type, 5190cc48ce6Sejakowatz type_code TypeCode, 5200cc48ce6Sejakowatz class FuncPolicy, 5210cc48ce6Sejakowatz class InitPolicy, 5220cc48ce6Sejakowatz class AssertPolicy, 5230cc48ce6Sejakowatz class ComparePolicy 5240cc48ce6Sejakowatz > 525be45e998Sejakowatz TestSuite* 526e5b24a58Sejakowatz TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>:: 527be45e998Sejakowatz Suite() 528be45e998Sejakowatz { 529be45e998Sejakowatz TestSuite* suite = new TestSuite("BMessage::Add/Find/Replace/HasRect()"); 530be45e998Sejakowatz 531be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest1); 532be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest2); 533be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest3); 534be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest4); 535be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest5); 536be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest6); 537be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest7); 538be45e998Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest8); 5390cc48ce6Sejakowatz #ifndef TEST_R5 5400cc48ce6Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest9); 5410cc48ce6Sejakowatz ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest10); 5420cc48ce6Sejakowatz #endif 543be45e998Sejakowatz 544be45e998Sejakowatz return suite; 545be45e998Sejakowatz } 546be45e998Sejakowatz //------------------------------------------------------------------------------ 547be45e998Sejakowatz 548be45e998Sejakowatz #endif // MESSAGEITEMTEST_H 549be45e998Sejakowatz 550be45e998Sejakowatz /* 551be45e998Sejakowatz * $Log $ 552be45e998Sejakowatz * 553be45e998Sejakowatz * $Id $ 554be45e998Sejakowatz * 555be45e998Sejakowatz 556be45e998Sejakowatz */