This commit is contained in:
Pranav Srinivas Kumar 2023-11-13 14:16:26 -08:00
parent af442b4da0
commit f5287e2f20
2 changed files with 40 additions and 4 deletions

View File

@ -845,8 +845,14 @@ public:
if (m_choices.has_value()) { if (m_choices.has_value()) {
// Check each value in (start, end) and make sure // Check each value in (start, end) and make sure
// it is in the list of allowed choices/options // it is in the list of allowed choices/options
std::size_t i = 0;
auto max_number_of_args = m_num_args_range.get_max();
for (auto it = start; it != end; ++it) { for (auto it = start; it != end; ++it) {
if (i == max_number_of_args) {
break;
}
find_value_in_choices_or_throw(it); find_value_in_choices_or_throw(it);
i += 1;
} }
} }

View File

@ -23,6 +23,36 @@ TEST_CASE("Parse argument that is in the fixed number of allowed choices" *
program.parse_args({"test", "red"}); program.parse_args({"test", "red"});
} }
TEST_CASE("Parse argument that is in the fixed number of allowed choices, with "
"other positional argument" *
test_suite("choices")) {
argparse::ArgumentParser program("test");
program.add_argument("--input")
.default_value(std::string{"baz"})
.choices("foo", "bar", "baz");
program.add_argument("--value").scan<'i', int>().default_value(0);
REQUIRE_NOTHROW(
program.parse_args({"test", "--input", "foo", "--value", "1"}));
REQUIRE(program.get("--input") == "foo");
REQUIRE(program.get<int>("--value") == 1);
}
TEST_CASE("Parse argument that is in the fixed number of allowed choices, with "
"other positional argument (reversed)" *
test_suite("choices")) {
argparse::ArgumentParser program("test");
program.add_argument("--input")
.default_value(std::string{"baz"})
.choices("foo", "bar", "baz");
program.add_argument("--value").scan<'i', int>().default_value(0);
REQUIRE_NOTHROW(
program.parse_args({"test", "--value", "1", "--input", "foo"}));
REQUIRE(program.get("--input") == "foo");
REQUIRE(program.get<int>("--value") == 1);
}
TEST_CASE("Parse argument that is in the fixed number of allowed choices, with " TEST_CASE("Parse argument that is in the fixed number of allowed choices, with "
"invalid default" * "invalid default" *
test_suite("choices")) { test_suite("choices")) {