usage_test.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. //
  2. // logging_test.cpp
  3. // program_args-test
  4. //
  5. // Created by Sam Jaffe on 2/16/21.
  6. //
  7. #define PROGRAM_ARGS_NOEXIT_ON_HELP
  8. #include "program_args/arguments.h"
  9. #include "scoped_buffer_capture.h"
  10. #include "xcode_gtest_helper.h"
  11. using testing::HasSubstr;
  12. using testing::Not;
  13. template <typename T, size_t N> static T parse(char const * const (&argv)[N]) {
  14. return T(N, argv);
  15. }
  16. template <typename T> auto usage() {
  17. scoped_buffer_capture_t cap_cout(std::cout);
  18. parse<T>({"", "--help"});
  19. return cap_cout.str();
  20. }
  21. struct ArgNamesTest : program::Arguments<ArgNamesTest> {
  22. using Arguments::Arguments;
  23. bool dry_run = flag("dry-run");
  24. int level = option("level");
  25. int port = option("port", 'p');
  26. };
  27. TEST(ArgNamesTest, PrintsOutBothArgsWhenRelevant) {
  28. auto result = usage<ArgNamesTest>();
  29. EXPECT_THAT(result, HasSubstr(" --port,-p:"));
  30. }
  31. TEST(ArgNamesTest, PrintsOutInversionFlag) {
  32. auto result = usage<ArgNamesTest>();
  33. EXPECT_THAT(result, HasSubstr(" --no-dry-run,--dry-run:"));
  34. }
  35. TEST(ArgNamesTest, PrintsOutBothSingleNameWithoutAbbrev) {
  36. auto result = usage<ArgNamesTest>();
  37. EXPECT_THAT(result, HasSubstr(" --level:"));
  38. }
  39. struct ArgDescTest : program::Arguments<ArgDescTest> {
  40. using Arguments::Arguments;
  41. int port = option("port", "The host port to listen on for web traffic");
  42. };
  43. TEST(ArgDescTest, PrintsOutBothArgsWhenRelevant) {
  44. auto result = usage<ArgDescTest>();
  45. EXPECT_THAT(result, HasSubstr(" --port: The host port"));
  46. }
  47. struct ArgDefValTest : program::Arguments<ArgDefValTest> {
  48. using Arguments::Arguments;
  49. int level = option("level") = 5;
  50. int port = option("port", "The host port to listen on for web traffic") =
  51. 8080;
  52. };
  53. TEST(ArgDefValTest, PrintsOutDefaultValueWithDescription) {
  54. auto result = usage<ArgDefValTest>();
  55. EXPECT_THAT(result, HasSubstr("Default Value: 8080"));
  56. }
  57. TEST(ArgDefValTest, DoesntAddDefValWithoutDescription) {
  58. auto result = usage<ArgDefValTest>();
  59. EXPECT_THAT(result, Not(HasSubstr("5")));
  60. }