mirror of https://github.com/flysand7/ciabatta.git
Fix XML escapes in JUnit output
This commit is contained in:
parent
b3d38c1a10
commit
805ed17f93
32
tests/crt.c
32
tests/crt.c
|
@ -51,6 +51,8 @@ unsigned long random_between(int lo, int hi) {
|
|||
|
||||
// FORMATTING AND IO
|
||||
|
||||
bool fmt_xml_escapes = false;
|
||||
|
||||
static void fprintc(FILE *file, char c) {
|
||||
fputc(c, file);
|
||||
}
|
||||
|
@ -61,6 +63,27 @@ static void fprints(FILE *file, char *str) {
|
|||
}
|
||||
}
|
||||
|
||||
static void fprintc_maybe_xml(FILE *file, char c) {
|
||||
if(c == '"' && fmt_xml_escapes) {
|
||||
fprints(file, """);
|
||||
}
|
||||
else if(c == '&' && fmt_xml_escapes) {
|
||||
fprints(file, "&");
|
||||
}
|
||||
else if(c == '<' && fmt_xml_escapes) {
|
||||
fprints(file, "<");
|
||||
}
|
||||
else if(c == '>' && fmt_xml_escapes) {
|
||||
fprints(file, ">");
|
||||
}
|
||||
else if(c == '\'' && fmt_xml_escapes) {
|
||||
fprints(file, "'");
|
||||
}
|
||||
else {
|
||||
fprintc(file, c);
|
||||
}
|
||||
}
|
||||
|
||||
static void fprintd(FILE *file, int32_t number, int width) {
|
||||
if(number < 0) {
|
||||
fprintc(file, '-');
|
||||
|
@ -109,14 +132,17 @@ static void fvprint_fmt(FILE *file, char *fmt, va_list args) {
|
|||
}
|
||||
if(*fmt == 'c') {
|
||||
int ch = va_arg(args, int);
|
||||
fprintc(file, ch);
|
||||
fprintc_maybe_xml(file, ch);
|
||||
}
|
||||
else if(*fmt == '%') {
|
||||
fprintc(file, '%');
|
||||
}
|
||||
else if(*fmt == 's') {
|
||||
char *str = va_arg(args, char*);
|
||||
fprints(file, str);
|
||||
while(*str != 0) {
|
||||
fprintc_maybe_xml(file, *str);
|
||||
++str;
|
||||
}
|
||||
}
|
||||
else if(*fmt == 'd') {
|
||||
int32_t i = va_arg(args, int32_t);
|
||||
|
@ -338,6 +364,7 @@ static void print_test_results(Test_Feature *features) {
|
|||
// JUNIT OUTPUT
|
||||
|
||||
static void junit_write(char *path, Test_Feature *features) {
|
||||
fmt_xml_escapes = true;
|
||||
FILE *xml = fopen(path, "wb");
|
||||
// TODO: store tests and failures in an object instead of calculating it like that
|
||||
int total_test_count = 0;
|
||||
|
@ -371,6 +398,7 @@ static void junit_write(char *path, Test_Feature *features) {
|
|||
}
|
||||
fprint_fmt(xml, "</testsuites>\n");
|
||||
fclose(xml);
|
||||
fmt_xml_escapes = false;
|
||||
}
|
||||
|
||||
// TEST MACROS
|
||||
|
|
Loading…
Reference in New Issue