mirror of
https://github.com/boostorg/program_options.git
synced 2026-01-19 16:32:15 +00:00
config file parser now stores original_tokens, Fixes #2727
[SVN r58233]
This commit is contained in:
@@ -111,6 +111,9 @@ namespace boost { namespace program_options { namespace detail {
|
||||
this->value().value.clear();
|
||||
this->value().value.push_back(value);
|
||||
this->value().unregistered = !registered;
|
||||
this->value().original_tokens.clear();
|
||||
this->value().original_tokens.push_back(name);
|
||||
this->value().original_tokens.push_back(value);
|
||||
break;
|
||||
|
||||
} else {
|
||||
|
||||
@@ -29,6 +29,7 @@ test-suite program_options :
|
||||
[ po-test winmain.cpp ]
|
||||
[ po-test exception_test.cpp ]
|
||||
[ po-test split_test.cpp ]
|
||||
[ po-test unrecognized_test.cpp ]
|
||||
;
|
||||
|
||||
exe test_convert : test_convert.cpp ;
|
||||
|
||||
88
test/unrecognized_test.cpp
Normal file
88
test/unrecognized_test.cpp
Normal file
@@ -0,0 +1,88 @@
|
||||
// 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/cmdline.hpp>
|
||||
#include <boost/program_options/options_description.hpp>
|
||||
#include <boost/program_options/parsers.hpp>
|
||||
#include <boost/program_options/detail/cmdline.hpp>
|
||||
using namespace boost::program_options;
|
||||
using boost::program_options::detail::cmdline;
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
#include <cassert>
|
||||
using namespace std;
|
||||
|
||||
#include "minitest.hpp"
|
||||
|
||||
|
||||
// Test free function collect_unrecognized()
|
||||
//
|
||||
// it collects the tokens of all not registered options. It can be used
|
||||
// to pass them to an own parser implementation
|
||||
|
||||
|
||||
|
||||
void test_unrecognize_cmdline()
|
||||
{
|
||||
options_description desc;
|
||||
|
||||
string content = "prg --input input.txt --optimization 4 --opt option";
|
||||
vector< string > tokens = split_unix(content);
|
||||
|
||||
cmdline cmd(tokens);
|
||||
cmd.set_options_description(desc);
|
||||
cmd.allow_unregistered();
|
||||
|
||||
vector< option > opts = cmd.run();
|
||||
vector< string > result = collect_unrecognized(opts, include_positional);
|
||||
|
||||
BOOST_CHECK_EQUAL(result.size(), 7);
|
||||
BOOST_CHECK_EQUAL(result[0], "prg");
|
||||
BOOST_CHECK_EQUAL(result[1], "--input");
|
||||
BOOST_CHECK_EQUAL(result[2], "input.txt");
|
||||
BOOST_CHECK_EQUAL(result[3], "--optimization");
|
||||
BOOST_CHECK_EQUAL(result[4], "4");
|
||||
BOOST_CHECK_EQUAL(result[5], "--opt");
|
||||
BOOST_CHECK_EQUAL(result[6], "option");
|
||||
}
|
||||
|
||||
|
||||
|
||||
void test_unrecognize_config()
|
||||
{
|
||||
|
||||
options_description desc;
|
||||
|
||||
string content =
|
||||
" input = input.txt\n"
|
||||
" optimization = 4\n"
|
||||
" opt = option\n"
|
||||
;
|
||||
|
||||
stringstream ss(content);
|
||||
vector< option > opts = parse_config_file(ss, desc, true).options;
|
||||
vector< string > result = collect_unrecognized(opts, include_positional);
|
||||
|
||||
BOOST_CHECK_EQUAL(result.size(), 6);
|
||||
BOOST_CHECK_EQUAL(result[0], "input");
|
||||
BOOST_CHECK_EQUAL(result[1], "input.txt");
|
||||
BOOST_CHECK_EQUAL(result[2], "optimization");
|
||||
BOOST_CHECK_EQUAL(result[3], "4");
|
||||
BOOST_CHECK_EQUAL(result[4], "opt");
|
||||
BOOST_CHECK_EQUAL(result[5], "option");
|
||||
}
|
||||
|
||||
|
||||
|
||||
int main(int /*ac*/, char** /*av*/)
|
||||
{
|
||||
test_unrecognize_cmdline();
|
||||
test_unrecognize_config();
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user