HowTos/NewPacket: Remove old code from example
[senf.git] / Console / OverloadedCommand.test.cc
similarity index 52%
rename from Console/ObjectDirectory.test.cc
rename to Console/OverloadedCommand.test.cc
index a8e99af..2879201 100644 (file)
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 /** \file
-    \brief ObjectDirectory.test unit tests */
+    \brief OverloadedCommand.test unit tests */
 
-//#include "ObjectDirectory.test.hh"
-//#include "ObjectDirectory.test.ih"
+//#include "OverloadedCommand.test.hh"
+//#include "OverloadedCommand.test.ih"
 
 // Custom includes
 #include <sstream>
-#include "ObjectDirectory.hh"
+#include "OverloadedCommand.hh"
 
 #include <boost/test/auto_unit_test.hpp>
 #include <boost/test/test_tools.hpp>
 ///////////////////////////////cc.p////////////////////////////////////////
 
 namespace {
-    struct TestObject {
-        typedef TestObject Self;
-
-        senf::console::ObjectDirectory<Self> dir;
-        TestObject() : dir(this) {
-            dir.add("member", &Self::member);
-        }
-
-        void member(std::ostream & os, senf::console::CommandNode::Arguments const &) {
-            os << "member";
-        }
-    };
-}
 
-BOOST_AUTO_UNIT_TEST(objectDirectory)
-{
+    void fn1(std::ostream &, senf::console::CommandOverload::Arguments const &)
+    {
+        throw senf::console::SyntaxErrorException("fn1 error");
+    }
+
+    void fn2(std::ostream &, senf::console::CommandOverload::Arguments const &)
+    {
+        throw senf::console::SyntaxErrorException("fn2 error");
+    }
+
+    void fn3(std::ostream & os, senf::console::CommandOverload::Arguments const &)
     {
-        TestObject ob;
-        senf::console::root().add("ob",ob.dir);
-        std::stringstream ss;
-        senf::console::ParseCommandInfo info;
-        senf::console::root()["ob"]("member")(ss, info.arguments());
-        BOOST_CHECK_EQUAL( ss.str(), "member" );
+        os << "fn3\n";
     }
-    BOOST_CHECK_THROW( senf::console::root()["ob"], senf::console::UnknownNodeNameException );
+
+}
+
+BOOST_AUTO_UNIT_TEST(overladedCommand)
+{
+    senf::console::OverloadedCommandNode & cmd (
+        senf::console::root().add("overload", senf::console::OverloadedCommandNode::create()));
+    cmd.add(senf::console::SimpleCommandOverload::create(&fn1));
+    cmd.add(senf::console::SimpleCommandOverload::create(&fn2));
+
+    senf::console::ParseCommandInfo info;
+    std::stringstream ss;
+    BOOST_CHECK_THROW( senf::console::root()("overload")(ss, info.arguments()),
+                       senf::console::SyntaxErrorException );
+
+    cmd.add(senf::console::SimpleCommandOverload::create(&fn3));
+    BOOST_CHECK_NO_THROW( senf::console::root()("overload")(ss, info.arguments()) );
+    BOOST_CHECK_EQUAL( ss.str(), "fn3\n" );
+
+    cmd.unlink();
 }
 
 ///////////////////////////////cc.e////////////////////////////////////////