#include #include "fgc/CommandParser.h" using namespace fgc; TEST_CASE("parseCommand handles single-verb commands") { auto c = parseCommand("snapshot"); CHECK(c.verb == "snapshot"); CHECK(c.device.empty()); CHECK_FALSE(c.has_value); } TEST_CASE("parseCommand takes the second word as the device") { auto c = parseCommand("capture on"); CHECK(c.verb == "capture"); CHECK(c.device == "on"); CHECK(c.option.empty()); CHECK_FALSE(c.has_value); } TEST_CASE("parseCommand keeps option plus trailing numeric value") { auto c = parseCommand("gimbal nudge yaw 5"); CHECK(c.verb == "gimbal"); CHECK(c.device == "nudge"); CHECK(c.option == "yaw"); CHECK(c.has_value); CHECK(c.value == doctest::Approx(5.0)); } TEST_CASE("parseCommand joins non-numeric trailing words into the option") { auto c = parseCommand("set camera profile night"); CHECK(c.device == "camera"); CHECK(c.option == "profile night"); CHECK_FALSE(c.has_value); } TEST_CASE("parseCommand on empty input") { CHECK(parseCommand("").empty()); CHECK(parseCommand(" ").empty()); }