flag_test.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. //
  2. // flag_test.cpp
  3. // program_args-test
  4. //
  5. // Created by Sam Jaffe on 2/7/21.
  6. //
  7. #include "program_args/arguments.h"
  8. #include "xcode_gtest_helper.h"
  9. using testing::Eq;
  10. template <typename T, size_t N> static T parse(char const * const (&argv)[N]) {
  11. return T(N, argv);
  12. }
  13. struct FlagTest : program::Arguments<FlagTest> {
  14. using program::Arguments<FlagTest>::Arguments;
  15. bool dry_run = flag("dry-run");
  16. int verbosity = flag("verbose");
  17. };
  18. TEST(FlagTest, ArgumentsAreDefaultedNaturally) {
  19. auto const options = parse<FlagTest>({""});
  20. EXPECT_THAT(options.dry_run, Eq(false));
  21. EXPECT_THAT(options.verbosity, Eq(0));
  22. }
  23. TEST(FlagTest, FlagsDoNotRequireAdditionalArguments) {
  24. EXPECT_NO_THROW(parse<FlagTest>({"", "--dry-run"}));
  25. }
  26. TEST(FlagTest, BooleanFlagSetsState) {
  27. auto const options = parse<FlagTest>({"", "--dry-run"});
  28. EXPECT_THAT(options.dry_run, Eq(true));
  29. }
  30. TEST(FlagTest, BooleanFlagIsIdempotent) {
  31. EXPECT_NO_THROW(parse<FlagTest>({"", "--dry-run", "--dry-run"}));
  32. }
  33. TEST(FlagTest, BooleanFlagCanBeInverted) {
  34. auto const options = parse<FlagTest>({"", "--dry-run", "--no-dry-run"});
  35. EXPECT_THAT(options.dry_run, Eq(false));
  36. }
  37. TEST(FlagTest, IntegerFlagIncrementsState) {
  38. auto const options = parse<FlagTest>({"", "--verbose"});
  39. EXPECT_THAT(options.verbosity, Eq(1));
  40. }
  41. TEST(FlagTest, IntegerFlagCanBeRepeated) {
  42. auto const options = parse<FlagTest>({"", "--verbose", "--verbose"});
  43. EXPECT_THAT(options.verbosity, Eq(2));
  44. }