瀏覽代碼

Cover the rest of the usecases for arguments.

Sam Jaffe 4 年之前
父節點
當前提交
fb2626a821
共有 1 個文件被更改,包括 57 次插入0 次删除
  1. 57 0
      test/argument_test.cpp

+ 57 - 0
test/argument_test.cpp

@@ -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);
+}