From 0fb2413680c747d5c008941deabb09774d6000eb Mon Sep 17 00:00:00 2001 From: Pavel Belikov Date: Mon, 16 Oct 2017 21:42:55 +0300 Subject: add ImplicitValueFlag, NargsValueFlag --- test.cxx | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) (limited to 'test.cxx') diff --git a/test.cxx b/test.cxx index 67172b4..0d471a5 100644 --- a/test.cxx +++ b/test.cxx @@ -606,6 +606,71 @@ TEST_CASE("Hidden options are excluded from help", "[args]") REQUIRE(std::get<0>(desc[2]) == "b[bar]"); } +TEST_CASE("Implicit values work as expected", "[args]") +{ + args::ArgumentParser parser("Test command"); + args::ImplicitValueFlag j(parser, "parallel", "parallel", {'j', "parallel"}, 0, 1); + args::Flag foo(parser, "FOO", "test flag", {'f', "foo"}); + REQUIRE_NOTHROW(parser.ParseArgs(std::vector{"-j"})); + REQUIRE(args::get(j) == 0); + + REQUIRE_NOTHROW(parser.ParseArgs(std::vector{"-j4"})); + REQUIRE(args::get(j) == 4); + + REQUIRE_NOTHROW(parser.ParseArgs(std::vector{"-j", "4"})); + REQUIRE(args::get(j) == 4); + + REQUIRE_NOTHROW(parser.ParseArgs(std::vector{"-j", "-f"})); + REQUIRE(args::get(j) == 0); +} + +TEST_CASE("Nargs work as expected", "[args]") +{ + args::ArgumentParser parser("Test command"); + args::NargsValueFlag a(parser, "", "", {'a'}, 2); + args::NargsValueFlag b(parser, "", "", {'b'}, {2, 3}); + args::NargsValueFlag c(parser, "", "", {'c'}, {0, 2}); + args::Flag f(parser, "", "", {'f'}); + + REQUIRE_NOTHROW(parser.ParseArgs(std::vector{"-a", "1", "2"})); + REQUIRE((args::get(a) == std::vector{1, 2})); + + REQUIRE_NOTHROW(parser.ParseArgs(std::vector{"-a", "1", "2", "-f"})); + REQUIRE((args::get(a) == std::vector{1, 2})); + REQUIRE(args::get(f) == true); + + REQUIRE_THROWS_AS(parser.ParseArgs(std::vector{"-a", "1"}), args::ParseError); + REQUIRE_THROWS_AS(parser.ParseArgs(std::vector{"-a1"}), args::ParseError); + REQUIRE_THROWS_AS(parser.ParseArgs(std::vector{"-a1", "2"}), args::ParseError); + + REQUIRE_NOTHROW(parser.ParseArgs(std::vector{"-b", "1", "2", "-f"})); + REQUIRE((args::get(b) == std::vector{1, 2})); + REQUIRE(args::get(f) == true); + + REQUIRE_NOTHROW(parser.ParseArgs(std::vector{"-b", "1", "2", "3"})); + REQUIRE((args::get(b) == std::vector{1, 2, 3})); + REQUIRE(args::get(f) == false); + + std::vector vec; + for (int c : b) + { + vec.push_back(c); + } + + REQUIRE((vec == std::vector{1, 2, 3})); + + parser.SetArgumentSeparations(true, true, false, false); + REQUIRE_THROWS_AS(parser.ParseArgs(std::vector{"-a", "1", "2"}), args::ParseError); + + REQUIRE_NOTHROW(parser.ParseArgs(std::vector{"-c", "-f"})); + REQUIRE(args::get(c).empty()); + REQUIRE(args::get(f) == true); + + REQUIRE_NOTHROW(parser.ParseArgs(std::vector{"-cf"})); + REQUIRE((args::get(c) == std::vector{"f"})); + REQUIRE(args::get(f) == false); +} + #undef ARGS_HXX #define ARGS_TESTNAMESPACE #define ARGS_NOEXCEPT -- cgit v1.2.1