#include "../src/cli.h" #include #include #include #include #include // mkdtemp int main() { using namespace bfebbx; // parseArgs { const char* argv[] = {"bfebbx", "--port", "/dev/ttyACM0", "--output", "/tmp/out", "--craft-name", "Vroom", "--timeout", "45", "-v"}; Options o = parseArgs(10, const_cast(argv)); assert(o.port == "/dev/ttyACM0"); assert(o.output == "/tmp/out"); assert(o.craftName == "Vroom"); assert(o.timeoutSec == 45); assert(o.verbose); } { const char* argv[] = {"bfebbx"}; Options o = parseArgs(1, const_cast(argv)); assert(o.output == "."); assert(o.timeoutSec == 30); assert(!o.verbose); } { const char* argv[] = {"bfebbx", "--bogus"}; bool threw = false; try { parseArgs(2, const_cast(argv)); } catch (const std::exception&) { threw = true; } assert(threw); } { const char* argv[] = {"bfebbx", "--timeout", "45abc"}; bool threw = false; try { parseArgs(3, const_cast(argv)); } catch (const std::exception&) { threw = true; } assert(threw); } { const char* argv[] = {"bfebbx", "--timeout", "-5"}; bool threw = false; try { parseArgs(3, const_cast(argv)); } catch (const std::exception&) { threw = true; } assert(threw); } { const char* argv[] = {"bfebbx", "--timeout", "45"}; Options o = parseArgs(3, const_cast(argv)); assert(o.timeoutSec == 45); } // scanPorts against a temp directory { char tmpl[] = "/tmp/bfebbxXXXXXX"; char* dir = mkdtemp(tmpl); assert(dir != nullptr); std::string d = dir; for (const char* n : {"ttyACM0", "ttyACM1", "ttyS0", "random"}) { std::ofstream(d + "/" + n).put('x'); } auto ports = scanPorts(d, "ttyACM"); assert(ports.size() == 2); assert(ports[0] == d + "/ttyACM0"); assert(ports[1] == d + "/ttyACM1"); } return 0; }