summaryrefslogtreecommitdiff
path: root/src/test-option-parser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/test-option-parser.cc')
-rw-r--r--src/test-option-parser.cc29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/test-option-parser.cc b/src/test-option-parser.cc
index 3d190e71..9295c581 100644
--- a/src/test-option-parser.cc
+++ b/src/test-option-parser.cc
@@ -150,3 +150,32 @@ TEST(OptionParser, OneOrMoreArguments) {
parser.Parse(3, const_cast<char**>(args));
EXPECT_EQ("hellogoodbye", argument);
}
+
+TEST(OptionParser, ZeroOrMoreArguments) {
+ std::string argument;
+ OptionParser parser("prog", "desc");
+ parser.AddArgument("arg", OptionParser::ArgumentCount::ZeroOrMore,
+ [&](const char* arg) { argument += arg; });
+
+ const char* args_none[] = {"prog name"};
+ parser.Parse(1, const_cast<char**>(args_none));
+ EXPECT_EQ("", argument);
+
+ const char* args_many[] = {"prog name", "hello", "goodbye"};
+ parser.Parse(3, const_cast<char**>(args_many));
+ EXPECT_EQ("hellogoodbye", argument);
+}
+
+TEST(OptionParser, StopProccessing) {
+ std::string argument;
+ bool has_x = false;
+ OptionParser parser("prog", "desc");
+ parser.AddArgument("arg", OptionParser::ArgumentCount::ZeroOrMore,
+ [&](const char* arg) { argument += arg; });
+ parser.AddOption('x', "x", "help", [&]() { has_x = true; });
+
+ const char* args_many[] = {"prog name", "-x", "--", "foo", "-x", "-y", "bar"};
+ parser.Parse(7, const_cast<char**>(args_many));
+ EXPECT_TRUE(has_x);
+ EXPECT_EQ("foo-x-ybar", argument);
+}