diff options
author | Carlos Maniero <carlosmaniero@gmail.com> | 2023-04-19 22:16:32 -0300 |
---|---|---|
committer | Johnny Richard <johnny@johnnyrichard.com> | 2023-04-20 18:36:44 +0200 |
commit | a7c6c350509b2544f1d423ca1ebcd5daeda5cb58 (patch) | |
tree | 3f3cd3dc89e93a7a89c0159be3f2491dd6325ef9 | |
parent | 3ceb85bd93fa87a5be3682ab8995abea82a63ea3 (diff) |
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 <carlosmaniero@gmail.com>
Signed-off-by: Johnny Richard <johnny@johnnyrichard.com>
-rw-r--r-- | test/Makefile | 3 | ||||
-rw-r--r-- | test/integration_test.c | 67 |
2 files changed, 70 insertions, 0 deletions
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 <https://www.gnu.org/licenses/>. +*/ +#define MUNIT_ENABLE_ASSERT_ALIASES +#include <stdio.h> +#include <string.h> +#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; +} |