diff options
Diffstat (limited to 'tests/test_junitxml.c')
| -rw-r--r-- | tests/test_junitxml.c | 82 | 
1 files changed, 82 insertions, 0 deletions
diff --git a/tests/test_junitxml.c b/tests/test_junitxml.c new file mode 100644 index 0000000..9b2181e --- /dev/null +++ b/tests/test_junitxml.c @@ -0,0 +1,82 @@ +#include "testing.h" + +void test_junitxml_testsuite_read() { +    struct JUNIT_Testsuite *testsuite; +    STASIS_ASSERT_FATAL((testsuite = junitxml_testsuite_read("result.xml")) != NULL, "failed to load testsuite data"); +    STASIS_ASSERT(testsuite->name != NULL, "Test suite must be named"); +    STASIS_ASSERT(testsuite->skipped > 0, "missed skipped tests"); +    STASIS_ASSERT(testsuite->failures > 0, "missed failed tests"); +    STASIS_ASSERT(testsuite->errors == 0, "should not have errored tests"); +    STASIS_ASSERT(testsuite->tests > 0, "missed tests"); + +    for (size_t i = 0; i < testsuite->_tc_inuse; i++) { +        struct JUNIT_Testcase *testcase = testsuite->testcase[i]; +        STASIS_ASSERT_FATAL(testcase->name != NULL, "test case should not be NULL"); +        STASIS_ASSERT(testcase->name != NULL, "name should not be NULL"); +        STASIS_ASSERT(testcase->classname != NULL, "classname should not be NULL"); + +        switch (testcase->tc_result_state_type) { +            case JUNIT_RESULT_STATE_SKIPPED: +                STASIS_ASSERT(testcase->result_state.skipped != NULL, "skipped state set, but data pointer was null"); +                STASIS_ASSERT(testcase->result_state.skipped->message != NULL, "data pointer set, but message pointer was null"); +                break; +            case JUNIT_RESULT_STATE_FAILURE: +                STASIS_ASSERT(testcase->result_state.failure != NULL, "failure state set, but data pointer was null"); +                STASIS_ASSERT(testcase->result_state.failure->message != NULL, "data pointer set, but message pointer was null"); +                break; +            case JUNIT_RESULT_STATE_ERROR: +                STASIS_ASSERT(testcase->result_state.error != NULL, "error state set, but data pointer was null"); +                STASIS_ASSERT(testcase->result_state.error->message != NULL, "data pointer set, but message pointer was null"); +                break; +            case JUNIT_RESULT_STATE_NONE: +                STASIS_ASSERT(testcase->result_state.failure == NULL, "success, but has an failure record"); +                STASIS_ASSERT(testcase->result_state.skipped == NULL, "success, but has a skipped record "); +                STASIS_ASSERT(testcase->result_state.error == NULL, "success, but has an error record"); +                break; +            default: +                SYSERROR("unknown test case result type (%d)", testcase->tc_result_state_type); +                break; +        } +    } +    junitxml_testsuite_free(&testsuite); +} + +void test_junitxml_testsuite_read_error() { +    struct JUNIT_Testsuite *testsuite; +    STASIS_ASSERT_FATAL((testsuite = junitxml_testsuite_read("result_error.xml")) != NULL, "failed to load testsuite data"); + +    STASIS_ASSERT(testsuite->name != NULL, "test suite must be named"); +    STASIS_ASSERT(testsuite->skipped == 0, "should not have any skipped tests"); +    STASIS_ASSERT(testsuite->failures == 0, "should not have any failures, only errors"); +    STASIS_ASSERT(testsuite->errors > 0, "missed failed tests"); +    STASIS_ASSERT(testsuite->tests > 0, "missed tests"); +    STASIS_ASSERT(testsuite->timestamp != NULL, "Test suite must have a timestamp"); + +    for (size_t i = 0; i < testsuite->_tc_inuse; i++) { +        struct JUNIT_Testcase *testcase = testsuite->testcase[i]; +        STASIS_ASSERT_FATAL(testcase->name != NULL, "test case should not be NULL"); +        STASIS_ASSERT(testcase->name != NULL, "name should not be NULL"); +        STASIS_ASSERT(testcase->classname != NULL, "classname should not be NULL"); + +        switch (testcase->tc_result_state_type) { +            case JUNIT_RESULT_STATE_ERROR: +                STASIS_ASSERT(testcase->result_state.error != NULL, "error state set, but data pointer was null"); +                STASIS_ASSERT(testcase->result_state.error->message != NULL, "data pointer set, but message pointer was null"); +                break; +            default: +                SYSERROR("unexpected test case result type (%d)", testcase->tc_result_state_type); +                break; +        } +    } +    junitxml_testsuite_free(&testsuite); +} + +int main(int argc, char *argv[]) { +    STASIS_TEST_BEGIN_MAIN(); +    STASIS_TEST_FUNC *tests[] = { +        test_junitxml_testsuite_read, +        test_junitxml_testsuite_read_error, +    }; +    STASIS_TEST_RUN(tests); +    STASIS_TEST_END_MAIN(); +}
\ No newline at end of file  | 
