#include #include #include "cli.h" #include "validator.h" #include "transpile.h" #include "map.h" static const char *sample_input = "# Sample C Program\n" "\n" "This is a simple C program.\n" "\n" "```c\n" "#include \n" "```\n" "\n" "Main function:\n" "\n" "```c\n" "int main(void) {\n" " printf(\"Hello, World!\\n\");\n" " return 0;\n" "}\n" "```\n"; /* ** TESTS: Integration - File mode */ Test(integration, file_mode_basic) { const char *in_path = "/tmp/test_integration_in.c.md"; const char *out_path = "/tmp/test_integration_out.c"; FILE *in; FILE *out; FILE *f; t_map map; char buffer[256]; int8_t ret; f = fopen(in_path, "w"); fprintf(f, "%s", sample_input); fclose(f); in = fopen(in_path, "r"); out = fopen(out_path, "w"); map_init(&map); ret = transpile(in, out, "c", &map); map_free(&map); fclose(in); fclose(out); cr_assert_eq(ret, 0); f = fopen(out_path, "r"); cr_assert_not_null(f); fgets(buffer, sizeof(buffer), f); cr_assert_str_eq(buffer, "#include \n"); fgets(buffer, sizeof(buffer), f); cr_assert_str_eq(buffer, "\n"); fgets(buffer, sizeof(buffer), f); cr_assert_str_eq(buffer, "int main(void) {\n"); fclose(f); remove(in_path); remove(out_path); } Test(integration, file_mode_with_map) { const char *in_path = "/tmp/test_integration_map_in.c.md"; const char *out_path = "/tmp/test_integration_map_out.c"; const char *map_path = "/tmp/test_integration.map"; FILE *in; FILE *out; FILE *f; t_map map; char buffer[256]; int8_t ret; f = fopen(in_path, "w"); fprintf(f, "%s", sample_input); fclose(f); in = fopen(in_path, "r"); out = fopen(out_path, "w"); map_init(&map); ret = transpile(in, out, "c", &map); if (0 == ret) ret = map_write(&map, map_path, in_path, out_path); map_free(&map); fclose(in); fclose(out); cr_assert_eq(ret, 0); f = fopen(map_path, "r"); cr_assert_not_null(f); fgets(buffer, sizeof(buffer), f); cr_assert_str_eq(buffer, "C-MD MAP v1\n"); fclose(f); remove(in_path); remove(out_path); remove(map_path); } /* ** TESTS: Integration - Validator */ Test(integration, validator_with_input_and_output) { t_args args; args.ext = "c"; args.input = "test.c.md"; args.output = "test.c"; args.map_path = NULL; args.show_help = 0; cr_assert_eq(validator_validate_args(&args), 0); } Test(integration, validator_stdin_missing_ext) { t_args args; args.ext = NULL; args.input = NULL; args.output = "test.c"; args.map_path = NULL; args.show_help = 0; cr_assert_eq(validator_validate_args(&args), 1); } Test(integration, validator_file_missing_ext) { t_args args; args.ext = NULL; args.input = "readme.md"; args.output = NULL; args.map_path = NULL; args.show_help = 0; cr_assert_eq(validator_validate_args(&args), 2); } Test(integration, validator_extract_ext_from_input) { t_args args; args.ext = NULL; args.input = "test.c.md"; args.output = "test.c"; args.map_path = NULL; args.show_help = 0; cr_assert_eq(validator_validate_args(&args), 0); cr_assert_not_null(args.ext); cr_assert_str_eq(args.ext, "c"); } /* ** TESTS: Integration - CLI + Validator */ Test(integration, cli_and_validator_pipe_mode) { t_args args; char *argv[] = {"c-md", "-e", "c"}; cli_parse(&args, 3, argv); cr_assert_eq(validator_validate_args(&args), 0); cr_assert_str_eq(args.ext, "c"); cr_assert_null(args.input); cr_assert_null(args.output); } Test(integration, cli_and_validator_file_mode) { t_args args; char *argv[] = {"c-md", "-e", "c", "-i", "input.md", "-o", "output.c"}; cli_parse(&args, 7, argv); cr_assert_eq(validator_validate_args(&args), 0); cr_assert_str_eq(args.ext, "c"); cr_assert_str_eq(args.input, "input.md"); cr_assert_str_eq(args.output, "output.c"); }