]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/program_options/test/split_test.cpp
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)
7 #include <boost/program_options/parsers.hpp>
8 #include <boost/program_options/options_description.hpp>
9 #include <boost/program_options/variables_map.hpp>
10 #include <boost/program_options/cmdline.hpp>
11 using namespace boost::program_options
;
19 #include "minitest.hpp"
21 void check_value(const string
& option
, const string
& value
)
23 BOOST_CHECK(option
== value
);
26 void split_whitespace(const options_description
& description
)
29 const char* cmdline
= "prg --input input.txt \r --optimization 4 \t --opt \n option";
31 vector
< string
> tokens
= split_unix(cmdline
, " \t\n\r");
33 BOOST_REQUIRE(tokens
.size() == 7);
35 check_value(tokens
[0], "prg");
36 check_value(tokens
[1], "--input");
37 check_value(tokens
[2], "input.txt");
38 check_value(tokens
[3], "--optimization");
39 check_value(tokens
[4], "4");
40 check_value(tokens
[5], "--opt");
41 check_value(tokens
[6], "option");
44 store(command_line_parser(tokens
).options(description
).run(), vm
);
48 void split_equalsign(const options_description
& description
)
51 const char* cmdline
= "prg --input=input.txt --optimization=4 --opt=option";
53 vector
< string
> tokens
= split_unix(cmdline
, "= ");
55 BOOST_REQUIRE(tokens
.size() == 7);
56 check_value(tokens
[0], "prg");
57 check_value(tokens
[1], "--input");
58 check_value(tokens
[2], "input.txt");
59 check_value(tokens
[3], "--optimization");
60 check_value(tokens
[4], "4");
61 check_value(tokens
[5], "--opt");
62 check_value(tokens
[6], "option");
65 store(command_line_parser(tokens
).options(description
).run(), vm
);
69 void split_semi(const options_description
& description
)
72 const char* cmdline
= "prg;--input input.txt;--optimization 4;--opt option";
74 vector
< string
> tokens
= split_unix(cmdline
, "; ");
76 BOOST_REQUIRE(tokens
.size() == 7);
77 check_value(tokens
[0], "prg");
78 check_value(tokens
[1], "--input");
79 check_value(tokens
[2], "input.txt");
80 check_value(tokens
[3], "--optimization");
81 check_value(tokens
[4], "4");
82 check_value(tokens
[5], "--opt");
83 check_value(tokens
[6], "option");
86 store(command_line_parser(tokens
).options(description
).run(), vm
);
90 void split_quotes(const options_description
& description
)
92 const char* cmdline
= "prg --input \"input.txt input.txt\" --optimization 4 --opt \"option1 option2\"";
94 vector
< string
> tokens
= split_unix(cmdline
, " ");
96 BOOST_REQUIRE(tokens
.size() == 7);
97 check_value(tokens
[0], "prg");
98 check_value(tokens
[1], "--input");
99 check_value(tokens
[2], "input.txt input.txt");
100 check_value(tokens
[3], "--optimization");
101 check_value(tokens
[4], "4");
102 check_value(tokens
[5], "--opt");
103 check_value(tokens
[6], "option1 option2");
106 store(command_line_parser(tokens
).options(description
).run(), vm
);
110 void split_escape(const options_description
& description
)
112 const char* cmdline
= "prg --input \\\"input.txt\\\" --optimization 4 --opt \\\"option1\\ option2\\\"";
114 vector
< string
> tokens
= split_unix(cmdline
, " ");
116 BOOST_REQUIRE(tokens
.size() == 7);
117 check_value(tokens
[0], "prg");
118 check_value(tokens
[1], "--input");
119 check_value(tokens
[2], "\"input.txt\"");
120 check_value(tokens
[3], "--optimization");
121 check_value(tokens
[4], "4");
122 check_value(tokens
[5], "--opt");
123 check_value(tokens
[6], "\"option1 option2\"");
126 store(command_line_parser(tokens
).options(description
).run(), vm
);
131 void split_single_quote(const options_description
& description
)
133 const char* cmdline
= "prg --input 'input.txt input.txt' --optimization 4 --opt 'option1 option2'";
135 vector
< string
> tokens
= split_unix(cmdline
, " ", "'");
137 BOOST_REQUIRE(tokens
.size() == 7);
138 check_value(tokens
[0], "prg");
139 check_value(tokens
[1], "--input");
140 check_value(tokens
[2], "input.txt input.txt");
141 check_value(tokens
[3], "--optimization");
142 check_value(tokens
[4], "4");
143 check_value(tokens
[5], "--opt");
144 check_value(tokens
[6], "option1 option2");
147 store(command_line_parser(tokens
).options(description
).run(), vm
);
151 void split_defaults(const options_description
& description
)
153 const char* cmdline
= "prg --input \t \'input file.txt\' \t --optimization 4 --opt \\\"option1\\ option2\\\"";
155 vector
< string
> tokens
= split_unix(cmdline
);
157 BOOST_REQUIRE(tokens
.size() == 7);
158 check_value(tokens
[0], "prg");
159 check_value(tokens
[1], "--input");
160 check_value(tokens
[2], "input file.txt");
161 check_value(tokens
[3], "--optimization");
162 check_value(tokens
[4], "4");
163 check_value(tokens
[5], "--opt");
164 check_value(tokens
[6], "\"option1 option2\"");
167 store(command_line_parser(tokens
).options(description
).run(), vm
);
171 int main(int /*ac*/, char** /*av*/)
173 options_description desc
;
175 ("input,i", value
<string
>(), "the input file")
176 ("optimization,O", value
<unsigned>(), "optimization level")
177 ("opt,o", value
<string
>(), "misc option")
180 split_whitespace(desc
);
181 split_equalsign(desc
);
185 split_single_quote(desc
);
186 split_defaults(desc
);