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

197 lines
3.7 KiB
C

#include <criterion/criterion.h>
#include <stdio.h>
#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 <stdio.h>\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 <stdio.h>\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");
}