103 lines
2 KiB
C
103 lines
2 KiB
C
#include <criterion/criterion.h>
|
|
#include <stdio.h>
|
|
|
|
#include "internal/transpile_internal.h"
|
|
|
|
/*
|
|
** TESTS: transpile/code.c - Handle code lines
|
|
*/
|
|
|
|
Test(transpile_code, handle_single_line)
|
|
{
|
|
t_state s;
|
|
FILE *out;
|
|
t_map map;
|
|
char buffer[256];
|
|
int8_t ret;
|
|
|
|
out = fopen("/tmp/test_code_out.c", "w");
|
|
map_init(&map);
|
|
state_init(&s, NULL, out, "c", &map);
|
|
|
|
ret = handle_code_line(&s, "int x = 42;\n");
|
|
|
|
cr_assert_eq(ret, 0);
|
|
cr_assert_eq(s.dst_line, 1);
|
|
|
|
fclose(out);
|
|
|
|
out = fopen("/tmp/test_code_out.c", "r");
|
|
fgets(buffer, sizeof(buffer), out);
|
|
cr_assert_str_eq(buffer, "int x = 42;\n");
|
|
fclose(out);
|
|
|
|
map_free(&map);
|
|
remove("/tmp/test_code_out.c");
|
|
}
|
|
|
|
Test(transpile_code, handle_multiple_lines)
|
|
{
|
|
t_state s;
|
|
FILE *out;
|
|
t_map map;
|
|
char buffer[256];
|
|
int8_t ret;
|
|
|
|
out = fopen("/tmp/test_code_multi.c", "w");
|
|
map_init(&map);
|
|
state_init(&s, NULL, out, "c", &map);
|
|
|
|
ret = handle_code_line(&s, "int main() {\n");
|
|
cr_assert_eq(ret, 0);
|
|
cr_assert_eq(s.dst_line, 1);
|
|
|
|
ret = handle_code_line(&s, " return 0;\n");
|
|
cr_assert_eq(ret, 0);
|
|
cr_assert_eq(s.dst_line, 2);
|
|
|
|
ret = handle_code_line(&s, "}\n");
|
|
cr_assert_eq(ret, 0);
|
|
cr_assert_eq(s.dst_line, 3);
|
|
|
|
fclose(out);
|
|
|
|
out = fopen("/tmp/test_code_multi.c", "r");
|
|
fgets(buffer, sizeof(buffer), out);
|
|
cr_assert_str_eq(buffer, "int main() {\n");
|
|
fgets(buffer, sizeof(buffer), out);
|
|
cr_assert_str_eq(buffer, " return 0;\n");
|
|
fgets(buffer, sizeof(buffer), out);
|
|
cr_assert_str_eq(buffer, "}\n");
|
|
fclose(out);
|
|
|
|
map_free(&map);
|
|
remove("/tmp/test_code_multi.c");
|
|
}
|
|
|
|
Test(transpile_code, handle_empty_line)
|
|
{
|
|
t_state s;
|
|
FILE *out;
|
|
t_map map;
|
|
char buffer[256];
|
|
int8_t ret;
|
|
|
|
out = fopen("/tmp/test_code_empty.c", "w");
|
|
map_init(&map);
|
|
state_init(&s, NULL, out, "c", &map);
|
|
|
|
ret = handle_code_line(&s, "\n");
|
|
|
|
cr_assert_eq(ret, 0);
|
|
cr_assert_eq(s.dst_line, 1);
|
|
|
|
fclose(out);
|
|
|
|
out = fopen("/tmp/test_code_empty.c", "r");
|
|
fgets(buffer, sizeof(buffer), out);
|
|
cr_assert_str_eq(buffer, "\n");
|
|
fclose(out);
|
|
|
|
map_free(&map);
|
|
remove("/tmp/test_code_empty.c");
|
|
}
|