#include "greatest.h" #include "../exec.h" #define mkfun(f, n) \ int f(struct libscomm_line *x __attribute__((unused))) { \ return n; \ } mkfun(foo, LIBSCOMM_CMD_OK) mkfun(bar, 1) mkfun(ocmd, 2) mkfun(baz, 3) mkfun(quox, 4) mkfun(test1, 5) mkfun(apple, 6) mkfun(under, 7) mkfun(rex, 8) mkfun(yan, 9) mkfun(val, 10) mkfun(cal, 11) struct libscomm_cmd cmdarr[] = { {"apple", apple}, {"bar", bar}, {"baz", baz}, {"cal", cal}, {"foo", foo}, {"ocmd", ocmd}, {"quox", quox}, {"rex", rex}, {"test1", test1}, {"under", under}, {"val", val}, {"yan", yan} }; #define arrlen(x) (sizeof(x) / sizeof((x)[0])) const struct libscomm_cmd_store cmds = {cmdarr, arrlen(cmdarr)}; TEST execute_one(void) { struct libscomm_line x = {0}; x.buf[0] = "foo"; x.len = 1; ASSERT_EQ(libscomm_exec(&cmds, &x), LIBSCOMM_CMD_OK); PASS(); } #define doexec(f, n) do{\ x.buf[0] = f; \ ASSERT_EQ(libscomm_exec(&cmds, &x), n); \ } while(0) TEST execute_multiple(void) { struct libscomm_line x = {0}; x.len = 1; doexec("foo", LIBSCOMM_CMD_OK); doexec("bar", 1); doexec("ocmd", 2); doexec("baz", 3); doexec("quox", 4); doexec("test1", 5); doexec("apple", 6); doexec("under", 7); doexec("rex", 8); doexec("yan", 9); doexec("val", 10); doexec("cal", 11); PASS(); } TEST not_in(void) { struct libscomm_line x = {0}; x.len = 1; doexec("test2", LIBSCOMM_NOT_FOUND); doexec("flub", LIBSCOMM_NOT_FOUND); doexec("doexec", LIBSCOMM_NOT_FOUND); PASS(); } GREATEST_MAIN_DEFS(); int main(int argc, char *argv[]) { GREATEST_MAIN_BEGIN(); RUN_TEST(execute_one); RUN_TEST(execute_multiple); RUN_TEST(not_in); GREATEST_MAIN_END(); }