X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Console%2FTraits.test.cc;h=b11c4b5c213251b7c7bcc7201d8116586e77bbef;hb=1863c038d0400159ce49b851a5b81c2ce698c684;hp=83f8af5d6243fd3d152517aed19b828e183743eb;hpb=63c40810b93b4d8f3d6dad5f987adc5f2bf5b5ed;p=senf.git diff --git a/Console/Traits.test.cc b/Console/Traits.test.cc index 83f8af5..b11c4b5 100644 --- a/Console/Traits.test.cc +++ b/Console/Traits.test.cc @@ -28,6 +28,10 @@ // Custom includes #include "Traits.hh" +#include "ParsedCommand.hh" +#include "Executor.hh" +#include "Parse.hh" +#include "ScopedDirectory.hh" #include "../Utils/auto_unit_test.hh" #include @@ -35,8 +39,66 @@ #define prefix_ ///////////////////////////////cc.p//////////////////////////////////////// -BOOST_AUTO_UNIT_TEST(parseParameter) -{} +namespace { + enum TestEnum { Foo, Bar }; + SENF_CONSOLE_REGISTER_ENUM( TestEnum, (Foo)(Bar) ); + + TestEnum test (TestEnum value) { return value; } + + struct TestClass { + enum MemberEnum { MemberFoo, MemberBar }; + static MemberEnum test (MemberEnum value) { return value; } + }; + SENF_CONSOLE_REGISTER_ENUM_MEMBER( TestClass, MemberEnum, (MemberFoo)(MemberBar) ); + +} + +BOOST_AUTO_UNIT_TEST(enumSupport) +{ + senf::console::Executor executor; + senf::console::CommandParser parser; + senf::console::ScopedDirectory<> dir; + senf::console::root().add("test", dir); + + dir.add("test",&test); + + std::stringstream ss; + BOOST_CHECK_NO_THROW( + parser.parse("test/test Foo", + boost::bind( boost::ref(executor), boost::ref(ss), _1 )) ); + BOOST_CHECK_EQUAL( ss.str(), "Foo\n" ); + + ss.str(""); + BOOST_CHECK_NO_THROW( + parser.parse("test/test Bar", + boost::bind( boost::ref(executor), boost::ref(ss), _1 )) ); + BOOST_CHECK_EQUAL( ss.str(), "Bar\n" ); + + BOOST_CHECK_THROW( + parser.parse("test/test (Foo Bar)", + boost::bind( boost::ref(executor), boost::ref(ss), _1 )), + senf::console::SyntaxErrorException ); + + BOOST_CHECK_THROW( + parser.parse("test/test Baz", + boost::bind( boost::ref(executor), boost::ref(ss), _1 )), + senf::console::SyntaxErrorException ); + + dir.add("member", &TestClass::test); + + ss.str(""); + BOOST_CHECK_NO_THROW( + parser.parse("test/member MemberFoo", + boost::bind( boost::ref(executor), boost::ref(ss), _1 )) ); + BOOST_CHECK_EQUAL( ss.str(), "MemberFoo\n" ); + + ss.str(""); + BOOST_CHECK_NO_THROW( + parser.parse("test/member MemberBar", + boost::bind( boost::ref(executor), boost::ref(ss), _1 )) ); + BOOST_CHECK_EQUAL( ss.str(), "MemberBar\n" ); +} + ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_