1// Copyright Sascha Ochsenknecht 2009.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt
4// or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6#include <boost/program_options.hpp>
7using namespace boost::program_options;
8
9#include <string>
10#include <iostream>
11#include <fstream>
12using namespace std;
13
14#include "minitest.hpp"
15
16
17void required_throw_test()
18{
19 options_description opts;
20 opts.add_options()
21 ("cfgfile,c", value<string>()->required(), "the configfile")
22 ("fritz,f", value<string>()->required(), "the output file")
23 ;
24
25 variables_map vm;
26 bool thrown = false;
27 {
28 // This test must throw exception
29 string cmdline = "prg -f file.txt";
30 vector< string > tokens = split_unix(cmdline);
31 thrown = false;
32 try {
33 store(options: command_line_parser(tokens).options(desc: opts).run(), m&: vm);
34 notify(m&: vm);
35 }
36 catch (required_option& e) {
37 BOOST_CHECK_EQUAL(e.what(), string("the option '--cfgfile' is required but missing"));
38 thrown = true;
39 }
40 BOOST_CHECK(thrown);
41 }
42
43 {
44 // This test mustn't throw exception
45 string cmdline = "prg -c config.txt";
46 vector< string > tokens = split_unix(cmdline);
47 thrown = false;
48 try {
49 store(options: command_line_parser(tokens).options(desc: opts).run(), m&: vm);
50 notify(m&: vm);
51 }
52 catch (required_option& e) {
53 thrown = true;
54 }
55 BOOST_CHECK(!thrown);
56 }
57}
58
59
60
61void simple_required_test(const char* config_file)
62{
63 options_description opts;
64 opts.add_options()
65 ("cfgfile,c", value<string>()->required(), "the configfile")
66 ("fritz,f", value<string>()->required(), "the output file")
67 ;
68
69 variables_map vm;
70 bool thrown = false;
71 {
72 // This test must throw exception
73 string cmdline = "prg -f file.txt";
74 vector< string > tokens = split_unix(cmdline);
75 thrown = false;
76 try {
77 // options coming from different sources
78 store(options: command_line_parser(tokens).options(desc: opts).run(), m&: vm);
79 store(options: parse_config_file<char>(filename: config_file, opts), m&: vm);
80 notify(m&: vm);
81 }
82 catch (required_option& e) {
83 thrown = true;
84 }
85 BOOST_CHECK(!thrown);
86 }
87}
88
89void multiname_required_test()
90{
91 options_description opts;
92 opts.add_options()
93 ("foo,bar", value<string>()->required(), "the foo")
94 ;
95
96 variables_map vm;
97 bool thrown = false;
98 {
99 // This test must throw exception
100 string cmdline = "prg --bar file.txt";
101 vector< string > tokens = split_unix(cmdline);
102 thrown = false;
103 try {
104 // options coming from different sources
105 store(options: command_line_parser(tokens).options(desc: opts).run(), m&: vm);
106 notify(m&: vm);
107 }
108 catch (required_option& e) {
109 thrown = true;
110 }
111 BOOST_CHECK(!thrown);
112 }
113}
114
115
116
117int main(int /*argc*/, char* av[])
118{
119 required_throw_test();
120 simple_required_test(config_file: av[1]);
121 multiname_required_test();
122
123 return 0;
124}
125
126

source code of boost/libs/program_options/test/required_test.cpp