c-md/tests/transpile/test_transpile_core.c
2026-01-12 10:18:47 +01:00

173 lines
3.4 KiB
C

#include <criterion/criterion.h>
#include <stdio.h>
#include "transpile.h"
#include "map.h"
static const char *sample_md_1 =
"# Test\n"
"```c\n"
"int main() {\n"
" return 0;\n"
"}\n"
"```\n";
static const char *sample_md_2 =
"# Multiple blocks\n"
"```c\n"
"#include <stdio.h>\n"
"```\n"
"Some text\n"
"```c\n"
"int main() {\n"
" return 0;\n"
"}\n"
"```\n";
/*
** TESTS: transpile/core.c - Single code block
*/
Test(transpile, single_code_block)
{
FILE *in;
FILE *out;
t_map map;
char buffer[256];
int8_t ret;
in = fopen("/tmp/test_transpile_in.md", "w");
fprintf(in, "%s", sample_md_1);
fclose(in);
in = fopen("/tmp/test_transpile_in.md", "r");
out = fopen("/tmp/test_transpile_out.c", "w");
map_init(&map);
ret = transpile(in, out, "c", &map);
fclose(in);
fclose(out);
cr_assert_eq(ret, 0);
cr_assert_eq(map.count, 1);
cr_assert_eq(map.ranges[0].src_start, 3);
cr_assert_eq(map.ranges[0].src_end, 5);
cr_assert_eq(map.ranges[0].dst_start, 1);
cr_assert_eq(map.ranges[0].dst_end, 3);
out = fopen("/tmp/test_transpile_out.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_transpile_in.md");
remove("/tmp/test_transpile_out.c");
}
/*
** TESTS: transpile/core.c - Multiple blocks
*/
Test(transpile, multiple_blocks)
{
FILE *in;
FILE *out;
t_map map;
char buffer[256];
int8_t ret;
in = fopen("/tmp/test_transpile_multi_in.md", "w");
fprintf(in, "%s", sample_md_2);
fclose(in);
in = fopen("/tmp/test_transpile_multi_in.md", "r");
out = fopen("/tmp/test_transpile_multi_out.c", "w");
map_init(&map);
ret = transpile(in, out, "c", &map);
fclose(in);
fclose(out);
cr_assert_eq(ret, 0);
cr_assert_eq(map.count, 2);
out = fopen("/tmp/test_transpile_multi_out.c", "r");
fgets(buffer, sizeof(buffer), out);
cr_assert_str_eq(buffer, "#include <stdio.h>\n");
fgets(buffer, sizeof(buffer), out);
cr_assert_str_eq(buffer, "\n");
fgets(buffer, sizeof(buffer), out);
cr_assert_str_eq(buffer, "int main() {\n");
fclose(out);
map_free(&map);
remove("/tmp/test_transpile_multi_in.md");
remove("/tmp/test_transpile_multi_out.c");
}
/*
** TESTS: transpile/core.c - Edge cases
*/
Test(transpile, empty_input)
{
FILE *in;
FILE *out;
t_map map;
int8_t ret;
in = fopen("/tmp/test_transpile_empty_in.md", "w");
fclose(in);
in = fopen("/tmp/test_transpile_empty_in.md", "r");
out = fopen("/tmp/test_transpile_empty_out.c", "w");
map_init(&map);
ret = transpile(in, out, "c", &map);
fclose(in);
fclose(out);
cr_assert_eq(ret, 0);
cr_assert_eq(map.count, 0);
map_free(&map);
remove("/tmp/test_transpile_empty_in.md");
remove("/tmp/test_transpile_empty_out.c");
}
Test(transpile, no_matching_blocks)
{
FILE *in;
FILE *out;
t_map map;
int8_t ret;
const char *no_match = "```python\nprint('hello')\n```\n";
in = fopen("/tmp/test_transpile_nomatch_in.md", "w");
fprintf(in, "%s", no_match);
fclose(in);
in = fopen("/tmp/test_transpile_nomatch_in.md", "r");
out = fopen("/tmp/test_transpile_nomatch_out.c", "w");
map_init(&map);
ret = transpile(in, out, "c", &map);
fclose(in);
fclose(out);
cr_assert_eq(ret, 0);
cr_assert_eq(map.count, 0);
map_free(&map);
remove("/tmp/test_transpile_nomatch_in.md");
remove("/tmp/test_transpile_nomatch_out.c");
}