aboutsummaryrefslogtreecommitdiff
path: root/source/tests/app/wandac/src/cli.cpp
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2023-09-08 14:45:54 +0200
committerFelix Morgner <felix.morgner@gmail.com>2023-09-08 14:45:54 +0200
commitb12e0ba49e10e5a511889acf4b6494d18a324194 (patch)
tree375b2704b26499c50d0cbee356e901d5b393a902 /source/tests/app/wandac/src/cli.cpp
parentbbda83f674a97e80cf89bff3d12737dd5ecc3243 (diff)
downloadwanda-b12e0ba49e10e5a511889acf4b6494d18a324194.tar.xz
wanda-b12e0ba49e10e5a511889acf4b6494d18a324194.zip
wandac: add tests for the CLI
Diffstat (limited to 'source/tests/app/wandac/src/cli.cpp')
-rw-r--r--source/tests/app/wandac/src/cli.cpp80
1 files changed, 80 insertions, 0 deletions
diff --git a/source/tests/app/wandac/src/cli.cpp b/source/tests/app/wandac/src/cli.cpp
new file mode 100644
index 0000000..ed02b4a
--- /dev/null
+++ b/source/tests/app/wandac/src/cli.cpp
@@ -0,0 +1,80 @@
+#include "wandac/cli.hpp"
+
+#include <catch2/catch_all.hpp>
+#include <catch2/catch_test_macros.hpp>
+#include <lyra/args.hpp>
+
+#include <sstream>
+#include <string>
+
+using namespace std::string_literals;
+
+namespace wanda::tests::app::wandac
+{
+
+ template<typename ...Ts>
+ auto make_argument_list(Ts const & ... args) -> lyra::args
+ {
+ return {"wanda"s, static_cast<std::string>(args)...};
+ }
+
+ SCENARIO("Empty argument list parsing", "[app][client][cli]")
+ {
+ GIVEN("A fresh cli instance and error stream")
+ {
+ auto cli = ::wandac::cli{};
+ auto error_stream = std::ostringstream{};
+
+ WHEN("invoking parse without any program arguments")
+ {
+ auto result = cli.parse(make_argument_list(), error_stream);
+
+ THEN("the return value is false") { REQUIRE_FALSE(result); }
+ THEN("the error stream is not empty") { REQUIRE_FALSE(error_stream.view().empty()); }
+ THEN("the help flag is not set") { REQUIRE_FALSE(cli.help); }
+ THEN("the command is empty") { REQUIRE(cli.command.empty()); }
+ }
+ }
+ }
+
+ SCENARIO("Valid argument list parsing", "[app][client][cli]")
+ {
+ GIVEN("A fresh cli instance and error stream")
+ {
+ auto cli = ::wandac::cli{};
+ auto error_stream = std::ostringstream{};
+
+ AND_GIVEN("'-h' in the argument list")
+ {
+ auto argument_list = make_argument_list("-h");
+
+ WHEN("invoking parse without additional arguments")
+ {
+ auto result = cli.parse(argument_list, error_stream);
+
+ THEN("the return value is true") { REQUIRE(result); }
+ THEN("the error stream is empty") { REQUIRE(error_stream.view().empty()); }
+ THEN("the help flag is set") { REQUIRE(cli.help); }
+ THEN("the command is empty") { REQUIRE(cli.command.empty()); }
+ }
+ }
+
+ AND_GIVEN("'change' in the argument list")
+ {
+ auto argument_list = make_argument_list("change");
+
+ WHEN("invoking parse without additional arguments")
+ {
+ auto result = cli.parse(argument_list, error_stream);
+
+ THEN("the return valis is true") { REQUIRE(result); }
+ THEN("the error stream is empty") { REQUIRE(error_stream.view().empty()); }
+ THEN("the help flag is not set") { REQUIRE_FALSE(cli.help); }
+ THEN("the command is not empty") { REQUIRE_FALSE(cli.command.empty()); }
+ THEN("the command is 'change'") { REQUIRE(cli.command == "change"); }
+ }
+ }
+ }
+ }
+
+} // namespace wanda::tests::app::wandac