argparse/test/test_get.cpp
Sean Robinson f0d68de134 Confirm arguments are parsed before allowing ArgumentParser::get
If the developer forgot to call ArgumentParser::parse_args<>, attempts to
use ::get, ::present, etc., would raise "No value provided...".  With this
change, the error better describes what went wrong.

Signed-off-by: Sean Robinson <sean.robinson@scottsdalecc.edu>
2021-09-14 09:55:03 -07:00

38 lines
1.4 KiB
C++

#include <doctest.hpp>
#include <argparse/argparse.hpp>
using doctest::test_suite;
TEST_CASE("Getting a simple argument" * test_suite("ArgumentParser::get")) {
argparse::ArgumentParser program("test");
program.add_argument("-s", "--stuff");
REQUIRE_NOTHROW(program.parse_args({ "test", "-s", "./src" }));
REQUIRE(program.get("--stuff") == "./src");
}
TEST_CASE("Skipped call to parse_args" * test_suite("ArgumentParser::get")) {
argparse::ArgumentParser program("test");
program.add_argument("stuff");
REQUIRE_THROWS_WITH_AS(program.get("stuff"),
"Nothing parsed, no arguments are available.",
std::logic_error);
}
TEST_CASE("Missing argument" * test_suite("ArgumentParser::get")) {
argparse::ArgumentParser program("test");
program.add_argument("-s", "--stuff");
REQUIRE_NOTHROW(program.parse_args({ "test" }));
REQUIRE_THROWS_WITH_AS(program.get("--stuff"),
"No value provided for '--stuff'.",
std::logic_error);
}
TEST_CASE("Implicit argument" * test_suite("ArgumentParser::get")) {
argparse::ArgumentParser program("test");
program.add_argument("-s", "--stuff").nargs(1);
REQUIRE_NOTHROW(program.parse_args({ "test" }));
REQUIRE_THROWS_WITH_AS(program.get("--stuff"),
"No value provided for '--stuff'.",
std::logic_error);
}