|
|
@@ -36,3 +36,60 @@ TEST(ArgumentTest, HasNoIssueWithOverflowArg) {
|
|
|
EXPECT_THAT(options.arg0, Eq("value"));
|
|
|
EXPECT_THAT(options.args(), ElementsAre("extra"));
|
|
|
}
|
|
|
+
|
|
|
+struct OptionalArgumentTest : program::Arguments<OptionalArgumentTest> {
|
|
|
+ using program::Arguments<OptionalArgumentTest>::Arguments;
|
|
|
+
|
|
|
+ std::string arg0 = argument(0, "arg0");
|
|
|
+ std::string arg1 = argument(1, "arg1") = "second";
|
|
|
+};
|
|
|
+
|
|
|
+TEST(OptionalArgumentTest, DoesNotRequireOptionalArg) {
|
|
|
+ EXPECT_NO_THROW(parse<OptionalArgumentTest>({"", "value"}));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(OptionalArgumentTest, DefaultsOutValueAsExpected) {
|
|
|
+ auto const options = parse<OptionalArgumentTest>({"", "value"});
|
|
|
+ EXPECT_THAT(options.arg1, Eq("second"));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(OptionalArgumentTest, DoesNotOverflowSecondArg) {
|
|
|
+ auto const options = parse<OptionalArgumentTest>({"", "value", "extra"});
|
|
|
+ EXPECT_THAT(options.arg0, Eq("value"));
|
|
|
+ EXPECT_THAT(options.arg1, Eq("extra"));
|
|
|
+ EXPECT_THAT(options.args(), ElementsAre());
|
|
|
+}
|
|
|
+
|
|
|
+struct DuplicateArgumentTest : program::Arguments<DuplicateArgumentTest> {
|
|
|
+ using program::Arguments<DuplicateArgumentTest>::Arguments;
|
|
|
+
|
|
|
+ std::string arg0 = argument(0, "arg0");
|
|
|
+ std::string arg1 = argument(0, "arg1");
|
|
|
+};
|
|
|
+
|
|
|
+TEST(DuplicateArgumentTest, ThrowsOnConstruction) {
|
|
|
+ EXPECT_THROW(DuplicateArgumentTest(), program::IllegalPositionError);
|
|
|
+}
|
|
|
+
|
|
|
+struct SkippedArgumentTest : program::Arguments<SkippedArgumentTest> {
|
|
|
+ using program::Arguments<SkippedArgumentTest>::Arguments;
|
|
|
+
|
|
|
+ std::string arg0 = argument(1, "arg0");
|
|
|
+};
|
|
|
+
|
|
|
+TEST(SkippedArgumentTest, ThrowsOnParsing) {
|
|
|
+ EXPECT_NO_THROW(SkippedArgumentTest());
|
|
|
+ EXPECT_THROW(parse<SkippedArgumentTest>({"", "", ""}),
|
|
|
+ program::IllegalPositionError);
|
|
|
+}
|
|
|
+
|
|
|
+struct OOOArgumentTest : program::Arguments<OOOArgumentTest> {
|
|
|
+ using program::Arguments<OOOArgumentTest>::Arguments;
|
|
|
+
|
|
|
+ std::string arg0 = argument(0, "arg0") = "";
|
|
|
+ std::string arg1 = argument(1, "arg1");
|
|
|
+};
|
|
|
+
|
|
|
+TEST(OOOArgumentTest, ThrowsOnConstruction) {
|
|
|
+ EXPECT_THROW(OOOArgumentTest(), program::ArgumentStructureError);
|
|
|
+}
|