From 18a8d114f56e43ab83a677b1ea60e59cad9379fa Mon Sep 17 00:00:00 2001 From: ejakowatz Date: Mon, 26 May 2003 01:12:23 +0000 Subject: [PATCH] Tests for BString convenience functions, plus a fix to BMessageField for a bug revealed by those tests. Gotta love those unit tests! git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3327 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/app/MessageField.h | 7 + .../app/bmessage/MessageBStringItemTest.h | 147 ++++++++++++++++++ .../app/bmessage/MessageMessageItemTest.h | 2 +- src/tests/kits/app/bmessage/MessageTest.cpp | 8 +- 4 files changed, 159 insertions(+), 5 deletions(-) create mode 100644 src/tests/kits/app/bmessage/MessageBStringItemTest.h diff --git a/headers/private/app/MessageField.h b/headers/private/app/MessageField.h index 89b3e2c6fd..b55f0497ea 100644 --- a/headers/private/app/MessageField.h +++ b/headers/private/app/MessageField.h @@ -590,6 +590,13 @@ struct BMessageFieldGetDataPolicy { return data->Buffer(); } }; //------------------------------------------------------------------------------ +template<> +struct BMessageFieldGetDataPolicy +{ + inline static const void* GetData(const BString* data) + { return data->String(); } +}; +//------------------------------------------------------------------------------ } // namespace BPrivate diff --git a/src/tests/kits/app/bmessage/MessageBStringItemTest.h b/src/tests/kits/app/bmessage/MessageBStringItemTest.h new file mode 100644 index 0000000000..40cf6fa882 --- /dev/null +++ b/src/tests/kits/app/bmessage/MessageBStringItemTest.h @@ -0,0 +1,147 @@ +//------------------------------------------------------------------------------ +// MessageStringItemTest.h +// +//------------------------------------------------------------------------------ + +#ifndef MESSAGESTRINGITEMTEST_H +#define MESSAGESTRINGITEMTEST_H + +// Standard Includes ----------------------------------------------------------- + +// System Includes ------------------------------------------------------------- +#include +#include + +// Project Includes ------------------------------------------------------------ + +// Local Includes -------------------------------------------------------------- +#include "MessageItemTest.h" + +// Local Defines --------------------------------------------------------------- + +// Globals --------------------------------------------------------------------- + +struct TBStringFuncPolicy +{ + static status_t Add(BMessage& msg, const char* name, BString& data); + static status_t Find(BMessage& msg, const char* name, int32 index, + BString* data); + static BString QuickFind(BMessage& msg, const char* name, int32 index); + static bool Has(BMessage& msg, const char* name, int32 index); + static status_t Replace(BMessage& msg, const char* name, int32 index, + BString& data); + static status_t AddData(BMessage& msg, const char* name, type_code type, + const BString* data, ssize_t size); + static status_t FindData(BMessage& msg, const char* name, type_code type, + int32 index, const void** data, ssize_t* size); + + private: + static BString sStr; +}; +BString TBStringFuncPolicy::sStr; +//------------------------------------------------------------------------------ +status_t TBStringFuncPolicy::Add(BMessage& msg, const char* name, + BString& data) +{ + return msg.AddString(name, data); +} +//------------------------------------------------------------------------------ +status_t TBStringFuncPolicy::Find(BMessage& msg, const char* name, + int32 index, BString* data) +{ + return msg.FindString(name, index, data); +} +//------------------------------------------------------------------------------ +BString TBStringFuncPolicy::QuickFind(BMessage& msg, const char* name, + int32 index) +{ + BString data; + msg.FindString(name, index, &data); + return data; +} +//------------------------------------------------------------------------------ +bool TBStringFuncPolicy::Has(BMessage& msg, const char* name, + int32 index) +{ + return msg.HasString(name, index); +} +//------------------------------------------------------------------------------ +status_t TBStringFuncPolicy::Replace(BMessage& msg, const char* name, + int32 index, BString& data) +{ + return msg.ReplaceString(name, index, data); +} +//------------------------------------------------------------------------------ +status_t TBStringFuncPolicy::AddData(BMessage& msg, const char* name, + type_code type, const BString* data, + ssize_t size) +{ + return msg.AddData(name, type, (const void*)data->String(), size, + false); +} +//------------------------------------------------------------------------------ +status_t TBStringFuncPolicy::FindData(BMessage& msg, const char* name, + type_code type, int32 index, + const void** data, ssize_t* size) +{ + *data = NULL; + char* ptr; + status_t err = msg.FindData(name, type, index, (const void**)&ptr, size); + if (!err) + { + sStr = ptr; + *(BString**)data = &sStr; + } + + return err; +} +//------------------------------------------------------------------------------ + + +struct TBStringInitPolicy : public ArrayTypeBase +{ + inline static BString Zero() { return BString(); } + inline static BString Test1() { return "Test1"; } + inline static BString Test2() { return "Supercalafragilistricexpialadocious"; } + inline static size_t SizeOf(const BString& s) { return s.Length() + 1; } + inline static ArrayType Array() + { + ArrayType array; + array.push_back(Zero()); + array.push_back(Test1()); + array.push_back(Test2()); + return array; + } +}; +//------------------------------------------------------------------------------ +struct TBStringAssertPolicy +{ + inline static BString Zero() { return BString(); } + inline static BString Invalid() { return BString(); } + static bool Size(size_t size, BString& msg) + ;//{ return size == msg.FlattenedSize(); } +}; +bool TBStringAssertPolicy::Size(size_t size, BString& data) +{ + return size == data.Length() + 1; +} +//------------------------------------------------------------------------------ +typedef TMessageItemTest +< + BString, + B_STRING_TYPE, + TBStringFuncPolicy, + TBStringInitPolicy, + TBStringAssertPolicy +> +TMessageBStringItemTest; + +#endif // MESSAGESTRINGITEMTEST_H + +/* + * $Log $ + * + * $Id $ + * + */ + diff --git a/src/tests/kits/app/bmessage/MessageMessageItemTest.h b/src/tests/kits/app/bmessage/MessageMessageItemTest.h index b6a6f598f2..3b58814acb 100644 --- a/src/tests/kits/app/bmessage/MessageMessageItemTest.h +++ b/src/tests/kits/app/bmessage/MessageMessageItemTest.h @@ -190,7 +190,7 @@ struct TMessageAssertPolicy static bool Size(size_t size, BMessage& msg) ;//{ return size == msg.FlattenedSize(); } }; - bool TMessageAssertPolicy::Size(size_t size, BMessage& msg) +bool TMessageAssertPolicy::Size(size_t size, BMessage& msg) { ssize_t msgSize = msg.FlattenedSize(); return size == msgSize; diff --git a/src/tests/kits/app/bmessage/MessageTest.cpp b/src/tests/kits/app/bmessage/MessageTest.cpp index 5eac8cb209..4468e9e0d2 100644 --- a/src/tests/kits/app/bmessage/MessageTest.cpp +++ b/src/tests/kits/app/bmessage/MessageTest.cpp @@ -14,9 +14,9 @@ #include "MessageFloatItemTest.h" #include "MessageDoubleItemTest.h" #include "MessageMessageItemTest.h" -//#ifdef TEST_OBOS #include "MessageRefItemTest.h" -//#endif +#include "MessageBStringItemTest.h" +#include "MessageCStringItemTest.h" Test* MessageTestSuite() { @@ -35,9 +35,9 @@ Test* MessageTestSuite() tests->addTest(TMessageFloatItemTest::Suite()); tests->addTest(TMessageDoubleItemTest::Suite()); tests->addTest(TMessageMessageItemTest::Suite()); -//#ifdef TEST_OBOS tests->addTest(TMessageRefItemTest::Suite()); -//#endif + tests->addTest(TMessageBStringItemTest::Suite()); + tests->addTest(TMessageCStringItemTest::Suite()); return tests; }