aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTaylor C. Richberger <Taywee@gmx.com>2016-06-29 09:58:46 -0600
committerTaylor C. Richberger <Taywee@gmx.com>2016-06-29 09:58:46 -0600
commit645f917e6503ddc5bffeb1b23ed7b6d84ef5d1bb (patch)
tree77c48b3444da25ec59b91bb95138a5f644b97f56
parentfix weird typo (diff)
downloadargs.hxx-645f917e6503ddc5bffeb1b23ed7b6d84ef5d1bb.tar.xz
add kick-out tests
-rw-r--r--test.cxx35
1 files changed, 34 insertions, 1 deletions
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<std::string> 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<std::string, MappingEnum> map{
+ {"default", MappingEnum::def},
+ {"foo", MappingEnum::foo},
+ {"bar", MappingEnum::bar},
+ {"red", MappingEnum::red},
+ {"yellow", MappingEnum::yellow},
+ {"green", MappingEnum::green}};
+
+ const std::vector<std::string> 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<std::string, MappingEnum> 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);
+}