Socket/Protocols/Raw: EUI64 documentation
[senf.git] / Utils / Console / Traits.test.cc
index b8d366b..03dc80e 100644 (file)
@@ -21,7 +21,7 @@
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 /** \file
-    \brief Traits.test unit tests */
+    \brief Traits unit tests */
 
 //#include "Traits.test.hh"
 //#include "Traits.test.ih"
@@ -40,8 +40,8 @@
 ///////////////////////////////cc.p////////////////////////////////////////
 
 namespace {
-    enum TestEnum { Foo, Bar };
-    SENF_CONSOLE_REGISTER_ENUM( TestEnum, (Foo)(Bar) );
+    enum TestEnum { Foo=1, Bar=2, FooBar=4 };
+    SENF_CONSOLE_REGISTER_ENUM( TestEnum, (Foo)(Bar)(FooBar) );
 
     TestEnum test (TestEnum value) { return value; }
 
@@ -52,6 +52,9 @@ namespace {
     SENF_CONSOLE_REGISTER_ENUM_MEMBER( TestClass, MemberEnum, (MemberFoo)(MemberBar) );
 
     bool boolTest(bool value) { return value; }
+
+    senf::console::FlagCollection<TestEnum> collectionTest(
+        senf::console::FlagCollection<TestEnum> flags) { return flags; }
 }
 
 BOOST_AUTO_UNIT_TEST(boolTraits)
@@ -64,32 +67,32 @@ BOOST_AUTO_UNIT_TEST(boolTraits)
     dir.add("test", &boolTest);
 
     std::stringstream ss;
-    BOOST_CHECK_NO_THROW(
+    SENF_CHECK_NO_THROW(
         parser.parse("test/test true; test/test false",
                      boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )) );
     BOOST_CHECK_EQUAL( ss.str(), "true\n" "false\n" );
 
     ss.str("");
-    BOOST_CHECK_NO_THROW(
+    SENF_CHECK_NO_THROW(
         parser.parse("test/test enabled; test/test disabled",
                      boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )) );
     BOOST_CHECK_EQUAL( ss.str(), "true\n" "false\n" );
 
     ss.str("");
-    BOOST_CHECK_NO_THROW(
+    SENF_CHECK_NO_THROW(
         parser.parse("test/test yes; test/test no",
                      boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )) );
     BOOST_CHECK_EQUAL( ss.str(), "true\n" "false\n" );
 
     ss.str("");
-    BOOST_CHECK_NO_THROW(
+    SENF_CHECK_NO_THROW(
         parser.parse("test/test Y; test/test enA",
                      boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )) );
     BOOST_CHECK_EQUAL( ss.str(), "true\n" "true\n" );
 
     dir.add("test2", &boolTest).formatter( senf::console::formatEnabledDisabled );
     ss.str("");
-    BOOST_CHECK_NO_THROW(
+    SENF_CHECK_NO_THROW(
         parser.parse("test/test2 0; test/test2 -1",
                      boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )) );
     BOOST_CHECK_EQUAL( ss.str(), "disabled\n" "enabled\n" );
@@ -105,13 +108,13 @@ BOOST_AUTO_UNIT_TEST(enumSupport)
     dir.add("test",&test);
     
     std::stringstream ss;
-    BOOST_CHECK_NO_THROW(
+    SENF_CHECK_NO_THROW(
         parser.parse("test/test Foo",
                      boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )) );
     BOOST_CHECK_EQUAL( ss.str(), "Foo\n" );
 
     ss.str("");
-    BOOST_CHECK_NO_THROW(
+    SENF_CHECK_NO_THROW(
         parser.parse("test/test Bar",
                      boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )) );
     BOOST_CHECK_EQUAL( ss.str(), "Bar\n" );
@@ -129,18 +132,64 @@ BOOST_AUTO_UNIT_TEST(enumSupport)
     dir.add("member", &TestClass::test);
 
     ss.str("");
-    BOOST_CHECK_NO_THROW(
+    SENF_CHECK_NO_THROW(
         parser.parse("test/member MemberFoo",
                      boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )) );
     BOOST_CHECK_EQUAL( ss.str(), "MemberFoo\n" );
 
     ss.str("");
-    BOOST_CHECK_NO_THROW(
+    SENF_CHECK_NO_THROW(
         parser.parse("test/member MemberBar",
                      boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )) );
     BOOST_CHECK_EQUAL( ss.str(), "MemberBar\n" );
+
+    ss.str("");
+    SENF_CHECK_NO_THROW(
+        parser.parse("test/test foob",
+                     boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )) );
+    BOOST_CHECK_EQUAL( ss.str(), "FooBar\n" );
+
+    ss.str("");
+    SENF_CHECK_NO_THROW(
+        parser.parse("test/test b",
+                     boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )) );
+    BOOST_CHECK_EQUAL( ss.str(), "Bar\n" );
+
+    ss.str("");
+    SENF_CHECK_NO_THROW(
+        parser.parse("test/test foo",
+                     boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )) );
+    BOOST_CHECK_EQUAL( ss.str(), "Foo\n" );
 }
 
+BOOST_AUTO_UNIT_TEST(flagCollection)
+{
+    senf::console::Executor executor;
+    senf::console::CommandParser parser;
+    senf::console::ScopedDirectory<> dir;
+    senf::console::root().add("test", dir);
+    std::stringstream ss;
+
+    dir.add("test",&collectionTest);
+    
+    ss.str("");
+    SENF_CHECK_NO_THROW(
+        parser.parse("test/test foo",
+                     boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )) );
+    BOOST_CHECK_EQUAL( ss.str(), "Foo\n" );
+
+    ss.str("");
+    SENF_CHECK_NO_THROW(
+        parser.parse("test/test (foo bar)",
+                     boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )) );
+    BOOST_CHECK_EQUAL( ss.str(), "(Foo Bar)\n" );
+
+    ss.str("");
+    SENF_CHECK_NO_THROW(
+        parser.parse("test/test ()",
+                     boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )) );
+    BOOST_CHECK_EQUAL( ss.str(), "()\n" );
+}
 
 ///////////////////////////////cc.e////////////////////////////////////////
 #undef prefix_