#include "tui.h" #include #include #include #include #include #include #define TEST_PASS 0 #define TEST_FAIL 1 static int run_single_test(const char *test_name, const char *cmd_sent, const char *expected) { /* build temporary file path */ char tmpl[] = "/tmp/looper_test_XXXXXX"; int fd = mkstemp(tmpl); if (fd == -1) { perror("mkstemp"); return TEST_FAIL; } close(fd); /* create regular file to mimic a FIFO */ fd = open(tmpl, O_CREAT|O_WRONLY|O_TRUNC, 0644); if (fd < 0) { perror("open create"); unlink(tmpl); return TEST_FAIL; } close(fd); /* make send_command use this file */ setenv("LOOPER_CMD_FIFO", tmpl, 1); int ret = send_command(cmd_sent); if (ret != 0) { fprintf(stderr, "FAIL %s: send_command returned %d\n", test_name, ret); unlink(tmpl); return TEST_FAIL; } /* read back the written content */ FILE *fp = fopen(tmpl, "r"); if (!fp) { perror("fopen"); unlink(tmpl); return TEST_FAIL; } char buf[4096]; size_t nread = fread(buf, 1, sizeof(buf)-1, fp); fclose(fp); buf[nread] = '\0'; /* build expected string (send_command always appends a newline) */ char expected_line[512]; snprintf(expected_line, sizeof(expected_line), "%s\n", expected); if (strcmp(buf, expected_line) == 0) { printf("PASS %s\n", test_name); unlink(tmpl); return TEST_PASS; } else { printf("FAIL %s: expected '%s', got '%s'\n", test_name, expected_line, buf); unlink(tmpl); return TEST_FAIL; } } int main(void) { int fail = 0; fail += run_single_test("record_0", "record 0", "record 0"); fail += run_single_test("record_1", "record 1", "record 1"); fail += run_single_test("stop", "stop", "stop"); fail += run_single_test("scene_next", "scene_next", "scene_next"); fail += run_single_test("scene_prev", "scene_prev", "scene_prev"); fail += run_single_test("bind_2", "bind 2", "bind 2"); fail += run_single_test("with_newline", "record 0\n", "record 0"); printf("%d tests failed.\n", fail); return fail > 0 ? 1 : 0; }