diff --git a/test/options.cpp b/test/options.cpp index 5d86c3b..843f4ae 100644 --- a/test/options.cpp +++ b/test/options.cpp @@ -898,6 +898,60 @@ TEST_CASE("Optional value", "[optional]") } #endif +#ifdef CXXOPTS_HAS_OPTIONAL +TEST_CASE("std::filesystem::path value", "[path]") +{ + cxxopts::Options options("options", "query as std::fileystem::path"); + options.add_options() + ("a", "Path", cxxopts::value()) + ("b", "Path", cxxopts::value()) + ("c", "Path", cxxopts::value()) + ("d", "Path", cxxopts::value()) + ("e", "Path", cxxopts::value()) + ; + + SECTION("Available") { + Argv av({ + "available", + "-a", "hello.txt", + "-b", "C:\\Users\\JoeCitizen\\hello world.txt", + "-c", "/home/joecitzen/hello world.txt", + "-d", "../world.txt" + }); + + auto** argv = av.argv(); + auto argc = av.argc(); + + auto result = options.parse(argc, argv); + + CHECK(result.as_optional("a")); + CHECK(result.as_optional("b")); + CHECK(result.as_optional("c")); + CHECK(result.as_optional("d")); + CHECK(!result.as_optional("e")); + + CHECK(result.as_optional("a") == "hello.txt"); + CHECK(result.as_optional("b") == "C:\\Users\\JoeCitizen\\hello world.txt"); + CHECK(result.as_optional("c") == "/home/joecitzen/hello world.txt"); + CHECK(result.as_optional("d") == "../world.txt"); + } + + SECTION("Unavailable") { + Argv av({ + "unavailable" + }); + + auto** argv = av.argv(); + auto argc = av.argc(); + + auto result = options.parse(argc, argv); + + CHECK(!result.as_optional("a")); + } + +} +#endif + TEST_CASE("Initializer list with group", "[options]") { cxxopts::Options options("Initializer list group", " - test initializer list with group");