From 687d0bc272d1070b797fac07b0f854377605c688 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Mon, 23 Mar 2015 16:54:41 +0000 Subject: [PATCH] DriverSettingsMessageAdapter: fixed converter signature. * The ConvertFromDriverSettings() method missed the current value index. * Completed unit tests, and enabled them all. --- .../shared/DriverSettingsMessageAdapter.h | 2 +- .../network/libnetapi/NetworkSettings.cpp | 6 +- .../shared/DriverSettingsMessageAdapter.cpp | 2 +- .../DriverSettingsMessageAdapterTest.cpp | 87 +++++++++++++++++-- .../shared/DriverSettingsMessageAdapterTest.h | 2 +- 5 files changed, 84 insertions(+), 15 deletions(-) diff --git a/headers/private/shared/DriverSettingsMessageAdapter.h b/headers/private/shared/DriverSettingsMessageAdapter.h index f08aa53f7a..e55b859fa2 100644 --- a/headers/private/shared/DriverSettingsMessageAdapter.h +++ b/headers/private/shared/DriverSettingsMessageAdapter.h @@ -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, diff --git a/src/kits/network/libnetapi/NetworkSettings.cpp b/src/kits/network/libnetapi/NetworkSettings.cpp index 85161f4011..662ec8aa4c 100644 --- a/src/kits/network/libnetapi/NetworkSettings.cpp +++ b/src/kits/network/libnetapi/NetworkSettings.cpp @@ -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; } diff --git a/src/kits/shared/DriverSettingsMessageAdapter.cpp b/src/kits/shared/DriverSettingsMessageAdapter.cpp index 526797c17a..27c6f2f762 100644 --- a/src/kits/shared/DriverSettingsMessageAdapter.cpp +++ b/src/kits/shared/DriverSettingsMessageAdapter.cpp @@ -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; diff --git a/src/tests/kits/shared/DriverSettingsMessageAdapterTest.cpp b/src/tests/kits/shared/DriverSettingsMessageAdapterTest.cpp index a989b615d5..8deef2a21d 100644 --- a/src/tests/kits/shared/DriverSettingsMessageAdapterTest.cpp +++ b/src/tests/kits/shared/DriverSettingsMessageAdapterTest.cpp @@ -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::TestPrimitivesToMessage", -// &DriverSettingsMessageAdapterTest::TestPrimitivesToMessage)); + suite.addTest(new CppUnit::TestCaller( + "DriverSettingsMessageAdapterTest::TestPrimitivesToMessage", + &DriverSettingsMessageAdapterTest::TestPrimitivesToMessage)); + suite.addTest(new CppUnit::TestCaller( + "DriverSettingsMessageAdapterTest::TestMessage", + &DriverSettingsMessageAdapterTest::TestMessage)); suite.addTest(new CppUnit::TestCaller( "DriverSettingsMessageAdapterTest::TestParent", &DriverSettingsMessageAdapterTest::TestParent)); + suite.addTest(new CppUnit::TestCaller( + "DriverSettingsMessageAdapterTest::TestConverter", + &DriverSettingsMessageAdapterTest::TestConverter)); parent.addTest("DriverSettingsMessageAdapterTest", &suite); } diff --git a/src/tests/kits/shared/DriverSettingsMessageAdapterTest.h b/src/tests/kits/shared/DriverSettingsMessageAdapterTest.h index 934cc35062..11ce9fdc38 100644 --- a/src/tests/kits/shared/DriverSettingsMessageAdapterTest.h +++ b/src/tests/kits/shared/DriverSettingsMessageAdapterTest.h @@ -17,8 +17,8 @@ public: void TestPrimitivesToMessage(); void TestMessage(); - void TestEmptyMessage(); void TestParent(); + void TestConverter(); static void AddTests(BTestSuite& suite); };