aboutsummaryrefslogtreecommitdiffstats
path: root/tests/lib/unit++/Test_optmap.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib/unit++/Test_optmap.cc')
-rw-r--r--tests/lib/unit++/Test_optmap.cc101
1 files changed, 101 insertions, 0 deletions
diff --git a/tests/lib/unit++/Test_optmap.cc b/tests/lib/unit++/Test_optmap.cc
new file mode 100644
index 00000000..0d1d360e
--- /dev/null
+++ b/tests/lib/unit++/Test_optmap.cc
@@ -0,0 +1,101 @@
+// Copyright (C) 2001 Claus Dr�by
+// Terms of use are in the file COPYING
+#include "unit++.h"
+#include "optmap.h"
+#include <iostream>
+#ifdef HAVE_SSTREAM
+#include <sstream>
+#endif
+using namespace std;
+using namespace unitpp;
+using namespace options_utils;
+namespace {
+const char* x[] = { "testing", "-i", "120", "-n100", "-t" };
+#ifdef HAVE_SSTREAM
+class hijack {
+ ostream& os;
+ streambuf* sbp;
+ stringbuf sb;
+public:
+ hijack(ostream& os)
+ : os(os), sbp(os.rdbuf())
+ {
+ os.rdbuf(&sb);
+ }
+ ~hijack() { os.rdbuf(sbp); }
+ string str() { return sb.str(); }
+};
+#endif
+// The test suite for the optmap library
+class Test : public suite
+{
+ const char** argv;
+ int argc;
+ void create()
+ {
+ optmap om;
+ }
+ void usage()
+ {
+ bool t_flg;
+ int i = 7;
+ int n = 0;
+ optmap om;
+ om.add("t", new opt_flag(t_flg));
+ om.add("i", new opt_int(i));
+ om.add("n", new opt_int(n));
+ om.alias("number", "n");
+#ifdef HAVE_SSTREAM
+ string exp(
+ "usage: testing [ -t ] [ -i <int> ] [( -n | --number) <int> ]\n");
+ {
+ hijack s(cerr);
+ om.parse(argc, argv);
+ om.usage(false);
+ assert_eq("usage", exp, s.str());
+ }
+#endif
+ }
+ void args()
+ {
+ bool t_flg = false;
+ int i = 7;
+ int n = 0;
+ optmap om;
+ om.add("t", new opt_flag(t_flg));
+ om.add("i", new opt_int(i));
+ om.add("n", new opt_int(n));
+ assert_true("parse ok", om.parse(argc, argv));
+ assert_eq("get -i", 120, i);
+ assert_eq("get -n", 100, n);
+ assert_eq("got -t", true, t_flg);
+ }
+ void tail()
+ {
+ const char* argv[] = { "xyzzy", "-abc", "-def", "hij" };
+ size_t argc = sizeof(argv)/sizeof(argv[0]);
+ string s;
+ bool f_d, f_e, f_f;
+ optmap om;
+ om.add("a", new opt_string(s));
+ om.add("d", new opt_flag(f_d));
+ om.add("e", new opt_flag(f_e));
+ om.add("f", new opt_flag(f_f));
+ assert_true("parse", om.parse(static_cast<int>(argc), argv));
+ assert_eq("n", argc - 1, size_t(om.n()));
+ assert_eq("a", "bc", s);
+ }
+public:
+ Test() : suite("optmap test suite")
+ {
+ argv = x;
+ argc = sizeof(x)/sizeof(char*);
+ suite::main().add("optmap", this);
+ add("create", testcase(this, "Create an optmap", &Test::create));
+ add("usage", testcase(this, "Optmap usage", &Test::usage));
+ add("args", testcase(this, "Optmap args", &Test::args));
+ add("tail", testcase(this, "Optmap tail", &Test::tail));
+ }
+} * theTest = new Test();
+
+}