#include #include #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 \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 \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"); }