Util+Test: Implement exit on first error in main ArgParser loop

This commit is contained in:
Riyyi
2021-09-07 18:14:14 +02:00
parent f021cf0e15
commit dc4fcc10ce
2 changed files with 31 additions and 2 deletions
+4
View File
@@ -241,6 +241,10 @@ bool ArgParser::parse(int argc, const char* argv[])
}
printf("-> argu: '%s'", argument.data());
}
if (m_exitOnFirstError && !result) {
break;
}
}
return result;
+27 -2
View File
@@ -461,8 +461,8 @@ TEST_CASE(VectorStringOptions)
EXPECT_EQ(result, true);
EXPECT_EQ(vectorOpt1.size(), 2);
if (vectorOpt1.size() == 2) {
EXPECT_EQ(vectorOpt1[0], "hello");
EXPECT_EQ(vectorOpt1[1], "world");
EXPECT_EQ(vectorOpt1.at(0), "hello");
EXPECT_EQ(vectorOpt1.at(1), "world");
}
}
@@ -590,4 +590,29 @@ TEST_CASE(StopOnFirstNonOption)
EXPECT_EQ(result, true);
EXPECT_EQ(boolOpt1, true);
EXPECT_EQ(boolOpt2, false);
// -----------------------------------------
TEST_CASE(ExitOnFirstError)
{
// Do not stop on first error, one non-existing given
// Expected: parsing fails, boolOpt1 is set
bool boolOpt1 = false;
auto result = runParser({ "--this-doesnt-exist", "--this-exist" }, [&](auto& parser) {
parser.setExitOnFirstError(false);
parser.addOption(boolOpt1, '\0', "this-exist", nullptr, nullptr);
});
EXPECT_EQ(result, false);
EXPECT_EQ(boolOpt1, true);
// Stop on first error, one non-existing given
// Expected: parsing fails, boolOpt1 is not set
boolOpt1 = false;
result = runParser({ "--this-doesnt-exist", "--this-exist" }, [&](auto& parser) {
parser.setExitOnFirstError(true);
parser.addOption(boolOpt1, '\0', "this-exist", nullptr, nullptr);
});
EXPECT_EQ(result, false);
EXPECT_EQ(boolOpt1, false);
}
}