diff --git a/makina-compiler/test/xyz/colinholzman/makina/ExternalTransitionTest.kt b/makina-compiler/test/xyz/colinholzman/makina/ExternalTransitionTest.kt index 9218f8a..d626bd5 100644 --- a/makina-compiler/test/xyz/colinholzman/makina/ExternalTransitionTest.kt +++ b/makina-compiler/test/xyz/colinholzman/makina/ExternalTransitionTest.kt @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test import java.io.File import java.util.concurrent.TimeUnit +import kotlin.test.assertEquals class ExternalTransitionTest { @@ -33,14 +34,14 @@ class ExternalTransitionTest { .directory(File("./../test/external_transition")) .command("make", "clean").start() makeClean.waitFor(10, TimeUnit.SECONDS) + assertEquals(false, makeClean.isAlive) + assertEquals(0, makeClean.exitValue()) val make = ProcessBuilder() .directory(File("./../test/external_transition")) .command("make").start() make.waitFor(10, TimeUnit.SECONDS) - - File("./../test/external_transition/out/test_output.txt").reader().use { - Assertions.assertEquals(output, it.readLines()) - } + assertEquals(false, make.isAlive) + assertEquals(0, make.exitValue()) } } \ No newline at end of file diff --git a/test/external_transition/test_driver.c b/test/external_transition/test_driver.c index 36415c1..da48e18 100644 --- a/test/external_transition/test_driver.c +++ b/test/external_transition/test_driver.c @@ -1,12 +1,44 @@ #include +#include +#include #include "out/test.h" -FILE *output; +static const char *expected_output[] = { + "s1_entry", + "s1_s2_entry", + "s1_s2_e1_guard", + "s1_s2_exit", + "s1_exit", + "s1_entry", + "s1_s2_entry", + "s1_s2_e1_guard", + "s1_s2_exit", + "s1_exit", + "s1_entry", + "s1_s2_entry", + "s1_s2_e2_guard", + "s1_s2_exit", + "s1_s2_entry", + "s1_s2_e2_guard", + "s1_s2_exit", + "s1_s2_entry" +}; + +#define N_EVENTS (sizeof(expected_output) / sizeof(const char *)) + +static const char *actual_output[N_EVENTS]; + +static size_t output_index = 0; + +#define PUSH_EVENT(e) do { \ + assert(output_index < N_EVENTS); \ + actual_output[output_index++] = e; \ +} while (0) int s1_s2_entry(struct test *self, struct test_event *event) { (void)self; (void)event; - fprintf(output, "s1_s2_entry\n"); + PUSH_EVENT("s1_s2_entry"); return 0; } @@ -14,51 +46,52 @@ static int guard = 0; int s1_s2_e1_guard(struct test *self, struct test_event *event) { (void)self; (void)event; - fprintf(output, "s1_s2_e1_guard\n"); + PUSH_EVENT("s1_s2_e1_guard"); return guard; } int s1_s2_e2_guard(struct test *self, struct test_event *event) { (void)self; (void)event; - fprintf(output, "s1_s2_e2_guard\n"); + PUSH_EVENT("s1_s2_e2_guard"); return guard; } int s1_s2_e1_action(struct test *self, struct test_event *event) { (void)self; (void)event; - fprintf(output, "s1_s2_e1_action\n"); + PUSH_EVENT("s1_s2_e1_action"); return 0; } int s1_s2_exit(struct test *self, struct test_event *event) { (void)self; (void)event; - fprintf(output, "s1_s2_exit\n"); + PUSH_EVENT("s1_s2_exit"); return 0; } int s1_entry(struct test *self, struct test_event *event) { (void)self; (void)event; - fprintf(output, "s1_entry\n"); + PUSH_EVENT("s1_entry"); return 0; } int s1_exit(struct test *self, struct test_event *event) { (void)self; (void)event; - fprintf(output, "s1_exit\n"); + PUSH_EVENT("s1_exit"); return 0; } int main (void) { - output = fopen("out/test_output.txt", "w+"); struct test instance; - test_init(&instance); /*s1_entry, s1_s2_entry*/ - test_process_event(&instance, &(struct test_event){.id = test_event_e1}); /*s1_s2_e1_guard, s1_s2_exit, s1_exit, s1_entry, s1_s2_entry*/ + test_init(&instance); + test_process_event(&instance, &(struct test_event){.id = test_event_e1}); guard = 1; - test_process_event(&instance, &(struct test_event){.id = test_event_e1}); /*s1_s2_e1_guard, s1_s2_exit, s1_exit, s1_entry, s1_s2_entry*/ + test_process_event(&instance, &(struct test_event){.id = test_event_e1}); guard = 0; - test_process_event(&instance, &(struct test_event){.id = test_event_e2}); /*s1_s2_e2_guard, s1_s2_exit, s1_s2_entry*/ + test_process_event(&instance, &(struct test_event){.id = test_event_e2}); guard = 1; - test_process_event(&instance, &(struct test_event){.id = test_event_e2}); /*s1_s2_e2_guard, s1_s2_exit, s1_s2_entry*/ - fclose(output); + test_process_event(&instance, &(struct test_event){.id = test_event_e2}); + for (size_t i = 0; i < N_EVENTS; ++i) { + assert(strcmp(expected_output[i], actual_output[i]) == 0); + } return 0; } \ No newline at end of file