cli_test.cxx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. //
  2. // cli_test.cxx
  3. // cli-test
  4. //
  5. // Created by Sam Jaffe on 10/9/20.
  6. // Copyright © 2020 Sam Jaffe. All rights reserved.
  7. //
  8. #include "cli/cli.h"
  9. #include "xcode_gtest_helper.h"
  10. TEST(CliTest, EndsOnQuit) {
  11. std::stringstream input{R"(quit)"};
  12. cli::cli(input).run();
  13. }
  14. TEST(CliTest, CanInputNoArgsCommand) {
  15. bool was_hit{false};
  16. std::stringstream input{R"(act)"};
  17. cli::cli(input).register_callback("act", [&](){ was_hit = true; }).run();
  18. EXPECT_TRUE(was_hit);
  19. }
  20. TEST(CliTest, WillSkipCallbackIfNotEnoughArgs) {
  21. bool was_hit{false};
  22. std::stringstream input{R"(act)"};
  23. cli::cli(input).register_callback("act", [&](int){ was_hit = true; }).run();
  24. EXPECT_FALSE(was_hit);
  25. }
  26. TEST(CliTest, CanEscapeSpaces) {
  27. std::string data{};
  28. std::stringstream input{R"(act A\ B)"};
  29. cli::cli(input).register_callback("act", [&](std::string const &str){
  30. data = str;
  31. }).run();
  32. EXPECT_THAT(data, "A B");
  33. }
  34. TEST(CliTest, CanQuoteWrapArgs) {
  35. std::string data{};
  36. std::stringstream input{R"(act "A B")"};
  37. cli::cli(input).register_callback("act", [&](std::string const &str){
  38. data = str;
  39. }).run();
  40. EXPECT_THAT(data, "A B");
  41. }
  42. struct example {};
  43. void cli_print(example const &) { throw example{}; }
  44. TEST(CliTest, QueryInvokesADLFunction) {
  45. std::stringstream input{R"(query)"};
  46. auto func = [](){ return example{}; };
  47. EXPECT_THROW(cli::cli(input).register_query("query", func).run(), example);
  48. }