Utils/Console: Console UDPServer
[senf.git] / Utils / Console / Traits.test.cc
index 2e54245..1e77cf7 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,7 +40,7 @@
 ///////////////////////////////cc.p////////////////////////////////////////
 
 namespace {
-    enum TestEnum { Foo, Bar, FooBar };
+    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)
@@ -159,6 +162,42 @@ BOOST_AUTO_UNIT_TEST(enumSupport)
     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" );
+}
+
+BOOST_AUTO_UNIT_TEST(singleToken)
+{
+    BOOST_CHECK( senf::console::ArgumentTraits<std::string>::singleToken );
+    BOOST_CHECK( senf::console::ArgumentTraits<int>::singleToken );
+    BOOST_CHECK( ! senf::console::ArgumentTraits< 
+                       senf::console::FlagCollection<TestEnum> >::singleToken );
+}
 
 ///////////////////////////////cc.e////////////////////////////////////////
 #undef prefix_