diff --git a/include/CLI/App.hpp b/include/CLI/App.hpp index 0a70bac6..013d2db3 100644 --- a/include/CLI/App.hpp +++ b/include/CLI/App.hpp @@ -2413,7 +2413,7 @@ class App { } // check for section close if(item.name == "--") { - if(configurable_) { + if(configurable_ && parse_complete_callback_) { _process_callbacks(); _process_requirements(); run_callback(); diff --git a/tests/ConfigFileTest.cpp b/tests/ConfigFileTest.cpp index 29e6c7cc..8359a9cf 100644 --- a/tests/ConfigFileTest.cpp +++ b/tests/ConfigFileTest.cpp @@ -1581,6 +1581,25 @@ TEST_CASE_METHOD(TApp, "DuplicateSubcommandCallbacks", "[config]") { CHECK(3 == count); } +TEST_CASE_METHOD(TApp, "SubcommandCallbackSingle", "[config]") { + + TempFile tmptoml{"Testtomlcallback.toml"}; + + app.set_config("--config", tmptoml); + + { + std::ofstream out{tmptoml}; + out << "[foo]" << std::endl; + } + int count{0}; + auto *foo = app.add_subcommand("foo"); + foo->configurable(); + foo->callback([&count]() { ++count; }); + + run(); + CHECK(1 == count); +} + TEST_CASE_METHOD(TApp, "IniFailure", "[config]") { TempFile tmpini{"TestIniTmp.ini"};