From 25274e2c7b07d69534e9688a5956ff48f91eab5e Mon Sep 17 00:00:00 2001 From: Philip Top Date: Fri, 28 Oct 2022 06:57:54 -0700 Subject: [PATCH] fix: missing function definition (#793) * the get_option_group definition was missing from the splitting of the calls. * style: pre-commit.ci fixes * the get_option_group definition was missing from the splitting of the calls. * style: pre-commit.ci fixes * add test for missing function * style: pre-commit.ci fixes * add test for get_option_group Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- include/CLI/impl/App_inl.hpp | 9 +++++++++ tests/OptionGroupTest.cpp | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/include/CLI/impl/App_inl.hpp b/include/CLI/impl/App_inl.hpp index 16694fd3..4d8b9445 100644 --- a/include/CLI/impl/App_inl.hpp +++ b/include/CLI/impl/App_inl.hpp @@ -433,6 +433,15 @@ CLI11_NODISCARD CLI11_INLINE CLI::App_p App::get_subcommand_ptr(int index) const throw OptionNotFound(std::to_string(index)); } +CLI11_NODISCARD CLI11_INLINE CLI::App *App::get_option_group(std::string group_name) const { + for(const App_p &app : subcommands_) { + if(app->name_.empty() && app->group_ == group_name) { + return app.get(); + } + } + throw OptionNotFound(group_name); +} + CLI11_NODISCARD CLI11_INLINE std::size_t App::count_all() const { std::size_t cnt{0}; for(const auto &opt : options_) { diff --git a/tests/OptionGroupTest.cpp b/tests/OptionGroupTest.cpp index bc3a9455..8c5dc38d 100644 --- a/tests/OptionGroupTest.cpp +++ b/tests/OptionGroupTest.cpp @@ -448,6 +448,12 @@ TEST_CASE_METHOD(ManyGroups, "SingleGroup", "[optiongroup]") { CHECK_THROWS_AS(run(), CLI::RequiredError); } +TEST_CASE_METHOD(ManyGroups, "getGroup", "[optiongroup]") { + auto *mn = app.get_option_group("main"); + CHECK(mn == main); + CHECK_THROWS_AS(app.get_option_group("notfound"), CLI::OptionNotFound); +} + TEST_CASE_METHOD(ManyGroups, "ExcludesGroup", "[optiongroup]") { // only 1 group can be used g1->excludes(g2);