7
mirror of https://gitlab.com/kicad/code/kicad.git synced 2024-11-24 18:35:02 +00:00
kicad/thirdparty/argparse/test/test_as_container.cpp
2023-12-17 21:29:05 -05:00

58 lines
1.9 KiB
C++

#ifdef WITH_MODULE
import argparse;
#else
#include <argparse/argparse.hpp>
#endif
#include <doctest.hpp>
using doctest::test_suite;
TEST_CASE("Get argument with .at()" * test_suite("as_container")) {
argparse::ArgumentParser program("test");
auto &dir_arg = program.add_argument("--dir");
program.at("--dir").default_value(std::string("/home/user"));
SUBCASE("and default value") {
program.parse_args({"test"});
REQUIRE(&(program.at("--dir")) == &dir_arg);
REQUIRE(program["--dir"] == std::string("/home/user"));
REQUIRE(program.at("--dir") == std::string("/home/user"));
}
SUBCASE("and user-supplied value") {
program.parse_args({"test", "--dir", "/usr/local/database"});
REQUIRE(&(program.at("--dir")) == &dir_arg);
REQUIRE(program["--dir"] == std::string("/usr/local/database"));
REQUIRE(program.at("--dir") == std::string("/usr/local/database"));
}
SUBCASE("with unknown argument") {
program.parse_args({"test"});
REQUIRE_THROWS_WITH_AS(program.at("--folder"), "No such argument: --folder",
std::logic_error);
}
}
TEST_CASE("Get subparser with .at()" * test_suite("as_container")) {
argparse::ArgumentParser program("test");
argparse::ArgumentParser walk_cmd("walk");
auto &speed = walk_cmd.add_argument("speed");
program.add_subparser(walk_cmd);
SUBCASE("and its argument") {
program.parse_args({"test", "walk", "4km/h"});
REQUIRE(&(program.at<argparse::ArgumentParser>("walk")) == &walk_cmd);
REQUIRE(&(program.at<argparse::ArgumentParser>("walk").at("speed")) ==
&speed);
REQUIRE(program.at<argparse::ArgumentParser>("walk").is_used("speed"));
}
SUBCASE("with unknown command") {
program.parse_args({"test"});
REQUIRE_THROWS_WITH_AS(program.at<argparse::ArgumentParser>("fly"),
"No such subparser: fly", std::logic_error);
}
}