X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FConsole%2FSTLSupport.test.cc;h=5d06db8115d41ca822f1e12fd1306665b688db29;hb=57daeae6f2e924ce3f16f9677c3474f531cba9e5;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..5d06db8 100644 --- a/senf/Utils/Console/STLSupport.test.cc +++ b/senf/Utils/Console/STLSupport.test.cc @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2009 +// Copyright (C) 2009 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund @@ -28,48 +28,56 @@ // Custom includes #include -#include "STLSupport.hh" -#include "ParsedCommand.hh" -#include "Executor.hh" -#include "Parse.hh" -#include "ScopedDirectory.hh" +#include "Console.hh" -#include "../../Utils/auto_unit_test.hh" +#include #include #define prefix_ -///////////////////////////////cc.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// 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) +SENF_AUTO_UNIT_TEST(vectorSupport) { + namespace fty = senf::console::factory; + senf::console::Executor executor; senf::console::CommandParser parser; senf::console::ScopedDirectory<> dir; senf::console::root().add("test", dir); std::vector defv (boost::assign::list_of(7)(2).to_container(defv)); - dir.add("test", &vectorTest) - .arg("data", "test data", senf::console::kw::default_value = defv); + dir.add("test", fty::Command(&Summer >::test) + .arg("data", "test data", senf::console::kw::default_value = defv) + ); std::stringstream ss; SENF_CHECK_NO_THROW( @@ -78,11 +86,11 @@ BOOST_AUTO_UNIT_TEST(vectorSupport) BOOST_CHECK_EQUAL( ss.str(), "9\n" "0\n" "5\n" "13\n" "17\n" ); ss.str(""); - SENF_CHECK_NO_THROW( + SENF_CHECK_NO_THROW( parser.parse("help test/test", boost::bind( boost::ref(executor), boost::ref(ss), _1 )) ); BOOST_CHECK_EQUAL( - ss.str(), + ss.str(), "Usage:\n" " test [data:vector]\n" "\n" @@ -91,16 +99,19 @@ BOOST_AUTO_UNIT_TEST(vectorSupport) " default: (7 2)\n" ); } -BOOST_AUTO_UNIT_TEST(listSupport) +SENF_AUTO_UNIT_TEST(listSupport) { + namespace fty = senf::console::factory; + senf::console::Executor executor; senf::console::CommandParser parser; senf::console::ScopedDirectory<> dir; senf::console::root().add("test", dir); std::list defv (boost::assign::list_of(7)(2).to_container(defv)); - dir.add("test", &listTest) - .arg("data", "test data", senf::console::kw::default_value = defv); + dir.add("test", fty::Command(&Summer >::test) + .arg("data", "test data", senf::console::kw::default_value = defv) + ); std::stringstream ss; SENF_CHECK_NO_THROW( @@ -109,11 +120,11 @@ BOOST_AUTO_UNIT_TEST(listSupport) BOOST_CHECK_EQUAL( ss.str(), "9\n" "0\n" "5\n" "13\n" "17\n" ); ss.str(""); - SENF_CHECK_NO_THROW( + SENF_CHECK_NO_THROW( parser.parse("help test/test", boost::bind( boost::ref(executor), boost::ref(ss), _1 )) ); BOOST_CHECK_EQUAL( - ss.str(), + ss.str(), "Usage:\n" " test [data:list]\n" "\n" @@ -122,7 +133,77 @@ BOOST_AUTO_UNIT_TEST(listSupport) " default: (7 2)\n" ); } -///////////////////////////////cc.e//////////////////////////////////////// +SENF_AUTO_UNIT_TEST(setSupport) +{ + namespace fty = senf::console::factory; + + 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", fty::Command(&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" ); +} + +SENF_AUTO_UNIT_TEST(mapSupport) +{ + namespace fty = senf::console::factory; + + 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", fty::Command(&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" ); +} + +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_