diff --git a/src/servers/launch/SettingsParser.cpp b/src/servers/launch/SettingsParser.cpp index 58f68d45ca..bfef5e735a 100644 --- a/src/servers/launch/SettingsParser.cpp +++ b/src/servers/launch/SettingsParser.cpp @@ -15,7 +15,7 @@ public: const driver_parameter& parameter, const char* name, uint32 type, BMessage& target) { - if (parameter.parameter_count != 0) + if (parameter.parameter_count != 0 || strcmp(name, Name()) == 0) return B_OK; BMessage message; @@ -36,6 +36,8 @@ protected: } return target.AddMessage(condition, &args); } + + virtual const char* Name() = 0; }; @@ -75,6 +77,11 @@ public: message.AddString("args", parameter.values[index]); return target.AddMessage(parameter.name, &message); } + + const char* Name() + { + return "if"; + } }; @@ -95,6 +102,11 @@ public: message.AddString("args", parameter.values[index]); return target.AddMessage(parameter.name, &message); } + + const char* Name() + { + return "on"; + } }; diff --git a/src/tests/servers/launch/SettingsParserTest.cpp b/src/tests/servers/launch/SettingsParserTest.cpp index aa34478c1d..8f755d4372 100644 --- a/src/tests/servers/launch/SettingsParserTest.cpp +++ b/src/tests/servers/launch/SettingsParserTest.cpp @@ -30,6 +30,16 @@ SettingsParserTest::~SettingsParserTest() // #pragma mark - conditions +void +SettingsParserTest::TestConditionsEmpty() +{ + BMessage message; + CPPUNIT_ASSERT_EQUAL(B_OK, _ParseCondition("if {\n" + "}\n", message)); + CPPUNIT_ASSERT(message.IsEmpty()); +} + + void SettingsParserTest::TestConditionsMultiLine() { @@ -177,13 +187,22 @@ SettingsParserTest::TestConditionsMultiLineNot() BMessage args; CPPUNIT_ASSERT_EQUAL(B_OK, subMessage.FindMessage("safemode", &args)); CPPUNIT_ASSERT(args.IsEmpty()); - } // #pragma mark - events +void +SettingsParserTest::TestEventsEmpty() +{ + BMessage message; + CPPUNIT_ASSERT_EQUAL(B_OK, _ParseEvent("on {\n" + "}\n", message)); + CPPUNIT_ASSERT(message.IsEmpty()); +} + + void SettingsParserTest::TestEventsMultiLine() { @@ -395,6 +414,9 @@ SettingsParserTest::AddTests(BTestSuite& parent) CppUnit::TestSuite& suite = *new CppUnit::TestSuite("SettingsParserTest"); // Conditions + suite.addTest(new CppUnit::TestCaller( + "SettingsParserTest::TestConditionsEmpty", + &SettingsParserTest::TestConditionsEmpty)); suite.addTest(new CppUnit::TestCaller( "SettingsParserTest::TestConditionsMultiLine", &SettingsParserTest::TestConditionsMultiLine)); @@ -421,6 +443,9 @@ SettingsParserTest::AddTests(BTestSuite& parent) &SettingsParserTest::TestConditionsMultiLineNot)); // Events + suite.addTest(new CppUnit::TestCaller( + "SettingsParserTest::TestEventsEmpty", + &SettingsParserTest::TestEventsEmpty)); suite.addTest(new CppUnit::TestCaller( "SettingsParserTest::TestEventsMultiLine", &SettingsParserTest::TestEventsMultiLine)); diff --git a/src/tests/servers/launch/SettingsParserTest.h b/src/tests/servers/launch/SettingsParserTest.h index 634c07aba5..cfb5fceaa3 100644 --- a/src/tests/servers/launch/SettingsParserTest.h +++ b/src/tests/servers/launch/SettingsParserTest.h @@ -17,6 +17,7 @@ public: SettingsParserTest(); virtual ~SettingsParserTest(); + void TestConditionsEmpty(); void TestConditionsMultiLine(); void TestConditionsFlat(); void TestConditionsFlatWithNot(); @@ -26,6 +27,7 @@ public: void TestConditionsMultiLineFlatNotWithArgs(); void TestConditionsMultiLineNot(); + void TestEventsEmpty(); void TestEventsMultiLine(); void TestEventsFlat(); void TestEventsFlatWithArgs();