EXPECT_EQ(0u, ExtraArgs.size());
}
+TEST(CommandLineTest, DefaultValue) {
+ cl::ResetCommandLineParser();
+
+ StackOption<bool> BoolOption("bool-option");
+ StackOption<std::string> StrOption("str-option");
+ StackOption<bool> BoolInitOption("bool-init-option", cl::init(true));
+ StackOption<std::string> StrInitOption("str-init-option",
+ cl::init("str-default-value"));
+
+ const char *Args[] = {"prog"}; // no options
+
+ std::string Errs;
+ raw_string_ostream OS(Errs);
+ EXPECT_TRUE(cl::ParseCommandLineOptions(1, Args, StringRef(), &OS));
+ EXPECT_TRUE(OS.str().empty());
+
+ EXPECT_TRUE(!BoolOption);
+ EXPECT_FALSE(BoolOption.Default.hasValue());
+ EXPECT_EQ(0, BoolOption.getNumOccurrences());
+
+ EXPECT_EQ("", StrOption);
+ EXPECT_FALSE(StrOption.Default.hasValue());
+ EXPECT_EQ(0, StrOption.getNumOccurrences());
+
+ EXPECT_TRUE(BoolInitOption);
+ EXPECT_TRUE(BoolInitOption.Default.hasValue());
+ EXPECT_EQ(0, BoolInitOption.getNumOccurrences());
+
+ EXPECT_EQ("str-default-value", StrInitOption);
+ EXPECT_TRUE(StrInitOption.Default.hasValue());
+ EXPECT_EQ(0, StrInitOption.getNumOccurrences());
+
+ const char *Args2[] = {"prog", "-bool-option", "-str-option=str-value",
+ "-bool-init-option=0",
+ "-str-init-option=str-init-value"};
+
+ EXPECT_TRUE(cl::ParseCommandLineOptions(5, Args2, StringRef(), &OS));
+ EXPECT_TRUE(OS.str().empty());
+
+ EXPECT_TRUE(BoolOption);
+ EXPECT_FALSE(BoolOption.Default.hasValue());
+ EXPECT_EQ(1, BoolOption.getNumOccurrences());
+
+ EXPECT_EQ("str-value", StrOption);
+ EXPECT_FALSE(StrOption.Default.hasValue());
+ EXPECT_EQ(1, StrOption.getNumOccurrences());
+
+ EXPECT_FALSE(BoolInitOption);
+ EXPECT_TRUE(BoolInitOption.Default.hasValue());
+ EXPECT_EQ(1, BoolInitOption.getNumOccurrences());
+
+ EXPECT_EQ("str-init-value", StrInitOption);
+ EXPECT_TRUE(StrInitOption.Default.hasValue());
+ EXPECT_EQ(1, StrInitOption.getNumOccurrences());
+}
+
} // anonymous namespace