From 645f917e6503ddc5bffeb1b23ed7b6d84ef5d1bb Mon Sep 17 00:00:00 2001 From: "Taylor C. Richberger" Date: Wed, 29 Jun 2016 09:58:46 -0600 Subject: add kick-out tests --- test.cxx | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/test.cxx b/test.cxx index c368bf9..1b6bea7 100644 --- a/test.cxx +++ b/test.cxx @@ -423,7 +423,6 @@ TEST_CASE("An exception should be thrown when a single-argument flag is matched {"yellow", MappingEnum::yellow}, {"green", MappingEnum::green}}; - std::ostream null(nullptr); args::ArgumentParser parser("Test command"); args::Flag foo(parser, "Foo", "Foo", {'f', "foo"}, true); args::ValueFlag bar(parser, "Bar", "Bar", {'b', "bar"}, "", true); @@ -442,3 +441,37 @@ TEST_CASE("An exception should be thrown when a single-argument flag is matched REQUIRE(baz); REQUIRE(args::get(baz) == MappingEnum::green); } + +TEST_CASE("Sub-parsers should work through kick-out", "[args]") +{ + std::unordered_map map{ + {"default", MappingEnum::def}, + {"foo", MappingEnum::foo}, + {"bar", MappingEnum::bar}, + {"red", MappingEnum::red}, + {"yellow", MappingEnum::yellow}, + {"green", MappingEnum::green}}; + + const std::vector args{"--foo", "green", "--bar"}; + + args::ArgumentParser parser1("Test command"); + args::Flag foo1(parser1, "Foo", "Foo", {'f', "foo"}); + args::Flag bar1(parser1, "Bar", "Bar", {'b', "bar"}); + args::MapPositional sub(parser1, "sub", "sub", map); + sub.KickOut(true); + + auto next = parser1.ParseArgs(args); + + args::ArgumentParser parser2("Test command"); + args::Flag foo2(parser2, "Foo", "Foo", {'f', "foo"}); + args::Flag bar2(parser2, "Bar", "Bar", {'b', "bar"}); + + parser1.ParseArgs(next, std::end(args)); + + REQUIRE(foo1); + REQUIRE_FALSE(bar1); + REQUIRE(sub); + REQUIRE(args::get(sub) == MappingEnum::green); + REQUIRE_FALSE(foo2); + REQUIRE(bar2); +} -- cgit v1.2.1