diff --git a/tests/integration.c b/tests/integration.c index 87a0929..ef2455b 100644 --- a/tests/integration.c +++ b/tests/integration.c @@ -56,27 +56,32 @@ static int midi_inject_process(jack_nframes_t nframes, void *arg) { return 0; } -/* Helper: close and reopen the persistent MIDI client so it connects - to the current looper instance */ -static void midi_inject_reconnect(const char *target_port) { +/* Helper: initialise the persistent MIDI client (open and connect) */ +static int midi_inject_init(const char *target_port) { + if (midi_inject_client) return 0; /* already initialised */ + jack_status_t st; + midi_inject_client = jack_client_open("midi_inject_persistent", JackNoStartServer, &st); + if (!midi_inject_client) return -1; + midi_inject_port = jack_port_register(midi_inject_client, "out", + JACK_DEFAULT_MIDI_TYPE, + JackPortIsOutput, 0); + if (!midi_inject_port) return -1; + jack_set_process_callback(midi_inject_client, midi_inject_process, NULL); + if (jack_activate(midi_inject_client) != 0) return -1; + char src[64]; + snprintf(src, sizeof(src), "midi_inject_persistent:out"); + if (jack_connect(midi_inject_client, src, target_port) != 0) return -1; + return 0; +} + +/* Helper: close the persistent MIDI client */ +static void midi_inject_close(void) { if (midi_inject_client) { jack_deactivate(midi_inject_client); jack_client_close(midi_inject_client); midi_inject_client = NULL; midi_inject_port = NULL; } - jack_status_t st; - midi_inject_client = jack_client_open("midi_inject_persistent", JackNoStartServer, &st); - if (!midi_inject_client) return; - midi_inject_port = jack_port_register(midi_inject_client, "out", - JACK_DEFAULT_MIDI_TYPE, - JackPortIsOutput, 0); - if (!midi_inject_port) return; - jack_set_process_callback(midi_inject_client, midi_inject_process, NULL); - jack_activate(midi_inject_client); - char src[64]; - snprintf(src, sizeof(src), "midi_inject_persistent:out"); - jack_connect(midi_inject_client, src, target_port); } /* The test code uses this callback in two ways: @@ -252,8 +257,8 @@ static jack_client_t *midi_persistent_client = NULL; static jack_port_t *midi_persistent_port = NULL; static int send_jack_note_on(const char *target_port, unsigned char note, unsigned char velocity) { - midi_inject_reconnect(target_port); - if (!midi_inject_client || !midi_inject_port) return -1; + /* initialise client on first call (per‑test) */ + if (midi_inject_init(target_port) != 0) return -1; midi_inject_note = note; midi_inject_velocity = velocity; @@ -939,6 +944,8 @@ static int test_wav_load(void) { unlink("loop.wav"); return 1; } + /* force a fresh MIDI connection for this test */ + midi_inject_close(); /* send control key + note 70 to trigger load */ if (send_jack_note_on("looper:control", 64, 127) != 0) { jack_deactivate(client); @@ -1038,6 +1045,8 @@ static int test_wav_save(void) { return 1; } safe_usleep(500000); + /* force a fresh MIDI connection for this test */ + midi_inject_close(); /* send control key + note 71 to save */ if (send_jack_note_on("looper:control", 64, 127) != 0) { jack_deactivate(client);