// // 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 static T parse(char const * const (&argv)[N]) { return T(N, argv); } struct FlagTest : program::Arguments { using program::Arguments::Arguments; bool dry_run = flag("dry-run"); int verbosity = flag("verbose"); }; TEST(FlagTest, ArgumentsAreDefaultedNaturally) { auto const options = parse({""}); EXPECT_THAT(options.dry_run, Eq(false)); EXPECT_THAT(options.verbosity, Eq(0)); } TEST(FlagTest, FlagsDoNotRequireAdditionalArguments) { EXPECT_NO_THROW(parse({"", "--dry-run"})); } TEST(FlagTest, BooleanFlagSetsState) { auto const options = parse({"", "--dry-run"}); EXPECT_THAT(options.dry_run, Eq(true)); } TEST(FlagTest, BooleanFlagIsIdempotent) { EXPECT_NO_THROW(parse({"", "--dry-run", "--dry-run"})); } TEST(FlagTest, BooleanFlagCanBeInverted) { auto const options = parse({"", "--dry-run", "--no-dry-run"}); EXPECT_THAT(options.dry_run, Eq(false)); } TEST(FlagTest, IntegerFlagIncrementsState) { auto const options = parse({"", "--verbose"}); EXPECT_THAT(options.verbosity, Eq(1)); } TEST(FlagTest, IntegerFlagCanBeRepeated) { auto const options = parse({"", "--verbose", "--verbose"}); EXPECT_THAT(options.verbosity, Eq(2)); }