[haiku-commits] BRANCH axeld-github.network-preferences [8f6c99f53118] in src: tests/kits/shared kits/shared

  • From: axeld-github.network-preferences <community@xxxxxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 20 Mar 2015 23:16:38 +0100 (CET)

added 1 changeset to branch 'refs/remotes/axeld-github/network-preferences'
old head: d044166a7a66af2b7bb9ab2f57cf4860db7daa67
new head: 8f6c99f53118b386a4c2111309ef3f50e30e6aa3
overview: https://github.com/axeld/haiku/compare/d044166a7a66...8f6c99f53118

----------------------------------------------------------------------------

8f6c99f53118: DriverSettingsMessageAdapter: fixed various issues.
  
  * _AddParameter() would ignore all BMessage::Add*() errors.
  * _ConvertFromDriverParameter() would ignore most intermediate error,
    but would fail badly over some incorrect settings file.
  * Also, it checked for the parent value for each parameter, which
    doesn't make any sense, but would add as often as there are
    parameters -- which also may be none, in which case the value
    got ignored.

                                   [ Axel Dörfler <axeld@xxxxxxxxxxxxxxxx> ]

----------------------------------------------------------------------------

Commit:      8f6c99f53118b386a4c2111309ef3f50e30e6aa3
Author:      Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
Date:        Fri Mar 20 23:09:11 2015 UTC

----------------------------------------------------------------------------

5 files changed, 290 insertions(+), 21 deletions(-)
src/kits/shared/DriverSettingsMessageAdapter.cpp |  53 +++--
.../shared/DriverSettingsMessageAdapterTest.cpp  | 226 +++++++++++++++++++
.../shared/DriverSettingsMessageAdapterTest.h    |  27 +++
src/tests/kits/shared/Jamfile                    |   1 +
src/tests/kits/shared/SharedTestAddon.cpp        |   4 +-

----------------------------------------------------------------------------

diff --git a/src/kits/shared/DriverSettingsMessageAdapter.cpp 
b/src/kits/shared/DriverSettingsMessageAdapter.cpp
index c3ca6bc..526797c 100644
--- a/src/kits/shared/DriverSettingsMessageAdapter.cpp
+++ b/src/kits/shared/DriverSettingsMessageAdapter.cpp
@@ -179,24 +179,36 @@ DriverSettingsMessageAdapter::_AddParameter(const 
driver_parameter& parameter,
                                return status;
                }
 
