DriverSettingsMessageAdapter: fixed converter signature.

* The ConvertFromDriverSettings() method missed the current value
  index.
* Completed unit tests, and enabled them all.
This commit is contained in:
Axel Dörfler
2015-03-27 13:25:28 +01:00
parent 9f218b4e2d
commit 687d0bc272
5 changed files with 84 additions and 15 deletions
@@ -21,7 +21,7 @@ public:
virtual status_t ConvertFromDriverSettings(
const driver_parameter& parameter,
const char* name, uint32 type,
const char* name, int32 index, uint32 type,
BMessage& target) = 0;
virtual status_t ConvertToDriverSettings(const BMessage& source,
const char* name, int32 index,
@@ -45,7 +45,7 @@ class InterfaceAddressFamilyConverter : public DriverSettingsConverter {
public:
virtual status_t ConvertFromDriverSettings(
const driver_parameter& parameter,
const char* name, uint32 type,
const char* name, int32 index, uint32 type,
BMessage& target);
virtual status_t ConvertToDriverSettings(const BMessage& source,
const char* name, int32 index,
@@ -266,8 +266,8 @@ type_for_protocol(int protocol)
status_t
InterfaceAddressFamilyConverter::ConvertFromDriverSettings(
const driver_parameter& parameter, const char* name, uint32 type,
BMessage& target)
const driver_parameter& parameter, const char* name, int32 index,
uint32 type, BMessage& target)
{
return B_NOT_SUPPORTED;
}
@@ -171,7 +171,7 @@ DriverSettingsMessageAdapter::_AddParameter(const driver_parameter& parameter,
if (settingsTemplate.converter != NULL) {
status_t status
= settingsTemplate.converter->ConvertFromDriverSettings(
parameter, settingsTemplate.name, settingsTemplate.type,
parameter, settingsTemplate.name, i, settingsTemplate.type,
message);
if (status == B_OK)
continue;
@@ -30,8 +30,6 @@ public:
status_t ToMessage(const settings_template* settingsTemplate,
BMessage& message)
{
message.MakeEmpty();
DriverSettingsMessageAdapter adapter;
return adapter.ConvertFromDriverSettings(
*get_driver_settings(fSettings), settingsTemplate, message);
@@ -107,6 +105,7 @@ DriverSettingsMessageAdapterTest::TestPrimitivesToMessage()
CPPUNIT_ASSERT_EQUAL(10, message.CountNames(B_BOOL_TYPE));
CPPUNIT_ASSERT_EQUAL(2, message.CountNames(B_INT32_TYPE));
CPPUNIT_ASSERT_EQUAL(2, message.CountNames(B_STRING_TYPE));
CPPUNIT_ASSERT_EQUAL(14, message.CountNames(B_ANY_TYPE));
// bool values
CPPUNIT_ASSERT_EQUAL_MESSAGE("bool1", true, message.GetBool("bool1"));
@@ -141,12 +140,33 @@ DriverSettingsMessageAdapterTest::TestPrimitivesToMessage()
void
DriverSettingsMessageAdapterTest::TestMessage()
{
}
const settings_template kSubTemplate[] = {
{B_BOOL_TYPE, "bool", NULL},
{}
};
const settings_template kTemplate[] = {
{B_MESSAGE_TYPE, "message", kSubTemplate},
{}
};
Settings settingsA("message {\n"
" bool\n"
"}\n");
BMessage message;
CPPUNIT_ASSERT_EQUAL(B_OK, settingsA.ToMessage(kTemplate, message));
BMessage subMessage;
CPPUNIT_ASSERT_EQUAL(B_OK, message.FindMessage("message", &subMessage));
CPPUNIT_ASSERT_EQUAL_MESSAGE("bool", true, subMessage.GetBool("bool"));
CPPUNIT_ASSERT_EQUAL(1, message.CountNames(B_ANY_TYPE));
Settings settingsB("message {\n"
"}\n");
CPPUNIT_ASSERT_EQUAL(B_OK, settingsB.ToMessage(kTemplate, message));
CPPUNIT_ASSERT_EQUAL(B_OK, message.FindMessage("message", &subMessage));
CPPUNIT_ASSERT_EQUAL(1, message.CountNames(B_ANY_TYPE));
void
DriverSettingsMessageAdapterTest::TestEmptyMessage()
{
Settings settingsC("\n");
CPPUNIT_ASSERT_EQUAL(B_OK, settingsC.ToMessage(kTemplate, message));
CPPUNIT_ASSERT(message.IsEmpty());
}
@@ -209,18 +229,67 @@ DriverSettingsMessageAdapterTest::TestParent()
}
void
DriverSettingsMessageAdapterTest::TestConverter()
{
class InterfaceAddressFamilyConverter : public DriverSettingsConverter {
public:
status_t ConvertFromDriverSettings(const driver_parameter& parameter,
const char* name, int32 index, uint32 type, BMessage& target)
{
const char* value = parameter.values[index];
if (value[0] == '0' && value[1] == 'x')
return target.AddInt32(name, (int32)strtol(value, NULL, 0));
return B_NOT_SUPPORTED;
}
status_t ConvertToDriverSettings(const BMessage& source,
const char* name, int32 index, uint32 type, BString& value)
{
int32 intValue;
if (index == 0 && source.FindInt32(name, 0, &intValue) == B_OK) {
BString string;
string.SetToFormat("0x%" B_PRIu32, intValue);
value << string;
return B_OK;
}
return B_NOT_SUPPORTED;
}
} converter;
const settings_template kTemplate[] = {
{B_INT32_TYPE, "test", NULL, false, &converter},
{}
};
Settings settings("test 0x2a 43");
BMessage message;
CPPUNIT_ASSERT_EQUAL(B_OK, settings.ToMessage(kTemplate, message));
CPPUNIT_ASSERT_EQUAL(42, message.GetInt32("test", 0, 0));
CPPUNIT_ASSERT_EQUAL(43, message.GetInt32("test", 1, 0));
CPPUNIT_ASSERT_EQUAL(1, message.CountNames(B_ANY_TYPE));
}
/*static*/ void
DriverSettingsMessageAdapterTest::AddTests(BTestSuite& parent)
{
CppUnit::TestSuite& suite = *new CppUnit::TestSuite(
"DriverSettingsMessageAdapterTest");
// suite.addTest(new CppUnit::TestCaller<DriverSettingsMessageAdapterTest>(
// "DriverSettingsMessageAdapterTest::TestPrimitivesToMessage",
// &DriverSettingsMessageAdapterTest::TestPrimitivesToMessage));
suite.addTest(new CppUnit::TestCaller<DriverSettingsMessageAdapterTest>(
"DriverSettingsMessageAdapterTest::TestPrimitivesToMessage",
&DriverSettingsMessageAdapterTest::TestPrimitivesToMessage));
suite.addTest(new CppUnit::TestCaller<DriverSettingsMessageAdapterTest>(
"DriverSettingsMessageAdapterTest::TestMessage",
&DriverSettingsMessageAdapterTest::TestMessage));
suite.addTest(new CppUnit::TestCaller<DriverSettingsMessageAdapterTest>(
"DriverSettingsMessageAdapterTest::TestParent",
&DriverSettingsMessageAdapterTest::TestParent));
suite.addTest(new CppUnit::TestCaller<DriverSettingsMessageAdapterTest>(
"DriverSettingsMessageAdapterTest::TestConverter",
&DriverSettingsMessageAdapterTest::TestConverter));
parent.addTest("DriverSettingsMessageAdapterTest", &suite);
}
@@ -17,8 +17,8 @@ public:
void TestPrimitivesToMessage();
void TestMessage();
void TestEmptyMessage();
void TestParent();
void TestConverter();
static void AddTests(BTestSuite& suite);
};