From 2477df98fadc281e55fab806ee9c7f6f47f1e661 Mon Sep 17 00:00:00 2001 From: Pavel Belikov Date: Wed, 8 Nov 2017 22:25:08 +0300 Subject: add validation for commands --- test.cxx | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'test.cxx') diff --git a/test.cxx b/test.cxx index 135d1ee..7f92f26 100644 --- a/test.cxx +++ b/test.cxx @@ -857,6 +857,46 @@ TEST_CASE("Subparser help works as expected", "[args]") } +TEST_CASE("Subparser validation works as expected", "[args]") +{ + args::ArgumentParser p("parser"); + args::Command a(p, "a", "command a", [](args::Subparser &s) + { + args::ValueFlag f(s, "", "", {'f'}, args::Options::Required); + s.Parse(); + }); + + args::Command b(p, "b", "command b"); + args::ValueFlag f(b, "", "", {'f'}, args::Options::Required); + + REQUIRE_NOTHROW(p.ParseArgs(std::vector{})); + REQUIRE_THROWS_AS(p.ParseArgs(std::vector{"a"}), args::RequiredError); + REQUIRE_NOTHROW(p.ParseArgs(std::vector{"a", "-f", "F"})); + REQUIRE_THROWS_AS(p.ParseArgs(std::vector{"b"}), args::RequiredError); + REQUIRE_NOTHROW(p.ParseArgs(std::vector{"b", "-f", "F"})); + + p.RequireCommand(true); + REQUIRE_THROWS_AS(p.ParseArgs(std::vector{}), args::ValidationError); + + p.RequireCommand(false); + REQUIRE_NOTHROW(p.ParseArgs(std::vector{})); +} + +TEST_CASE("Global options work as expected", "[args]") +{ + args::Group globals; + args::Flag f(globals, "f", "f", {'f'}); + + args::ArgumentParser p("parser"); + args::GlobalOptions g(p, globals); + args::Command a(p, "a", "command a"); + args::Command b(p, "b", "command b"); + + REQUIRE_NOTHROW(p.ParseArgs(std::vector{"-f"})); + REQUIRE_NOTHROW(p.ParseArgs(std::vector{"a", "-f"})); + REQUIRE_NOTHROW(p.ParseArgs(std::vector{"b", "-f"})); +} + #undef ARGS_HXX #define ARGS_TESTNAMESPACE #define ARGS_NOEXCEPT -- cgit v1.2.1