#include #include #include "../../src/cmd_kbot.h" using namespace polymech; TEST_CASE("KBot CLI AI Command Parsing", "[kbot]") { CLI::App app{"polymech-cli"}; auto* kbot_cmd = setup_cmd_kbot(app); REQUIRE(kbot_cmd != nullptr); SECTION("Default values for kbot ai") { int argc = 3; const char* argv[] = {"polymech-cli", "kbot", "ai"}; REQUIRE_NOTHROW(app.parse(argc, argv)); REQUIRE(is_kbot_ai_parsed() == true); REQUIRE(is_kbot_run_parsed() == false); // We can't access g_kbot_opts easily since it's static in cmd_kbot.cpp, // but testing that it doesn't throw is a good start. // In a real app we might pass options structs around instead of globals. } SECTION("Arguments for kbot ai") { int argc = 7; const char* argv[] = { "polymech-cli", "kbot", "ai", "--prompt", "hello world", "--mode", "chat" }; REQUIRE_NOTHROW(app.parse(argc, argv)); REQUIRE(is_kbot_ai_parsed() == true); } } TEST_CASE("KBot CLI Run Command Parsing", "[kbot]") { CLI::App app{"polymech-cli"}; auto* kbot_cmd = setup_cmd_kbot(app); REQUIRE(kbot_cmd != nullptr); SECTION("Default values for kbot run") { int argc = 3; const char* argv[] = {"polymech-cli", "kbot", "run"}; REQUIRE_NOTHROW(app.parse(argc, argv)); REQUIRE(is_kbot_run_parsed() == true); REQUIRE(is_kbot_ai_parsed() == false); } SECTION("Arguments for kbot run") { int argc = 6; const char* argv[] = { "polymech-cli", "kbot", "run", "-c", "frontend-dev", "--dry" }; REQUIRE_NOTHROW(app.parse(argc, argv)); REQUIRE(is_kbot_run_parsed() == true); } }