// // cli_test.cxx // cli-test // // Created by Sam Jaffe on 10/9/20. // Copyright © 2020 Sam Jaffe. All rights reserved. // #include "cli/cli.h" #include "xcode_gtest_helper.h" TEST(CliTest, EndsOnQuit) { std::stringstream input{R"(quit)"}; cli::cli(input).run(); } TEST(CliTest, CanInputNoArgsCommand) { bool was_hit{false}; std::stringstream input{R"(act)"}; cli::cli(input).register_callback("act", [&](){ was_hit = true; }).run(); EXPECT_TRUE(was_hit); } TEST(CliTest, WillSkipCallbackIfNotEnoughArgs) { bool was_hit{false}; std::stringstream input{R"(act)"}; cli::cli(input).register_callback("act", [&](int){ was_hit = true; }).run(); EXPECT_FALSE(was_hit); } TEST(CliTest, CanEscapeSpaces) { std::string data{}; std::stringstream input{R"(act A\ B)"}; cli::cli(input).register_callback("act", [&](std::string const &str){ data = str; }).run(); EXPECT_THAT(data, "A B"); } TEST(CliTest, CanQuoteWrapArgs) { std::string data{}; std::stringstream input{R"(act "A B")"}; cli::cli(input).register_callback("act", [&](std::string const &str){ data = str; }).run(); EXPECT_THAT(data, "A B"); } struct example {}; void cli_print(example const &) { throw example{}; } TEST(CliTest, QueryInvokesADLFunction) { std::stringstream input{R"(query)"}; auto func = [](){ return example{}; }; EXPECT_THROW(cli::cli(input).register_query("query", func).run(), example); }