summaryrefslogtreecommitdiff
path: root/cli-tests/merge/driver.cxx
blob: 43b1c595b60d398b8d4cd46aba1ca67eeb39862e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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);
  }
}