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:
ejakowatz
2003-06-03 23:22:08 +00:00
parent 575526ff34
commit 0cc48ce6f9
5 changed files with 141 additions and 80 deletions
+15 -11
View File
@@ -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;
}
+1 -1
View File
@@ -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 \
+7 -2
View File
@@ -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())
{
+53 -1
View File
@@ -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;
}
+36 -36
View File
@@ -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;