summaryrefslogtreecommitdiff
path: root/cli-tests/merge/driver.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'cli-tests/merge/driver.cxx')
-rw-r--r--cli-tests/merge/driver.cxx55
1 files changed, 55 insertions, 0 deletions
diff --git a/cli-tests/merge/driver.cxx b/cli-tests/merge/driver.cxx
new file mode 100644
index 0000000..43b1c59
--- /dev/null
+++ b/cli-tests/merge/driver.cxx
@@ -0,0 +1,55 @@
+// file : merge/driver.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// license : MIT; see accompanying LICENSE file
+
+// Test parsed options merging.
+//
+
+#include <string>
+#include <cassert>
+
+#include "test.hxx"
+
+using namespace std;
+
+template <typename T, int N1, int N2>
+static T
+merge (const char* (&av1)[N1], const char* (&av2)[N2])
+{
+ int ac1 (N1);
+ int ac2 (N2);
+ T o1 (ac1, const_cast<char**> (av1));
+ T o2 (ac2, const_cast<char**> (av2));
+ o1.merge (o2);
+ return o1;
+}
+
+int
+main ()
+{
+ // Basics.
+ //
+ {
+ const char* a1[] = {"", "-i=123", "-v=1", "-v=2"};
+ const char* a2[] = {"", "-b", "-i=456", "-s=xyz", "-v=3", "-v=4"};
+ derived r (merge<derived> (a1, a2));
+
+ assert (r.b ());
+ assert (r.i_specified () && r.i () == 456);
+ assert (r.s_specified () && r.s () == "xyz");
+ assert (r.v_specified () && r.v ().size () == 4 &&
+ r.v ()[0] == 1 &&
+ r.v ()[1] == 2 &&
+ r.v ()[2] == 3 &&
+ r.v ()[3] == 4);
+ }
+
+ // Default value does not override.
+ //
+ {
+ const char* a1[] = {"", "-i=456"};
+ const char* a2[] = {"" };
+ derived r (merge<derived> (a1, a2));
+ assert (r.i_specified () && r.i () == 456);
+ }
+}