From a7c6c350509b2544f1d423ca1ebcd5daeda5cb58 Mon Sep 17 00:00:00 2001 From: Carlos Maniero Date: Wed, 19 Apr 2023 22:16:32 -0300 Subject: tests: Add integration tests This tests perform the whole cycle. It takes the output from pipac compile, execute and check the returned status code. Signed-off-by: Carlos Maniero Signed-off-by: Johnny Richard --- test/Makefile | 3 +++ test/integration_test.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 test/integration_test.c diff --git a/test/Makefile b/test/Makefile index 3845b92..1858166 100644 --- a/test/Makefile +++ b/test/Makefile @@ -22,3 +22,6 @@ lexer_test: munit.o ../build/string_view.o ../build/lexer.o lexer_test.o parser_test: munit.o ../build/string_view.o ../build/lexer.o ../build/ast.o ../build/parser.o parser_test.o $(CC) $? $(CFLAGS) -o $@ + +integration_test: munit.o integration_test.o + $(CC) $? $(CFLAGS) -o $@ diff --git a/test/integration_test.c b/test/integration_test.c new file mode 100644 index 0000000..a624f8c --- /dev/null +++ b/test/integration_test.c @@ -0,0 +1,67 @@ +/* +* Copyright (C) 2023 Carlos Maniero +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*/ +#define MUNIT_ENABLE_ASSERT_ALIASES +#include +#include +#include "munit.h" + +void +assert_exit_status(char* filename, int expected_exit_status) +{ + char command[255] = "../pipac "; + strcat(command, filename); + strcat(command, " > /tmp/pipa_example.s"); + + system(command); + + system("as -o /tmp/pipa_example.o /tmp/pipa_example.s --64"); + system("ld -o /tmp/pipa_example /tmp/pipa_example.o"); + int status = system("/tmp/pipa_example"); + + if (WIFEXITED(status)) { + int exit_status = WEXITSTATUS(status); + assert_int(expected_exit_status, ==, exit_status); + } + else { + assert_string_equal("", "Exited with error"); + } +} + +static MunitResult +test_examples(const MunitParameter params[], + void *user_data_or_fixture) +{ + assert_exit_status("../examples/main.pipa", 69); + + return MUNIT_OK; +} + +static MunitTest tests[] = { + { "/test_examples", test_examples, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }, + { NULL, NULL, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL } +}; + +static const MunitSuite suite = { + "/integration_tests", tests, NULL, 1, MUNIT_SUITE_OPTION_NONE +}; + +int +main(int argc, char *argv[]) +{ + return munit_suite_main(&suite, NULL, argc, argv); + return EXIT_SUCCESS; +} -- cgit v1.2.3