From 857d6314ddbf57a240ead2c3773073be7a405af5 Mon Sep 17 00:00:00 2001 From: Baojun Wang Date: Fri, 20 Sep 2019 10:20:55 -0400 Subject: [PATCH] Add test for parsing empty positional arguments --- test/options.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/options.cpp b/test/options.cpp index d110e01..195c837 100644 --- a/test/options.cpp +++ b/test/options.cpp @@ -232,6 +232,31 @@ TEST_CASE("Positional not valid", "[positional]") { CHECK_THROWS_AS(options.parse(argc, argv), cxxopts::option_not_exists_exception&); } +TEST_CASE("Positional with empty arguments", "[positional]") { + cxxopts::Options options("positional_with_empty_arguments", "positional with empty argument"); + options.add_options() + ("long", "a long option", cxxopts::value()) + ("program", "program to run", cxxopts::value()) + ("programArgs", "program arguments", cxxopts::value>()) + ; + + options.parse_positional("program", "programArgs"); + + Argv av({"foobar", "--long", "long_value", "--", "someProgram", "ab", "-c", "d", "--ef", "gh", "--ijk=lm", "n", "", "o", }); + std::vector expected({"ab", "-c", "d", "--ef", "gh", "--ijk=lm", "n", "", "o", }); + + char** argv = av.argv(); + auto argc = av.argc(); + + auto result = options.parse(argc, argv); + auto actual = result["programArgs"].as>(); + + REQUIRE(result.count("program") == 1); + REQUIRE(result["program"].as() == "someProgram"); + REQUIRE(result.count("programArgs") == expected.size()); + REQUIRE(actual == expected); +} + TEST_CASE("Empty with implicit value", "[implicit]") { cxxopts::Options options("empty_implicit", "doesn't handle empty");