diff --git a/src/cli/ArgumentParser.cpp b/src/cli/ArgumentParser.cpp index 3ff957b..358f129 100644 --- a/src/cli/ArgumentParser.cpp +++ b/src/cli/ArgumentParser.cpp @@ -96,12 +96,17 @@ CArgumentParserImpl::CArgumentParserImpl(const std::span& args) { } std::vector::iterator CArgumentParserImpl::getValue(const std::string_view& sv) { + if (sv.empty()) + return m_values.end(); auto it = std::ranges::find_if(m_values, [&sv](const auto& e) { return e.full == sv || e.abbrev == sv; }); return it; } std::expected CArgumentParserImpl::registerOption(const std::string_view& name, const std::string_view& abbrev, const std::string_view& description, eArgumentType type) { + if (name.empty()) + return std::unexpected("Name cannot be empty"); + if (getValue(name) != m_values.end() || getValue(abbrev) != m_values.end()) return std::unexpected("Value already exists"); diff --git a/tests/cli/ArgumentParser.cpp b/tests/cli/ArgumentParser.cpp index fec00b2..c5ed600 100644 --- a/tests/cli/ArgumentParser.cpp +++ b/tests/cli/ArgumentParser.cpp @@ -49,6 +49,8 @@ TEST(CLI, ArgumentParser) { EXPECT_TRUE(parser2.registerBoolOption("hello2", "e", "Says hello 2")); EXPECT_TRUE(parser2.registerFloatOption("value", "v", "Sets a valueeeeeee")); EXPECT_TRUE(parser2.registerIntOption("longlonglonglongintopt", "l", "Long long maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaan maaan man maaan man maaan man maaan man")); + EXPECT_TRUE(parser2.registerFloatOption("value2", "", "Sets a valueeeeeee 2")); + EXPECT_TRUE(!parser2.registerFloatOption("", "a", "Sets a valueeeeeee 2")); auto result2 = parser2.parse();