Files
haiku-beta6/src/tests/kits/app/bmessage/MessageBoolItemTest.h
T
ejakowatz be45e9989d The new, super-templatized tests for all those handy (and yet annoying to
write tests for) BMessage convenience functions.


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2950 a95241bf-73f2-0310-859d-f6bbb57e9c96
2003-03-19 04:24:18 +00:00

115 lines
2.4 KiB
C++

//------------------------------------------------------------------------------
// MessageBoolItemTest.h
//
//------------------------------------------------------------------------------
#ifndef MESSAGEBOOLITEMTEST_H
#define MESSAGEBOOLITEMTEST_H
// Standard Includes -----------------------------------------------------------
// System Includes -------------------------------------------------------------
// Project Includes ------------------------------------------------------------
// Local Includes --------------------------------------------------------------
#include "MessageItemTest.h"
// Local Defines ---------------------------------------------------------------
// Globals ---------------------------------------------------------------------
typedef TMessageItemFuncPolicy
<
bool,
&BMessage::AddBool,
&BMessage::FindBool,
&BMessage::FindBool,
&BMessage::HasBool,
&BMessage::ReplaceBool
>
TBoolFuncPolicy;
template<>
struct ArrayTypeBase<bool>
{
class ArrayType
{
public:
ArrayType() : array(NULL), size(0) {;}
ArrayType(const ArrayType& rhs) : array(NULL), size(0)
{ *this = rhs; }
ArrayType(bool* data, uint32 len) : array(NULL), size(0)
{ Assign(data, len); }
~ArrayType() { if (array) delete[] array; }
ArrayType& operator=(const ArrayType& rhs)
{
if (this != &rhs)
Assign(rhs.array, rhs.size);
return *this;
};
uint32 Size() { return size; }
bool& operator[](int index)
{
// We're just gonna let a segfault happen
return array[index];
}
private:
void Assign(bool* data, uint32 len)
{
size = len;
if (array)
delete[] array;
array = new bool[Size()];
memcpy(array, data, Size());
}
bool* array;
uint32 size;
};
typedef uint32 SizeType;
static SizeType Size(ArrayType& array) { return array.Size(); }
};
struct TBoolInitPolicy : public ArrayTypeBase<bool>
{
inline static bool Zero() { return false; }
inline static bool Test1() { return true; }
inline static bool Test2() { return false; }
inline static ArrayType Array()
{
static bool array[] = { true, true, true };
return ArrayType(array, 3);
}
};
struct TBoolAssertPolicy
{
inline static bool Zero() { return false; }
inline static bool Invalid() { return false;}
};
typedef TMessageItemTest
<
bool,
B_BOOL_TYPE,
TBoolFuncPolicy,
TBoolInitPolicy,
TBoolAssertPolicy
>
TMessageBoolItemTest;
#endif // MESSAGEBOOLITEMTEST_H
/*
* $Log $
*
* $Id $
*
*/