+               status_t status = B_OK;
+
                switch (settingsTemplate.type) {
                        case B_STRING_TYPE:
-                               message.AddString(settingsTemplate.name, 
parameter.values[i]);
+                               status = 
message.AddString(settingsTemplate.name,
+                                       parameter.values[i]);
                                break;
                        case B_INT32_TYPE:
-                               message.AddInt32(settingsTemplate.name,
+                               status = message.AddInt32(settingsTemplate.name,
                                        atoi(parameter.values[i]));
                                break;
                        case B_BOOL_TYPE:
-                               if (!strcasecmp(parameter.values[i], "true")
+                       {
+                               bool value=!strcasecmp(parameter.values[i], 
"true")
                                        || !strcasecmp(parameter.values[i], 
"on")
+                                       || !strcasecmp(parameter.values[i], 
"yes")
                                        || !strcasecmp(parameter.values[i], 
"enabled")
-                                       || !strcasecmp(parameter.values[i], 
"1"))
-                                       message.AddBool(settingsTemplate.name, 
true);
-                               else
-                                       message.AddBool(settingsTemplate.name, 
false);
+                                       || !strcasecmp(parameter.values[i], 
"1");
+                               status = message.AddBool(settingsTemplate.name, 
value);
+                               break;
+                       }
+                       case B_MESSAGE_TYPE:
+                               // Is handled outside of this method
                                break;
+
+                       default:
+                               return B_BAD_VALUE;
                }
+               if (status != B_OK)
+                       return status;
        }
        if (settingsTemplate.type == B_BOOL_TYPE && parameter.value_count == 0) 
{
                // Empty boolean parameters are always true
@@ -214,32 +226,33 @@ DriverSettingsMessageAdapter::_ConvertFromDriverParameter(
 {
        settingsTemplate = _FindSettingsTemplate(settingsTemplate, 
parameter.name);
        if (settingsTemplate == NULL) {
+               // We almost silently ignore this kind of issues
                fprintf(stderr, "unknown parameter %s\n", parameter.name);
-               return B_BAD_VALUE;
+               return B_OK;
        }
 
-       _AddParameter(parameter, *settingsTemplate, message);
+       status_t status = _AddParameter(parameter, *settingsTemplate, message);
+       if (status != B_OK)
+               return status;
 
-       if (settingsTemplate->type == B_MESSAGE_TYPE
-               && parameter.parameter_count > 0) {
-               status_t status = B_OK;
+       if (settingsTemplate->type == B_MESSAGE_TYPE) {
                BMessage subMessage;
                for (int32 j = 0; j < parameter.parameter_count; j++) {
                        status = 
_ConvertFromDriverParameter(parameter.parameters[j],
                                settingsTemplate->sub_template, subMessage);
                        if (status != B_OK)
-                               break;
-
-                       const settings_template* parentValueTemplate
-                               = _FindParentValueTemplate(settingsTemplate);
-                       if (parentValueTemplate != NULL)
-                               _AddParameter(parameter, *parentValueTemplate, 
subMessage);
+                               return status;
                }
+
+               const settings_template* parentValueTemplate
+                       = _FindParentValueTemplate(settingsTemplate);
+               if (parentValueTemplate != NULL)
+                       status = _AddParameter(parameter, *parentValueTemplate, 
subMessage);
                if (status == B_OK)
-                       message.AddMessage(parameter.name, &subMessage);
+                       status = message.AddMessage(parameter.name, 
&subMessage);
        }
 
-       return B_OK;
+       return status;
 }
 
 
diff --git a/src/tests/kits/shared/DriverSettingsMessageAdapterTest.cpp 
b/src/tests/kits/shared/DriverSettingsMessageAdapterTest.cpp
new file mode 100644
index 0000000..a989b61
--- /dev/null
+++ b/src/tests/kits/shared/DriverSettingsMessageAdapterTest.cpp
@@ -0,0 +1,226 @@
+/*
+ * Copyright 2015, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
+ * Distributed under the terms of the MIT License.
+ */
+
+
+#include "DriverSettingsMessageAdapterTest.h"
+
+#include <driver_settings.h>
+#include <String.h>
+
+#include <DriverSettingsMessageAdapter.h>
+
+#include <cppunit/TestCaller.h>
+#include <cppunit/TestSuite.h>
+
+
+namespace {
+
+
+class Settings {
+public:
+       Settings(const char* string)
+       {
+               fSettings = parse_driver_settings_string(string);
+               CppUnit::Asserter::failIf(fSettings == NULL,
+                       "Could not parse settings");
+       }
+
+       status_t ToMessage(const settings_template* settingsTemplate,
+               BMessage& message)
+       {
+               message.MakeEmpty();
+
+               DriverSettingsMessageAdapter adapter;
+               return adapter.ConvertFromDriverSettings(
+                       *get_driver_settings(fSettings), settingsTemplate, 
message);
+       }
+
+       ~Settings()
+       {
+               delete_driver_settings(fSettings);
+       }
+
+private:
+       void* fSettings;
+};
+
+
+}      // empty namespace
+
+
+// #pragma mark -
+
+
+DriverSettingsMessageAdapterTest::DriverSettingsMessageAdapterTest()
+{
+}
+
+
+DriverSettingsMessageAdapterTest::~DriverSettingsMessageAdapterTest()
+{
+}
+
+
+void
+DriverSettingsMessageAdapterTest::TestPrimitivesToMessage()
+{
+       const settings_template kTemplate[] = {
+               {B_BOOL_TYPE, "bool1", NULL},
+               {B_BOOL_TYPE, "bool2", NULL},
+               {B_BOOL_TYPE, "bool3", NULL},
+               {B_BOOL_TYPE, "bool4", NULL},
+               {B_BOOL_TYPE, "bool5", NULL},
+               {B_BOOL_TYPE, "bool6", NULL},
+               {B_BOOL_TYPE, "bool7", NULL},
+               {B_BOOL_TYPE, "bool8", NULL},
+               {B_BOOL_TYPE, "bool9", NULL},
+               {B_BOOL_TYPE, "empty_bool", NULL},
+               {B_INT32_TYPE, "int32", NULL},
+               {B_INT32_TYPE, "negative_int32", NULL},
+               {B_INT32_TYPE, "empty_int32", NULL},
+               {B_STRING_TYPE, "string", NULL},
+               {B_STRING_TYPE, "long_string", NULL},
+               {B_STRING_TYPE, "empty_string", NULL},
+               {}
+       };
+       Settings settings("bool1 true\n"
+               "bool2 1\n"
+               "bool3 on\n"
+               "bool4 yes\n"
+               "bool5 enabled\n"
+               "bool6 false\n"
+               "bool7 off\n"
+               "bool8 gurkensalat\n"
+               "bool9 0\n"
+               "empty_bool\n"
+               "int32 42\n"
+               "negative_int32 -42\n"
+               "empty_int32\n"
+               "string Hey\n"
+               "long_string \"This is but a test\"\n"
+               "empty_string\n");
+
+       BMessage message;
+       CPPUNIT_ASSERT_EQUAL(B_OK, settings.ToMessage(kTemplate, message));
+       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));
+
+       // bool values
+       CPPUNIT_ASSERT_EQUAL_MESSAGE("bool1", true, message.GetBool("bool1"));
+       CPPUNIT_ASSERT_EQUAL_MESSAGE("bool2", true, message.GetBool("bool2"));
+       CPPUNIT_ASSERT_EQUAL_MESSAGE("bool3", true, message.GetBool("bool3"));
+       CPPUNIT_ASSERT_EQUAL_MESSAGE("bool4", true, message.GetBool("bool4"));
+       CPPUNIT_ASSERT_EQUAL_MESSAGE("bool5", true, message.GetBool("bool5"));
+       CPPUNIT_ASSERT_EQUAL_MESSAGE("bool6", false,
+               message.GetBool("bool6", true));
+       CPPUNIT_ASSERT_EQUAL_MESSAGE("bool7", false,
+               message.GetBool("bool7", true));
+       CPPUNIT_ASSERT_EQUAL_MESSAGE("bool8", false,
+               message.GetBool("bool8", true));
+       CPPUNIT_ASSERT_EQUAL_MESSAGE("bool9", false,
+               message.GetBool("bool9", true));
+       CPPUNIT_ASSERT_EQUAL_MESSAGE("empty_bool", true,
+               message.GetBool("empty_bool"));
+
+       // int32 values
+       CPPUNIT_ASSERT_EQUAL(42, message.GetInt32("int32", 0));
+       CPPUNIT_ASSERT_EQUAL(-42, message.GetInt32("negative_int32", 0));
+       CPPUNIT_ASSERT_EQUAL(false, message.HasInt32("empty_int32"));
+
+       // string values
+       CPPUNIT_ASSERT_EQUAL(BString("Hey"), 
BString(message.GetString("string")));
+       CPPUNIT_ASSERT_EQUAL(BString("This is but a test"),
+               BString(message.GetString("long_string")));
+       CPPUNIT_ASSERT_EQUAL(false, message.HasString("empty_string"));
+}
+
+
+void
+DriverSettingsMessageAdapterTest::TestMessage()
+{
+}
+
+
+void
+DriverSettingsMessageAdapterTest::TestEmptyMessage()
+{
+}
+
+
+void
+DriverSettingsMessageAdapterTest::TestParent()
+{
+       const settings_template kSubTemplate[] = {
+               {B_STRING_TYPE, "name", NULL, true},
+               {B_BOOL_TYPE, "bool", NULL},
+               {}
+       };
+       const settings_template kTemplate[] = {
+               {B_MESSAGE_TYPE, "message", kSubTemplate},
+               {}
+       };
+       Settings settingsA("message first {\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(BString("first"),
+               BString(subMessage.GetString("name")));
+
+       Settings settingsB("message second\n");
+       CPPUNIT_ASSERT_EQUAL(B_OK, settingsB.ToMessage(kTemplate, message));
+       CPPUNIT_ASSERT_EQUAL(B_OK, message.FindMessage("message", &subMessage));
+       CPPUNIT_ASSERT_EQUAL(false, subMessage.HasBool("bool"));
+       CPPUNIT_ASSERT_EQUAL(BString("second"),
+               BString(subMessage.GetString("name", "-/-")));
+
+       const settings_template kSubSubTemplateC[] = {
+               {B_STRING_TYPE, "subname", NULL, true},
+               {B_BOOL_TYPE, "bool", NULL},
+               {}
+       };
+       const settings_template kSubTemplateC[] = {
+               {B_STRING_TYPE, "name", NULL, true},
+               {B_MESSAGE_TYPE, "sub", kSubSubTemplateC},
+               {}
+       };
+       const settings_template kTemplateC[] = {
+               {B_MESSAGE_TYPE, "message", kSubTemplateC},
+               {}
+       };
+
+       Settings settingsC("message other {\n"
+               "    sub third {\n"
+               "        hun audo\n"
+               "    }\n"
+               "    sub fourth\n"
+               "}");
+       CPPUNIT_ASSERT_EQUAL(B_OK, settingsC.ToMessage(kTemplateC, message));
+       CPPUNIT_ASSERT_EQUAL(B_OK, message.FindMessage("message", &subMessage));
+       CPPUNIT_ASSERT_EQUAL(false, subMessage.HasBool("bool"));
+       CPPUNIT_ASSERT_EQUAL(BString("other"),
+               BString(subMessage.GetString("name", "-/-")));
+}
+
+
+/*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::TestParent",
+               &DriverSettingsMessageAdapterTest::TestParent));
+
+       parent.addTest("DriverSettingsMessageAdapterTest", &suite);
+}
diff --git a/src/tests/kits/shared/DriverSettingsMessageAdapterTest.h 
b/src/tests/kits/shared/DriverSettingsMessageAdapterTest.h
new file mode 100644
index 0000000..934cc35
--- /dev/null
+++ b/src/tests/kits/shared/DriverSettingsMessageAdapterTest.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2015, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
+ * Distributed under the terms of the MIT License.
+ */
+#ifndef DRIVER_SETTINGS_MESSAGE_ADAPTER_TEST_H
+#define DRIVER_SETTINGS_MESSAGE_ADAPTER_TEST_H
+
+
+#include <TestCase.h>
+#include <TestSuite.h>
+
+
+class DriverSettingsMessageAdapterTest : public CppUnit::TestCase {
+public:
+                                                               
DriverSettingsMessageAdapterTest();
+       virtual                                         
~DriverSettingsMessageAdapterTest();
+
+                       void                            
TestPrimitivesToMessage();
+                       void                            TestMessage();
+                       void                            TestEmptyMessage();
+                       void                            TestParent();
+
+       static  void                            AddTests(BTestSuite& suite);
+};
+
+
+#endif // DRIVER_SETTINGS_MESSAGE_ADAPTER_TEST_H
diff --git a/src/tests/kits/shared/Jamfile b/src/tests/kits/shared/Jamfile
index 209fffb..db95dc9 100644
--- a/src/tests/kits/shared/Jamfile
+++ b/src/tests/kits/shared/Jamfile
@@ -9,6 +9,7 @@ UnitTestLib libsharedtest.so :
        SharedTestAddon.cpp
 
        CalendarViewTest.cpp
+       DriverSettingsMessageAdapterTest.cpp
        GeolocationTest.cpp
        NaturalCompareTest.cpp
 
diff --git a/src/tests/kits/shared/SharedTestAddon.cpp 
b/src/tests/kits/shared/SharedTestAddon.cpp
index 0009052..c5130f5 100644
--- a/src/tests/kits/shared/SharedTestAddon.cpp
+++ b/src/tests/kits/shared/SharedTestAddon.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright 2012, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
+ * Copyright 2012-2015, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
  * Distributed under the terms of the MIT License.
  */
 
@@ -8,6 +8,7 @@
 #include <TestSuiteAddon.h>
 
 #include "CalendarViewTest.h"
+#include "DriverSettingsMessageAdapterTest.h"
 #include "GeolocationTest.h"
 #include "NaturalCompareTest.h"
 
@@ -18,6 +19,7 @@ getTestSuite()
        BTestSuite* suite = new BTestSuite("Shared");
 
        CalendarViewTest::AddTests(*suite);
+       DriverSettingsMessageAdapterTest::AddTests(*suite);
        GeolocationTest::AddTests(*suite);
        NaturalCompareTest::AddTests(*suite);
 


Other related posts:

  • » [haiku-commits] BRANCH axeld-github.network-preferences [8f6c99f53118] in src: tests/kits/shared kits/shared - axeld-github . network-preferences