|
|
@@ -0,0 +1,57 @@
|
|
|
+//
|
|
|
+// flag_test.cpp
|
|
|
+// program_args-test
|
|
|
+//
|
|
|
+// Created by Sam Jaffe on 2/7/21.
|
|
|
+//
|
|
|
+
|
|
|
+#include "program_args/arguments.h"
|
|
|
+
|
|
|
+#include "xcode_gtest_helper.h"
|
|
|
+
|
|
|
+using testing::Eq;
|
|
|
+
|
|
|
+template <typename T, size_t N> static T parse(char const * const (&argv)[N]) {
|
|
|
+ return T(N, argv);
|
|
|
+}
|
|
|
+
|
|
|
+struct FlagTest : program::Arguments<FlagTest> {
|
|
|
+ using program::Arguments<FlagTest>::Arguments;
|
|
|
+
|
|
|
+ bool dry_run = flag("dry-run");
|
|
|
+ int verbosity = flag("verbose");
|
|
|
+};
|
|
|
+
|
|
|
+TEST(FlagTest, ArgumentsAreDefaultedNaturally) {
|
|
|
+ auto const options = parse<FlagTest>({""});
|
|
|
+ EXPECT_THAT(options.dry_run, Eq(false));
|
|
|
+ EXPECT_THAT(options.verbosity, Eq(0));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(FlagTest, FlagsDoNotRequireAdditionalArguments) {
|
|
|
+ EXPECT_NO_THROW(parse<FlagTest>({"", "--dry-run"}));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(FlagTest, BooleanFlagSetsState) {
|
|
|
+ auto const options = parse<FlagTest>({"", "--dry-run"});
|
|
|
+ EXPECT_THAT(options.dry_run, Eq(true));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(FlagTest, BooleanFlagIsIdempotent) {
|
|
|
+ EXPECT_NO_THROW(parse<FlagTest>({"", "--dry-run", "--dry-run"}));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(FlagTest, BooleanFlagCanBeInverted) {
|
|
|
+ auto const options = parse<FlagTest>({"", "--dry-run", "--no-dry-run"});
|
|
|
+ EXPECT_THAT(options.dry_run, Eq(false));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(FlagTest, IntegerFlagIncrementsState) {
|
|
|
+ auto const options = parse<FlagTest>({"", "--verbose"});
|
|
|
+ EXPECT_THAT(options.verbosity, Eq(1));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(FlagTest, IntegerFlagCanBeRepeated) {
|
|
|
+ auto const options = parse<FlagTest>({"", "--verbose", "--verbose"});
|
|
|
+ EXPECT_THAT(options.verbosity, Eq(2));
|
|
|
+}
|