CommandLineParser: add special <none> value to disallow empty strings

some mandatory string keys like paths must not be empty. Add the special
default value `<none>` so the CommandLineParser can enforce this and
generate an according error message for us.
This commit is contained in:
Pavel Rojtberg
2015-09-23 12:03:44 +02:00
parent a388806555
commit 1dd7f546af
3 changed files with 47 additions and 23 deletions

View File

@@ -142,9 +142,8 @@ TEST(CommandLineParser, testPositional_noArgs)
EXPECT_EQ("default1", parser.get<String>("@arg1"));
EXPECT_EQ("default1", parser.get<String>(0));
parser.get<String>("@arg2");
parser.get<String>(1);
EXPECT_TRUE(parser.check());
EXPECT_EQ("", parser.get<String>("@arg2"));
EXPECT_EQ("", parser.get<String>(1));
}
TEST(CommandLineParser, testPositional_default)
@@ -186,4 +185,22 @@ TEST(CommandLineParser, testPositional_withFlagsAfter)
EXPECT_EQ("test2", parser.get<String>(1));
}
TEST(CommandLineParser, testEmptyStringValue)
{
static const char * const keys3 =
"{ @pos0 | | empty default value }"
"{ @pos1 | <none> | forbid empty default value }";
const char* argv[] = {"<bin>"};
const int argc = 1;
cv::CommandLineParser parser(argc, argv, keys3);
// EXPECT_TRUE(parser.has("@pos0"));
EXPECT_EQ("", parser.get<String>("@pos0"));
EXPECT_TRUE(parser.check());
EXPECT_FALSE(parser.has("@pos1"));
parser.get<String>(1);
EXPECT_FALSE(parser.check());
}
} // namespace