X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FConsole%2FSTLSupport.test.cc;h=ddc78dcf80c7871f3acf840fc36723789cad1295;hb=52a6fb56dce12132287e181b787d2474d93b0183;hp=4916987b3fd3055e7c4ad1e545f214952f484a8c;hpb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;p=senf.git diff --git a/senf/Utils/Console/STLSupport.test.cc b/senf/Utils/Console/STLSupport.test.cc index 4916987..ddc78dc 100644 --- a/senf/Utils/Console/STLSupport.test.cc +++ b/senf/Utils/Console/STLSupport.test.cc @@ -34,7 +34,7 @@ #include "Parse.hh" #include "ScopedDirectory.hh" -#include "../../Utils/auto_unit_test.hh" +#include #include #define prefix_ @@ -42,22 +42,31 @@ namespace { - int vectorTest(std::vector const & data) + template + struct Summer { - int sum (0); - for (std::vector::const_iterator i (data.begin()); i != data.end(); ++i) - sum += *i; - return sum; - } - - int listTest(std::list const & data) + static int test(Container const & data) + { + int sum (0); + for (typename Container::const_iterator i (data.begin()), i_end (data.end()); + i != i_end; ++i) + sum += *i; + return sum; + } + }; + + std::pair mapTest(std::map const & data) { + std::string keys; int sum (0); - for (std::list::const_iterator i (data.begin()); i != data.end(); ++i) - sum += *i; - return sum; + for (std::map::const_iterator i (data.begin()), i_end (data.end()); + i != i_end; ++i) { + keys += i->first; + sum += i->second; + } + return std::make_pair(keys,sum); } - + } BOOST_AUTO_UNIT_TEST(vectorSupport) @@ -68,7 +77,7 @@ BOOST_AUTO_UNIT_TEST(vectorSupport) senf::console::root().add("test", dir); std::vector defv (boost::assign::list_of(7)(2).to_container(defv)); - dir.add("test", &vectorTest) + dir.add("test", &Summer >::test) .arg("data", "test data", senf::console::kw::default_value = defv); std::stringstream ss; @@ -99,7 +108,7 @@ BOOST_AUTO_UNIT_TEST(listSupport) senf::console::root().add("test", dir); std::list defv (boost::assign::list_of(7)(2).to_container(defv)); - dir.add("test", &listTest) + dir.add("test", &Summer >::test) .arg("data", "test data", senf::console::kw::default_value = defv); std::stringstream ss; @@ -122,6 +131,70 @@ BOOST_AUTO_UNIT_TEST(listSupport) " default: (7 2)\n" ); } +BOOST_AUTO_UNIT_TEST(setSupport) +{ + senf::console::Executor executor; + senf::console::CommandParser parser; + senf::console::ScopedDirectory<> dir; + senf::console::root().add("test", dir); + + std::set defv (boost::assign::list_of(7)(2).to_container(defv)); + dir.add("test", &Summer >::test) + .arg("data", "test data", senf::console::kw::default_value = defv); + std::stringstream ss; + + SENF_CHECK_NO_THROW( + parser.parse("test/test; test/test (); test/test 5; test/test (13); test/test (4 5 8)", + boost::bind( boost::ref(executor), boost::ref(ss), _1 )) ); + BOOST_CHECK_EQUAL( ss.str(), "9\n" "0\n" "5\n" "13\n" "17\n" ); + + ss.str(""); + SENF_CHECK_NO_THROW( + parser.parse("help test/test", + boost::bind( boost::ref(executor), boost::ref(ss), _1 )) ); + BOOST_CHECK_EQUAL( + ss.str(), + "Usage:\n" + " test [data:set]\n" + "\n" + "With:\n" + " data test data\n" + " default: (2 7)\n" ); +} + +BOOST_AUTO_UNIT_TEST(mapSupport) +{ + senf::console::Executor executor; + senf::console::CommandParser parser; + senf::console::ScopedDirectory<> dir; + senf::console::root().add("test", dir); + + std::map defv ( + boost::assign::map_list_of("foo bar",7)("bar",2).to_container(defv)); + dir.add("test", &mapTest) + .arg("data", "test data", senf::console::kw::default_value = defv); + std::stringstream ss; + + SENF_CHECK_NO_THROW( + parser.parse("test/test; test/test (); " + "test/test (vier=4 fuenf = 5 acht=8 )", + boost::bind( boost::ref(executor), boost::ref(ss), _1 )) ); + BOOST_CHECK_EQUAL( ss.str(), "(\"barfoo bar\" 9)\n" "(\"\" 0)\n" "(achtfuenfvier 17)\n" ); // + + ss.str(""); + SENF_CHECK_NO_THROW( + parser.parse("help test/test", + boost::bind( boost::ref(executor), boost::ref(ss), _1 )) ); + BOOST_CHECK_EQUAL( + ss.str(), + "Usage:\n" + " test [data:map]\n" + "\n" + "With:\n" + " data test data\n" + " default: (bar=2 \"foo bar\"=7)\n" ); +} + ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_