Throw exception on invalid positional argument
Fixes #169. It seems reasonable to throw an exception when an attempt is made to parse into positional parameters that don't exist.
This commit is contained in:
parent
48e265dc4b
commit
5da5d67111
@ -13,6 +13,7 @@ options. The project adheres to semantic versioning.
|
||||
### Added
|
||||
|
||||
* Iterator inputs to `parse_positional`.
|
||||
* Throw an exception if the option in `parse_positional` doesn't exist.
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
|
||||
@ -1659,6 +1659,10 @@ ParseResult::consume_positional(std::string a)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw option_not_exists_exception(*m_next_positional);
|
||||
}
|
||||
++m_next_positional;
|
||||
}
|
||||
|
||||
|
||||
@ -216,6 +216,22 @@ TEST_CASE("No positional with extras", "[positional]")
|
||||
CHECK(argv[1] == std::string("a"));
|
||||
}
|
||||
|
||||
TEST_CASE("Positional not valid", "[positional]") {
|
||||
cxxopts::Options options("positional_invalid", "invalid positional argument");
|
||||
options.add_options()
|
||||
("long", "a long option", cxxopts::value<std::string>())
|
||||
;
|
||||
|
||||
options.parse_positional("something");
|
||||
|
||||
Argv av({"foobar", "bar", "baz"});
|
||||
|
||||
char** argv = av.argv();
|
||||
auto argc = av.argc();
|
||||
|
||||
CHECK_THROWS_AS(options.parse(argc, argv), cxxopts::option_not_exists_exception);
|
||||
}
|
||||
|
||||
TEST_CASE("Empty with implicit value", "[implicit]")
|
||||
{
|
||||
cxxopts::Options options("empty_implicit", "doesn't handle empty");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user