mirror of
https://github.com/CLIUtils/CLI11.git
synced 2025-04-30 04:33:53 +00:00
Fixing -N values min count throw
This commit is contained in:
parent
6638549adb
commit
958b0e511e
@ -1146,6 +1146,10 @@ class App {
|
||||
for(const Option_p &opt : options_) {
|
||||
// Required or partially filled
|
||||
if(opt->get_required() || opt->count() != 0) {
|
||||
// Make sure enough -N arguments parsed (+N is already handled in parsing function)
|
||||
if(opt->get_expected() < 0 && opt->count() < static_cast<size_t>(-opt->get_expected()))
|
||||
throw ArgumentMismatch(opt->single_name() + ": At least " + std::to_string(-opt->get_expected()) +
|
||||
" required");
|
||||
|
||||
// Required but empty
|
||||
if(opt->get_required() && opt->count() == 0)
|
||||
@ -1408,8 +1412,6 @@ class App {
|
||||
args.pop_back();
|
||||
collected++;
|
||||
}
|
||||
if(op->results_.size() < static_cast<size_t>(-num))
|
||||
throw ArgumentMismatch(op->single_name() + ": At least " + std::to_string(-num) + " required");
|
||||
|
||||
} else {
|
||||
while(num > 0 && !args.empty()) {
|
||||
|
@ -324,10 +324,33 @@ TEST_F(TApp, RequiredOptsDoubleShort) {
|
||||
|
||||
EXPECT_THROW(run(), CLI::ArgumentMismatch);
|
||||
|
||||
app.reset();
|
||||
|
||||
args = {"-s", "one", "-s", "one", "-s", "one"};
|
||||
|
||||
EXPECT_THROW(run(), CLI::ArgumentMismatch);
|
||||
}
|
||||
|
||||
TEST_F(TApp, RequiredOptsDoubleNeg) {
|
||||
std::vector<std::string> strs;
|
||||
app.add_option("-s", strs)->required()->expected(-2);
|
||||
|
||||
args = {"-s", "one"};
|
||||
|
||||
EXPECT_THROW(run(), CLI::ArgumentMismatch);
|
||||
|
||||
app.reset();
|
||||
|
||||
args = {"-s", "one", "two", "-s", "three"};
|
||||
|
||||
EXPECT_NO_THROW(run());
|
||||
|
||||
EXPECT_EQ(strs, std::vector<std::string>({"one", "two", "three"}));
|
||||
|
||||
app.reset();
|
||||
args = {"-s", "one", "two"};
|
||||
|
||||
run();
|
||||
EXPECT_NO_THROW(run());
|
||||
|
||||
EXPECT_EQ(strs, std::vector<std::string>({"one", "two"}));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user