From a6d1ac753ef3fd1d99edf6a4b48d507c3bc4e30d Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Bayle Date: Wed, 29 May 2019 15:56:07 +0200 Subject: [PATCH] Add tests for booleans without implicit value --- test/options.cpp | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/test/options.cpp b/test/options.cpp index 7fb52b3..fb14d90 100644 --- a/test/options.cpp +++ b/test/options.cpp @@ -250,6 +250,67 @@ TEST_CASE("Empty with implicit value", "[implicit]") REQUIRE(result["implicit"].as() == ""); } +TEST_CASE("Boolean without implicit value", "[implicit]") +{ + cxxopts::Options options("no_implicit", "bool without an implicit value"); + options.add_options() + ("bool", "Boolean without implicit", cxxopts::value() + ->no_implicit_value()); + + SECTION("When no value provided") { + Argv av({"no_implicit", "--bool"}); + + char** argv = av.argv(); + auto argc = av.argc(); + + CHECK_THROWS_AS(options.parse(argc, argv), cxxopts::missing_argument_exception&); + } + + SECTION("With equal-separated true") { + Argv av({"no_implicit", "--bool=true"}); + + char** argv = av.argv(); + auto argc = av.argc(); + + auto result = options.parse(argc, argv); + CHECK(result.count("bool") == 1); + CHECK(result["bool"].as() == true); + } + + SECTION("With equal-separated false") { + Argv av({"no_implicit", "--bool=false"}); + + char** argv = av.argv(); + auto argc = av.argc(); + + auto result = options.parse(argc, argv); + CHECK(result.count("bool") == 1); + CHECK(result["bool"].as() == false); + } + + SECTION("With space-separated true") { + Argv av({"no_implicit", "--bool", "true"}); + + char** argv = av.argv(); + auto argc = av.argc(); + + auto result = options.parse(argc, argv); + CHECK(result.count("bool") == 1); + CHECK(result["bool"].as() == true); + } + + SECTION("With space-separated false") { + Argv av({"no_implicit", "--bool", "false"}); + + char** argv = av.argv(); + auto argc = av.argc(); + + auto result = options.parse(argc, argv); + CHECK(result.count("bool") == 1); + CHECK(result["bool"].as() == false); + } +} + TEST_CASE("Default values", "[default]") { cxxopts::Options options("defaults", "has defaults");