aboutsummaryrefslogtreecommitdiff
path: root/src/junitxml.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/junitxml.c')
-rw-r--r--src/junitxml.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/junitxml.c b/src/junitxml.c
index df0514b..c1bf1be 100644
--- a/src/junitxml.c
+++ b/src/junitxml.c
@@ -65,6 +65,23 @@ static struct JUNIT_Failure *testcase_failure_from_attributes(struct StrList *at
return result;
}
+static struct JUNIT_Error *testcase_error_from_attributes(struct StrList *attrs) {
+ struct JUNIT_Error *result;
+
+ result = calloc(1, sizeof(*result));
+ if(!result) {
+ return NULL;
+ }
+ for (size_t x = 0; x < strlist_count(attrs); x += 2) {
+ char *attr_name = strlist_item(attrs, x);
+ char *attr_value = strlist_item(attrs, x + 1);
+ if (!strcmp(attr_name, "message")) {
+ result->message = strdup(attr_value);
+ }
+ }
+ return result;
+}
+
static struct JUNIT_Skipped *testcase_skipped_from_attributes(struct StrList *attrs) {
struct JUNIT_Skipped *result;
@@ -133,6 +150,7 @@ static int read_xml_data(xmlTextReaderPtr reader, struct JUNIT_Testsuite **tests
name = xmlTextReaderConstName(reader);
if (!name) {
+ // name could not be converted to string
name = BAD_CAST "--";
}
value = xmlTextReaderConstValue(reader);
@@ -171,6 +189,11 @@ static int read_xml_data(xmlTextReaderPtr reader, struct JUNIT_Testsuite **tests
struct JUNIT_Failure *failure = testcase_failure_from_attributes(attrs);
(*testsuite)->testcase[cur_tc]->tc_result_state_type = JUNIT_RESULT_STATE_FAILURE;
(*testsuite)->testcase[cur_tc]->result_state.failure = failure;
+ } else if (!strcmp(node_name, "error")) {
+ size_t cur_tc = (*testsuite)->_tc_inuse > 0 ? (*testsuite)->_tc_inuse - 1 : (*testsuite)->_tc_inuse;
+ struct JUNIT_Error *error = testcase_error_from_attributes(attrs);
+ (*testsuite)->testcase[cur_tc]->tc_result_state_type = JUNIT_RESULT_STATE_ERROR;
+ (*testsuite)->testcase[cur_tc]->result_state.error = error;
} else if (!strcmp(node_name, "skipped")) {
size_t cur_tc = (*testsuite)->_tc_inuse > 0 ? (*testsuite)->_tc_inuse - 1 : (*testsuite)->_tc_inuse;
struct JUNIT_Skipped *skipped = testcase_skipped_from_attributes(attrs);