#include #include #include #include "engine.h" #include "cli.h" // Minimal test: just ensure parsing doesn't crash static void test_cli_parse(void) { printf("Test CLI parse... "); // Create a minimal engine (no JACK needed for parsing) Engine engine; memset(&engine, 0, sizeof(engine)); engine.sample_rate = 48000; engine.control_channel = 0; engine.quantize_mode = QUANTIZE_OFF; engine.quantize_threshold = 0; engine.queued_triggers = NULL; engine.transport.rolling = false; engine.transport.clock_count = 0; engine.transport.beat_position = 0; engine.transport.bar_position = 0; engine.transport.sample_position = 0; for (int i = 0; i < MAX_CLIPS; i++) { engine.clips[i].state = CLIP_EMPTY; engine.clips[i].buffer = NULL; // not needed for parsing engine.clips[i].buffer_size = 0; engine.clips[i].write_position = 0; engine.clips[i].read_position = 0; } // Test valid commands assert(cli_process_line(&engine, "help") == 1); assert(cli_process_line(&engine, "trigger clip 0") == 1); assert(cli_process_line(&engine, "trigger scene 1") == 1); assert(cli_process_line(&engine, "reset clip 2") == 1); assert(cli_process_line(&engine, "reset transport") == 1); assert(cli_process_line(&engine, "quantize beat") == 1); assert(cli_process_line(&engine, "threshold 1000") == 1); assert(cli_process_line(&engine, "quit") == 0); // Test invalid commands (should not crash) assert(cli_process_line(&engine, "") == 1); assert(cli_process_line(&engine, "unknown") == 1); assert(cli_process_line(&engine, "trigger") == 1); assert(cli_process_line(&engine, "reset") == 1); assert(cli_process_line(&engine, "quantize") == 1); assert(cli_process_line(&engine, "threshold") == 1); printf("PASSED\n"); } int main(void) { printf("Running CLI tests...\n\n"); test_cli_parse(); printf("\nAll CLI tests passed!\n"); return 0; }