4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY
6 // Stefan Bund <g0dil@berlios.de>
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 \brief ParsedCommand.test unit tests */
26 //#include "ParsedCommand.test.hh"
27 //#include "ParsedCommand.test.ih"
32 #include "ParsedCommand.hh"
33 #include "Executor.hh"
35 #include "ScopedDirectory.hh"
37 #include "../Utils/auto_unit_test.hh"
38 #include <boost/test/test_tools.hpp>
41 ///////////////////////////////cc.p////////////////////////////////////////
45 int cb1(int a, double b) { return int(a+b); }
46 double cb2(){ return 1.2; }
48 std::string cb4(std::ostream & os) { os << "text\n"; return "value"; }
49 void cb5(std::ostream & os, std::string v) { os << "Value: " << v << "\n"; }
52 BOOST_AUTO_UNIT_TEST(parsedCommand)
54 senf::console::Executor executor;
55 senf::console::CommandParser parser;
56 senf::console::ScopedDirectory<> dir;
57 senf::console::root().add("test", dir);
62 parser.parse("test/cb1 2 3.2",
63 boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 ));
64 BOOST_CHECK_EQUAL( ss.str(), "5\n" );
70 parser.parse("test/cb2",
71 boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 ));
72 BOOST_CHECK_EQUAL( ss.str(), "1.2\n" );
78 parser.parse("test/cb3 234",
79 boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 ));
80 BOOST_CHECK_EQUAL( ss.str(), "" );
86 parser.parse("test/cb4",
87 boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 ));
88 BOOST_CHECK_EQUAL( ss.str(), "text\n" "value\n" );
94 parser.parse("test/cb5 1234",
95 boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 ));
96 BOOST_CHECK_EQUAL( ss.str(), "Value: 1234\n" );
100 std::stringstream ss;
103 parser.parse("test/cb1 2 3.2 foo",
104 boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )),
105 senf::console::SyntaxErrorException );
108 parser.parse("test/cb1 2",
109 boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )),
110 senf::console::SyntaxErrorException );
113 parser.parse("test/cb1 2 foo",
114 boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )),
115 senf::console::SyntaxErrorException );
119 std::stringstream ss;
121 senf::console::ParsedCommandOverloadBase & c1 (dir.add("cb", &cb1));
123 "Lo nam balnearius Opprimo Pennatus, no decentia sui, dicto esse se pulchritudo,\n"
124 "pupa Sive res indifferenter. Captivo pa.");
125 c1.arg(0).doc = "Bar didelfrump di desgorb. Nu widsoflar brimeldrgf.";
126 c1.arg(1).name = "checkup";
127 c1.arg(1).doc = "Florgel, dargel and durgel";
128 c1.arg<double>(1).defaultValue = 2.1;
129 c1.arg(1).hasDefault = true;
130 senf::console::ParsedCommandOverloadBase & c5 (dir.add("cb", &cb5));
132 "Uus Primordia fundo falsidicus corium, diurnitas humo pro leto. Sui Ueraciter\n"
133 "hio eruca lenis qua Agalmate ut fors penitentia. Iugum obdormio anxio nuncupo\n"
134 "iam, in vos nam Custodi.");
136 static_cast<senf::console::OverloadedCommandNode&>(dir("cb")).doc(
137 "Ops fortunate, ops me ut orgia vociferatio contumax per, rudo re loco emitto\n"
138 "intolerabiliter ita iugo. Subcribo gravo. Devenio luna fonticulus Castanea\n"
139 "horum fascino Os interpretor non ipse conjuratio hora, qui filius denuntio ait\n"
140 "sono te odium Anhelo. Dum Cedo audax celox alius una Agnosco hic, ibi retineo\n"
141 "lux sto ioco. Per Re dono. Copiose reus scitus jus diligens sis scapulare\n"
142 "Servitium transi.");
143 parser.parse("test/cb 111 222.4; test/cb 222; test/cb foo; test/cb",
144 boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 ));
145 BOOST_CHECK_EQUAL( ss.str(), "333\n" "224\n" "Value: foo\n" "1.2\n" );
149 std::stringstream ss;
150 senf::console::root()["test"]("cb").help(ss);
154 " 1- cb arg11:int [checkup:double]\n"
155 " 2- cb arg21:string\n"
159 " arg11 Bar didelfrump di desgorb. Nu widsoflar brimeldrgf.\n"
160 " checkup Florgel, dargel and durgel\n"
163 "Ops fortunate, ops me ut orgia vociferatio contumax per, rudo re loco emitto\n"
164 "intolerabiliter ita iugo. Subcribo gravo. Devenio luna fonticulus Castanea\n"
165 "horum fascino Os interpretor non ipse conjuratio hora, qui filius denuntio ait\n"
166 "sono te odium Anhelo. Dum Cedo audax celox alius una Agnosco hic, ibi retineo\n"
167 "lux sto ioco. Per Re dono. Copiose reus scitus jus diligens sis scapulare\n"
168 "Servitium transi.\n"
171 "Lo nam balnearius Opprimo Pennatus, no decentia sui, dicto esse se pulchritudo,\n"
172 "pupa Sive res indifferenter. Captivo pa.\n"
175 "Uus Primordia fundo falsidicus corium, diurnitas humo pro leto. Sui Ueraciter\n"
176 "hio eruca lenis qua Agalmate ut fors penitentia. Iugum obdormio anxio nuncupo\n"
177 "iam, in vos nam Custodi.\n" );
185 senf::console::ScopedDirectory<Test> dir;
188 Test(std::string const & name) : dir(this), name_ (name) {
189 dir.add("name", &Test::name);
192 std::string name(std::string const & suffix) {
193 return name_ + suffix;
199 BOOST_AUTO_UNIT_TEST(memberParsedCommand)
201 senf::console::Executor executor;
202 senf::console::CommandParser parser;
203 senf::console::ScopedDirectory<> dir;
204 senf::console::root().add("test", dir);
208 dir.add("obj", obj.dir);
210 std::stringstream ss;
211 parser.parse("test/obj/name \": foo\"",
212 boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 ));
213 BOOST_CHECK_EQUAL( ss.str(), "bar: foo\n" );
217 ///////////////////////////////cc.e////////////////////////////////////////
224 // comment-column: 40
225 // c-file-style: "senf"
226 // indent-tabs-mode: nil
227 // ispell-local-dictionary: "american"
228 // compile-command: "scons -u test"