summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/program_options/test/required_test.cpp
blob: 1c623cd5c336cd440ab9498e4f5278aa9d826e82 (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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// Copyright Sascha Ochsenknecht 2009.
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt
// or copy at http://www.boost.org/LICENSE_1_0.txt)

#include <boost/program_options.hpp>
using namespace boost::program_options;

#include <string>
#include <iostream>
#include <fstream>
using namespace std;

#include "minitest.hpp"


void required_throw_test()
{
   options_description          opts;
   opts.add_options()
     ("cfgfile,c", value<string>()->required(), "the configfile")
     ("fritz,f",   value<string>()->required(), "the output file")
   ;

   variables_map vm;
   bool thrown = false;
   {
      // This test must throw exception
      string cmdline = "prg -f file.txt";
      vector< string > tokens =  split_unix(cmdline);
      thrown = false;
      try {
         store(command_line_parser(tokens).options(opts).run(), vm);
         notify(vm);    
      } 
      catch (required_option& e) {
         BOOST_CHECK_EQUAL(e.what(), string("the option '--cfgfile' is required but missing"));
         thrown = true;
      }      
      BOOST_CHECK(thrown);
   }
   
   {
      // This test mustn't throw exception
      string cmdline = "prg -c config.txt";
      vector< string > tokens =  split_unix(cmdline);
      thrown = false;
      try {
         store(command_line_parser(tokens).options(opts).run(), vm);
         notify(vm);    
      } 
      catch (required_option& e) {
         thrown = true;
      }
      BOOST_CHECK(!thrown);
   }
}



void simple_required_test(const char* config_file)
{
   options_description          opts;
   opts.add_options()
     ("cfgfile,c", value<string>()->required(), "the configfile")
     ("fritz,f",   value<string>()->required(), "the output file")
   ;

   variables_map vm;
   bool thrown = false;
   {
      // This test must throw exception
      string cmdline = "prg -f file.txt";
      vector< string > tokens =  split_unix(cmdline);
      thrown = false;
      try {
         // options coming from different sources
         store(command_line_parser(tokens).options(opts).run(), vm);
         store(parse_config_file<char>(config_file, opts), vm);
         notify(vm);    
      } 
      catch (required_option& e) {
         thrown = true;
      }      
      BOOST_CHECK(!thrown);
   }
}

void multiname_required_test()
{
   options_description          opts;
   opts.add_options()
     ("foo,bar", value<string>()->required(), "the foo")
   ;

   variables_map vm;
   bool thrown = false;
   {
      // This test must throw exception
      string cmdline = "prg --bar file.txt";
      vector< string > tokens =  split_unix(cmdline);
      thrown = false;
      try {
         // options coming from different sources
         store(command_line_parser(tokens).options(opts).run(), vm);
         notify(vm);
      }
      catch (required_option& e) {
         thrown = true;
      }
      BOOST_CHECK(!thrown);
   }
}



int main(int /*argc*/, char* av[])
{  
   required_throw_test();
   simple_required_test(av[1]);
   multiname_required_test();
   
   return 0;
}