Unit tests to ensure robust handling of bogus params to convenience funcs
plus fixes for the bugs they exposes. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3416 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -119,7 +119,7 @@ status_t BMessageBody::AddData(const char *name, const T1 &data, type_code type)
|
||||
{
|
||||
// The flattened message format in R5 only allows 1 byte
|
||||
// for the length of field names
|
||||
if (strlen(name) > 255) return B_BAD_VALUE;
|
||||
if (!name || (strlen(name) > 255)) return B_BAD_VALUE;
|
||||
|
||||
status_t err = B_OK;
|
||||
BMessageField* BMF = FindData(name, type, err);
|
||||
@@ -158,13 +158,16 @@ template<class T1>
|
||||
status_t BMessageBody::FindData(const char *name, int32 index, T1 *data,
|
||||
type_code type)
|
||||
{
|
||||
status_t err = B_OK;
|
||||
if (!name)
|
||||
{
|
||||
return B_BAD_VALUE;
|
||||
}
|
||||
if (index < 0)
|
||||
{
|
||||
err = B_BAD_INDEX;
|
||||
return B_BAD_INDEX;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
status_t err = B_OK;
|
||||
BMessageField* Item = FindData(name, type, err);
|
||||
if (Item)
|
||||
{
|
||||
@@ -184,7 +187,6 @@ status_t BMessageBody::FindData(const char *name, int32 index, T1 *data,
|
||||
err = B_BAD_INDEX;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
@@ -193,13 +195,16 @@ template<class T1>
|
||||
status_t BMessageBody::ReplaceData(const char *name, int32 index,
|
||||
const T1 &data, type_code type)
|
||||
{
|
||||
status_t err = B_OK;
|
||||
if (!name)
|
||||
{
|
||||
return B_BAD_VALUE;
|
||||
}
|
||||
if (index < 0)
|
||||
{
|
||||
err = B_BAD_INDEX;
|
||||
return B_BAD_INDEX;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
status_t err = B_OK;
|
||||
BMessageField* Item = FindData(name, type, err);
|
||||
if (Item)
|
||||
{
|
||||
@@ -218,7 +223,6 @@ status_t BMessageBody::ReplaceData(const char *name, int32 index,
|
||||
err = B_BAD_INDEX;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -667,7 +667,7 @@ status_t BMessage::PopSpecifier()
|
||||
return fBody->FindData<TYPE>(name, index, p, TYPESPEC); \
|
||||
} \
|
||||
status_t BMessage::Replace ## fnName(const char* name, TYPE val) \
|
||||
{ return ReplaceData(name, TYPESPEC, 0, &val, sizeof(TYPE)); } \
|
||||
{ return Replace ## fnName(name, 0, val); } \
|
||||
status_t BMessage::Replace ## fnName(const char *name, int32 index, TYPE val) \
|
||||
{ return fBody->ReplaceData<TYPE>(name, index, val, TYPESPEC); } \
|
||||
bool BMessage::Has ## fnName(const char* name, int32 n) const \
|
||||
|
||||
@@ -315,7 +315,7 @@ void BMessageBody::operator delete(void* ptr, size_t size)
|
||||
//------------------------------------------------------------------------------
|
||||
bool BMessageBody::HasData(const char* name, type_code t, int32 n) const
|
||||
{
|
||||
if (n < 0)
|
||||
if (!name || n < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -358,8 +358,13 @@ BMessageField* BMessageBody::FindData(const char* name, type_code type,
|
||||
status_t& err) const
|
||||
{
|
||||
BMessageField* Item = NULL;
|
||||
err = B_OK;
|
||||
if (!name)
|
||||
{
|
||||
err = B_BAD_VALUE;
|
||||
return Item;
|
||||
}
|
||||
|
||||
err = B_OK;
|
||||
TMsgDataMap::const_iterator i = fData.find(name);
|
||||
if (i == fData.end())
|
||||
{
|
||||
|
||||
@@ -182,6 +182,8 @@ class TMessageItemTest : public TestCase, public TypePolicy<Type>
|
||||
void MessageItemTest6();
|
||||
void MessageItemTest7();
|
||||
void MessageItemTest8();
|
||||
void MessageItemTest9();
|
||||
void MessageItemTest10();
|
||||
|
||||
static TestSuite* Suite();
|
||||
|
||||
@@ -229,7 +231,7 @@ template
|
||||
void
|
||||
TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>::
|
||||
MessageItemTest2()
|
||||
{debugger(__PRETTY_FUNCTION__);
|
||||
{
|
||||
BMessage msg;
|
||||
Type in = InitPolicy::Test1();
|
||||
Type out = InitPolicy::Zero();
|
||||
@@ -464,6 +466,52 @@ template
|
||||
class AssertPolicy,
|
||||
class ComparePolicy
|
||||
>
|
||||
void
|
||||
TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>::
|
||||
MessageItemTest9()
|
||||
{
|
||||
BMessage msg;
|
||||
Type in = InitPolicy::Test1();
|
||||
CPPUNIT_ASSERT(FuncPolicy::Add(msg, NULL, in) == B_BAD_VALUE);
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
template
|
||||
<
|
||||
class Type,
|
||||
type_code TypeCode,
|
||||
class FuncPolicy,
|
||||
class InitPolicy,
|
||||
class AssertPolicy,
|
||||
class ComparePolicy
|
||||
>
|
||||
void
|
||||
TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>::
|
||||
MessageItemTest10()
|
||||
{
|
||||
BMessage msg;
|
||||
Type in = InitPolicy::Test1();
|
||||
Type out = InitPolicy::Zero();
|
||||
CPPUNIT_ASSERT(FuncPolicy::Add(msg, "item", in) == B_OK);
|
||||
CPPUNIT_ASSERT(FuncPolicy::Has(msg, NULL, 0) == false);
|
||||
CPPUNIT_ASSERT(ComparePolicy::Compare(FuncPolicy::QuickFind(msg, NULL, 0),
|
||||
AssertPolicy::Invalid()));
|
||||
CPPUNIT_ASSERT(FuncPolicy::Find(msg, NULL, 0, &out) == B_BAD_VALUE);
|
||||
TypePtr pout = NULL;
|
||||
ssize_t size;
|
||||
status_t err = FuncPolicy::FindData(msg, NULL, TypeCode, 0,
|
||||
(const void**)&pout, &size);
|
||||
CPPUNIT_ASSERT(err = B_BAD_VALUE);
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
template
|
||||
<
|
||||
class Type,
|
||||
type_code TypeCode,
|
||||
class FuncPolicy,
|
||||
class InitPolicy,
|
||||
class AssertPolicy,
|
||||
class ComparePolicy
|
||||
>
|
||||
TestSuite*
|
||||
TMessageItemTest<Type, TypeCode, FuncPolicy, InitPolicy, AssertPolicy, ComparePolicy>::
|
||||
Suite()
|
||||
@@ -478,6 +526,10 @@ Suite()
|
||||
ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest6);
|
||||
ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest7);
|
||||
ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest8);
|
||||
#ifndef TEST_R5
|
||||
ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest9);
|
||||
ADD_TEMPLATE_TEST(BMessage, suite, TMessageItemTest TEMPLATE_TEST_PARAMS, MessageItemTest10);
|
||||
#endif
|
||||
|
||||
return suite;
|
||||
}
|
||||
|
||||
@@ -1,48 +1,48 @@
|
||||
#define __SGI_STL_INTERNAL_BVECTOR_H
|
||||
//#include "MessageTest.h"
|
||||
#include "../common.h"
|
||||
//#include "MessageConstructTest.h"
|
||||
//#include "MessageOpAssignTest.h"
|
||||
//#include "MessageEasyFindTest.h"
|
||||
//#include "MessageBoolItemTest.h"
|
||||
//#include "MessageInt8ItemTest.h"
|
||||
//#include "MessageInt16ItemTest.h"
|
||||
//#include "MessageInt32ItemTest.h"
|
||||
//#include "MessageInt64ItemTest.h"
|
||||
//#include "MessageBRectItemTest.h"
|
||||
//#include "MessageBPointItemTest.h"
|
||||
//#include "MessageFloatItemTest.h"
|
||||
//#include "MessageDoubleItemTest.h"
|
||||
//#include "MessageMessageItemTest.h"
|
||||
//#include "MessageRefItemTest.h"
|
||||
//#include "MessageBStringItemTest.h"
|
||||
//#include "MessageCStringItemTest.h"
|
||||
//#include "MessageMessengerItemTest.h"
|
||||
//#include "MessagePointerItemTest.h"
|
||||
#include "MessageConstructTest.h"
|
||||
#include "MessageOpAssignTest.h"
|
||||
#include "MessageEasyFindTest.h"
|
||||
#include "MessageBoolItemTest.h"
|
||||
#include "MessageInt8ItemTest.h"
|
||||
#include "MessageInt16ItemTest.h"
|
||||
#include "MessageInt32ItemTest.h"
|
||||
#include "MessageInt64ItemTest.h"
|
||||
#include "MessageBRectItemTest.h"
|
||||
#include "MessageBPointItemTest.h"
|
||||
#include "MessageFloatItemTest.h"
|
||||
#include "MessageDoubleItemTest.h"
|
||||
#include "MessageMessageItemTest.h"
|
||||
#include "MessageRefItemTest.h"
|
||||
#include "MessageBStringItemTest.h"
|
||||
#include "MessageCStringItemTest.h"
|
||||
#include "MessageMessengerItemTest.h"
|
||||
#include "MessagePointerItemTest.h"
|
||||
#include "MessageFlattenableItemTest.h"
|
||||
|
||||
Test* MessageTestSuite()
|
||||
{
|
||||
TestSuite* tests = new TestSuite();
|
||||
|
||||
// tests->addTest(TMessageConstructTest::Suite());
|
||||
// tests->addTest(TMessageOpAssignTest::Suite());
|
||||
// tests->addTest(TMessageEasyFindTest::Suite());
|
||||
// tests->addTest(TMessageBoolItemTest::Suite());
|
||||
// tests->addTest(TMessageInt8ItemTest::Suite());
|
||||
// tests->addTest(TMessageInt16ItemTest::Suite());
|
||||
// tests->addTest(TMessageInt32ItemTest::Suite());
|
||||
// tests->addTest(TMessageInt64ItemTest::Suite());
|
||||
// tests->addTest(TMessageBRectItemTest::Suite());
|
||||
// tests->addTest(TMessageBPointItemTest::Suite());
|
||||
// tests->addTest(TMessageFloatItemTest::Suite());
|
||||
// tests->addTest(TMessageDoubleItemTest::Suite());
|
||||
// tests->addTest(TMessageMessageItemTest::Suite());
|
||||
// tests->addTest(TMessageRefItemTest::Suite());
|
||||
// tests->addTest(TMessageBStringItemTest::Suite());
|
||||
// tests->addTest(TMessageCStringItemTest::Suite());
|
||||
// tests->addTest(TMessageMessengerItemTest::Suite());
|
||||
// tests->addTest(TMessagePointerItemTest::Suite());
|
||||
tests->addTest(TMessageConstructTest::Suite());
|
||||
tests->addTest(TMessageOpAssignTest::Suite());
|
||||
tests->addTest(TMessageEasyFindTest::Suite());
|
||||
tests->addTest(TMessageBoolItemTest::Suite());
|
||||
tests->addTest(TMessageInt8ItemTest::Suite());
|
||||
tests->addTest(TMessageInt16ItemTest::Suite());
|
||||
tests->addTest(TMessageInt32ItemTest::Suite());
|
||||
tests->addTest(TMessageInt64ItemTest::Suite());
|
||||
tests->addTest(TMessageBRectItemTest::Suite());
|
||||
tests->addTest(TMessageBPointItemTest::Suite());
|
||||
tests->addTest(TMessageFloatItemTest::Suite());
|
||||
tests->addTest(TMessageDoubleItemTest::Suite());
|
||||
tests->addTest(TMessageMessageItemTest::Suite());
|
||||
tests->addTest(TMessageRefItemTest::Suite());
|
||||
tests->addTest(TMessageBStringItemTest::Suite());
|
||||
tests->addTest(TMessageCStringItemTest::Suite());
|
||||
tests->addTest(TMessageMessengerItemTest::Suite());
|
||||
tests->addTest(TMessagePointerItemTest::Suite());
|
||||
tests->addTest(TMessageFlattenableItemTest::Suite());
|
||||
|
||||
return tests;
|
||||
|
||||
Reference in New Issue
Block a user