Ejemplo n.º 1
0
static void test_log(MuLogger* _self, MuLogEvent* event)
{
    XmlLogger* self = (XmlLogger*) _self;
    const char* level_str = "unknown";

    switch (event->level)
    {
        case MU_LEVEL_WARNING:
            level_str = "warning"; break;
        case MU_LEVEL_INFO:
            level_str = "info"; break;
        case MU_LEVEL_VERBOSE:
            level_str = "verbose"; break;
        case MU_LEVEL_DEBUG:
            level_str = "debug"; break;
        case MU_LEVEL_TRACE:
            level_str = "trace"; break;
    }
    fprintf(self->out, INDENT_TEST INDENT "<event level=\"%s\"", level_str);

    fprintf(self->out, " stage=\"%s\"", mu_test_stage_to_string(event->stage));
    
    if (event->file)
        fprintf(self->out, " file=\"%s\"", basename_pure(event->file));
    if (event->line)
        fprintf(self->out, " line=\"%u\"", event->line);

    fprintf(self->out, ">");
    fprintf(self->out, "<![CDATA[%s]]>", event->message);
    fprintf(self->out, "</event>\n");
}
Ejemplo n.º 2
0
static void test_log(MuLogger* _self, MuLogEvent const* event)
{
    JsonLogger* self = (JsonLogger*) _self;
    const char* level_str = "unknown";

    if (event->level > self->loglevel)
    {
        return;
    }

    if (self->need_events)
    {
        key_array_begin(self, "events");
        self->need_events = false;
    }

    switch (event->level)
    {
        case MU_LEVEL_WARNING:
            level_str = "warning"; break;
        case MU_LEVEL_INFO:
            level_str = "info"; break;
        case MU_LEVEL_VERBOSE:
            level_str = "verbose"; break;
        case MU_LEVEL_DEBUG:
            level_str = "debug"; break;
        case MU_LEVEL_TRACE:
            level_str = "trace"; break;
    }

    elem_object_begin(self);

    key_string(self, "level", level_str);
    key_string(self, "stage", mu_test_stage_to_string(event->stage));

    if (event->file)
    {
        key_string(self, "file", event->file);
    }

    if (event->line)
    {
        key_integer(self, "line", event->line);
    }

    if (event->message)
    {
        key_string(self, "message", event->message);
    }

    elem_object_end(self);
}
Ejemplo n.º 3
0
static void test_leave(MuLogger* _self,
                       MuTest* test, MuTestResult* summary)
{
    JsonLogger* self = (JsonLogger*) _self;

    if (!self->need_events)
    {
        key_array_end(self);
    }

    key_object_begin(self, "result");

    key_string(self, "expected", mu_test_status_to_string(summary->expected));
    key_string(self, "status", mu_test_status_to_string(summary->status));
    key_string(self, "stage", mu_test_stage_to_string(summary->stage));
    if (summary->reason)
    {
        key_string(self, "reason", summary->reason);
    }
    if (summary->file)
    {
        key_string(self, "file", summary->file);
    }
    if (summary->line)
    {
        key_integer(self, "line", summary->line);
    }

    key_object_end(self);

    if (summary->backtrace)
    {
        MuBacktrace* frame;

        key_array_begin(self, "backtrace");
        for (frame = summary->backtrace; frame; frame = frame->up)
        {
            elem_object_begin(self);
            if (frame->file_name)
            {
                key_string(self, "binary_file", frame->file_name);
            }
            if (frame->func_name && *frame->func_name)
            {
                key_string(self, "function", frame->func_name);
            }
            if (frame->func_addr)
            {
                key_begin(self, "func_addr");
                print(self, "\"0x%lx\"", frame->func_addr);
                key_end(self);
            }
            if (frame->return_addr)
            {
                key_begin(self, "return_addr");
                print(self, "\"0x%lx\"", frame->return_addr);
                key_end(self);
            }
            elem_object_end(self);
        }
        key_array_end(self);
    }

    elem_object_end(self);
}
Ejemplo n.º 4
0
static void test_leave(MuLogger* _self, 
                       MuTest* test, MuTestResult* summary)
{
    XmlLogger* self = (XmlLogger*) _self;
    const char* stage;
    FILE* out = self->out;
    bool result = summary->status == summary->expected;
    const char* result_str;

    if (summary->status == MU_STATUS_DEBUG)
    {
        result_str = "debug";
    }
    else if (result)
    {
        switch (summary->status)
        {		
        case MU_STATUS_SUCCESS:
            result_str = "pass";
            break;
        case MU_STATUS_SKIPPED:
            result_str = "skip";
            break;
        default:
            result_str = "xfail";
            break;
        }
    }
    else
    {
        switch (summary->status)
        {		
        case MU_STATUS_SUCCESS:
            result_str = "xpass";
            break;
        case MU_STATUS_SKIPPED:
            result_str = "skip";
            break;
        default:
            result_str = "fail";
            break;
        }
    }
        
    if (summary->status == MU_STATUS_SUCCESS)
	{
        fprintf(out, INDENT_TEST INDENT "<result status=\"%s\"/>\n", result_str);
    }
    else
    {
        stage = mu_test_stage_to_string(summary->stage);
        
        if (summary->reason)
        {
            fprintf(out, INDENT_TEST INDENT "<result status=\"%s\" stage=\"%s\"", result_str, stage);
            if (summary->file)
                fprintf(out, " file=\"%s\"", basename_pure(summary->file));
            if (summary->line)
                fprintf(out, " line=\"%i\"", summary->line);

            fprintf(out, ">");
            fprintf(out, "<![CDATA[%s]]>", summary->reason);
            fprintf(out, "</result>\n");
        }
        else
        {
            fprintf(out, INDENT_TEST INDENT "<result status=\"fail\" stage=\"%s\"", stage);
            if (summary->file)
                fprintf(out, " file=\"%s\"", basename_pure(summary->file));
            if (summary->line)
                fprintf(out, " line=\"%i\"", summary->line);
            fprintf(out, "/>\n");
        }
	}

    if (summary->backtrace)
    {
        MuBacktrace* frame;
        fprintf(out, INDENT_TEST INDENT "<backtrace>\n");
        for (frame = summary->backtrace; frame; frame = frame->up)
        {
            fprintf(out, INDENT_TEST INDENT INDENT "<frame");
            if (frame->file_name)
            {
                fprintf(out, " binary_file=\"%s\"", frame->file_name);
            }
            if (frame->func_name)
            {
                fprintf(out, " function=\"%s\"", frame->func_name);
            }
            if (frame->func_addr)
            {
                fprintf(out, " func_addr=\"%lx\"", frame->func_addr);
            }
            if (frame->return_addr)
            {
                fprintf(out, " return_addr=\"%lx\"", frame->return_addr);
            }
            fprintf(out, "/>\n");
        }
        fprintf(out, INDENT_TEST "  </backtrace>\n");
    }

    fprintf(out, INDENT_TEST "</test>\n");
}