mirror of
https://github.com/CLIUtils/CLI11.git
synced 2025-04-29 20:23:55 +00:00
Fix ExtrasError.
This commit is contained in:
parent
675e753661
commit
51c32efb7c
@ -954,7 +954,7 @@ class App {
|
||||
if(recurse) {
|
||||
for(const App_p &sub : subcommands_) {
|
||||
std::vector<std::string> output = sub->remaining(recurse);
|
||||
miss_list.assign(std::begin(output), std::end(output));
|
||||
std::copy(std::begin(output), std::end(output), std::back_inserter(miss_list));
|
||||
}
|
||||
}
|
||||
return miss_list;
|
||||
@ -1114,16 +1114,15 @@ class App {
|
||||
throw RequiredError(std::to_string(require_subcommand_) + " subcommand(s) required");
|
||||
|
||||
// Convert missing (pairs) to extras (string only)
|
||||
if(parent_ == nullptr) {
|
||||
args = remaining(true);
|
||||
std::reverse(std::begin(args), std::end(args));
|
||||
}
|
||||
|
||||
if(!(allow_extras_ || prefix_command_)) {
|
||||
size_t num_left_over = remaining_size();
|
||||
|
||||
if(num_left_over > 0 && !(allow_extras_ || prefix_command_))
|
||||
if(num_left_over > 0) {
|
||||
args = remaining(false);
|
||||
std::reverse(std::begin(args), std::end(args));
|
||||
throw ExtrasError("[" + detail::rjoin(args, " ") + "]");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Parse one ini param, return false if not found in any subcommand, remove if it is
|
||||
///
|
||||
|
@ -32,6 +32,23 @@ TEST_F(TApp, BasicSubcommands) {
|
||||
app.reset();
|
||||
args = {"SUb2"};
|
||||
EXPECT_THROW(run(), CLI::ExtrasError);
|
||||
|
||||
app.reset();
|
||||
args = {"SUb2"};
|
||||
try {
|
||||
run();
|
||||
} catch(const CLI::ExtrasError &e) {
|
||||
EXPECT_THAT(e.what(), HasSubstr("SUb2"));
|
||||
}
|
||||
|
||||
app.reset();
|
||||
args = {"sub1", "extra"};
|
||||
try {
|
||||
run();
|
||||
} catch(const CLI::ExtrasError &e) {
|
||||
EXPECT_THAT(e.what(), HasSubstr("extra"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
TEST_F(TApp, MultiSubFallthrough) {
|
||||
@ -339,6 +356,14 @@ TEST_F(TApp, SubComExtras) {
|
||||
run();
|
||||
EXPECT_EQ(app.remaining(), std::vector<std::string>());
|
||||
EXPECT_EQ(sub->remaining(), std::vector<std::string>({"extra1", "extra2"}));
|
||||
|
||||
app.reset();
|
||||
|
||||
args = {"extra1", "extra2", "sub", "extra3", "extra4"};
|
||||
run();
|
||||
EXPECT_EQ(app.remaining(), std::vector<std::string>({"extra1", "extra2"}));
|
||||
EXPECT_EQ(app.remaining(true), std::vector<std::string>({"extra1", "extra2", "extra3", "extra4"}));
|
||||
EXPECT_EQ(sub->remaining(), std::vector<std::string>({"extra3", "extra4"}));
|
||||
}
|
||||
|
||||
TEST_F(TApp, Required1SubCom) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user