소스 검색

test: add test for generator methods

Sam Jaffe 2 년 전
부모
커밋
23c61f9236
3개의 변경된 파일31개의 추가작업 그리고 8개의 파일을 삭제
  1. 1 4
      README.md
  2. 1 1
      external/scoped_buffer_capture
  3. 29 3
      test/options_test.cpp

+ 1 - 4
README.md

@@ -31,7 +31,6 @@ struct Push : program::Arguments<Push> {
   // ...more options
   // TODO: Fetch Upstream Implicitly
   std::string repository = argument(0, "repository") = "";
-  // TODO: Implement
   std::vector<std::string> refspec = rest("refspec");
 };
 
@@ -46,8 +45,7 @@ struct Pull : program::Arguments<Pull> {
   // ...more options
   // TODO: Fetch Upstream Implicitly
   std::string repository = argument(0, "repository") = "";
-  // TODO: Implement
-  std::vector<std::string> refspec = arguments("refspec");
+  std::vector<std::string> refspec = rest("refspec");
 };
 
 struct Commit : program::Arguments<Commit> {
@@ -58,7 +56,6 @@ struct Git : program::Arguments<Git> {
 public:
   using Arguments::Arguments;
   std::string pwd = option('C');
-  // TODO: Generator?
   std::string git_dir = option("git-dir") = PROGRAM_DEFER(locate_git_dir(pwd));
   std::map<std::string, std::string> config_env = option("config-env");
   // ...more options

+ 1 - 1
external/scoped_buffer_capture

@@ -1 +1 @@
-Subproject commit 1647156e0a9ce2cda113a7e8dba62882da5b8362
+Subproject commit 96b36d65c370af9104f33668f8600e0cf3803e21

+ 29 - 3
test/options_test.cpp

@@ -152,7 +152,7 @@ TEST(LongOptionRepeatTest, RepeatingArgumentsAppends) {
 struct LongOptionRepeatWithDefaultTest
     : program::Arguments<LongOptionRepeatWithDefaultTest> {
   using Arguments::Arguments;
-  
+
   std::vector<int> port = option("port") = 8080;
   std::vector<int> default_ports = option("default_ports") = {80, 443};
 };
@@ -187,7 +187,8 @@ TEST(DeferOptionTest, CapturesUpdateToDependent) {
 }
 
 TEST(DeferOptionTest, SettingActualArgWillOverwrite) {
-  auto const options = parse<DeferOptionTest>({"", "--path", "/var/log", "--log", "test.log"});
+  auto const options =
+      parse<DeferOptionTest>({"", "--path", "/var/log", "--log", "test.log"});
   EXPECT_THAT(options.log.string(), "test.log");
 }
 
@@ -197,10 +198,35 @@ struct ShortOptionTest : program::Arguments<ShortOptionTest> {
 };
 
 TEST(ShortOptionTest, DoesNotAllowDoubleDash) {
-  EXPECT_THROW(parse<ShortOptionTest>({"", "--n", "5"}), program::NotAnArgumentError);
+  EXPECT_THROW(parse<ShortOptionTest>({"", "--n", "5"}),
+               program::NotAnArgumentError);
 }
 
 TEST(ShortOptionTest, CanConstructWithOnlyAbbrev) {
   auto const options = parse<ShortOptionTest>({"", "-n", "5"});
   EXPECT_THAT(options.arg, 5);
 }
+
+struct GeneratedDefaultTest : program::Arguments<GeneratedDefaultTest> {
+  using Arguments::Arguments;
+  std::string pwd = option('C');
+  std::string git_dir = option("git-dir") = PROGRAM_DEFER(pwd + "/.git");
+  int arg = option('n') = []() { return 7; };
+};
+
+TEST(GeneratedDefaultTest, DefaultCanComeFromFunction) {
+  auto const options = parse<GeneratedDefaultTest>({""});
+  EXPECT_THAT(options.arg, 7);
+}
+
+TEST(GeneratedDefaultTest, CanSetValue) {
+  auto const options = parse<GeneratedDefaultTest>({"", "-n", "5"});
+  EXPECT_THAT(options.arg, 5);
+}
+
+TEST(GeneratedDefaultTest, CanReferenceThis) {
+  auto const options =
+      parse<GeneratedDefaultTest>({"", "-C", "/opt/local/bin"});
+  EXPECT_THAT(options.pwd, "/opt/local/bin");
+  EXPECT_THAT(options.git_dir, "/opt/local/bin/.git");
+}