Skip to content
Snippets Groups Projects

tests: Make test context information nestable.

Merged Elizabeth Figura requested to merge zfigura/vkd3d:pr4 into master
+ 33
18
@@ -118,7 +118,8 @@ struct vkd3d_test_state
bool bug_enabled;
const char *test_name_filter;
char context[1024];
char context[8][128];
unsigned int context_count;
};
extern struct vkd3d_test_state vkd3d_test_state;
@@ -134,6 +135,16 @@ broken(bool condition)
return condition && vkd3d_test_platform_is_windows();
}
static void vkd3d_test_printf(unsigned int line, const char *msg)
{
unsigned int i;
printf("%s:%u: ", vkd3d_test_name, line);
for (i = 0; i < vkd3d_test_state.context_count; ++i)
printf("%s: ", vkd3d_test_state.context[i]);
printf("%s", msg);
}
static void
vkd3d_test_check_assert_that(unsigned int line, bool result, const char *fmt, va_list args)
{
@@ -141,12 +152,12 @@ vkd3d_test_check_assert_that(unsigned int line, bool result, const char *fmt, va
{
InterlockedIncrement(&vkd3d_test_state.success_count);
if (vkd3d_test_state.debug_level > 1)
printf("%s:%d%s: Test succeeded.\n", vkd3d_test_name, line, vkd3d_test_state.context);
vkd3d_test_printf(line, "Test succeeded.\n");
}
else
{
InterlockedIncrement(&vkd3d_test_state.failure_count);
printf("%s:%d%s: Test failed: ", vkd3d_test_name, line, vkd3d_test_state.context);
vkd3d_test_printf(line, "Test failed: ");
vprintf(fmt, args);
}
}
@@ -173,9 +184,9 @@ vkd3d_test_check_ok(unsigned int line, bool result, const char *fmt, va_list arg
if (is_todo)
result = !result;
if (result)
printf("%s:%d%s: Fixed bug: ", vkd3d_test_name, line, vkd3d_test_state.context);
vkd3d_test_printf(line, "Fixed bug: ");
else
printf("%s:%d%s: Bug: ", vkd3d_test_name, line, vkd3d_test_state.context);
vkd3d_test_printf(line, "Bug: ");
vprintf(fmt, args);
}
else if (is_todo)
@@ -183,12 +194,12 @@ vkd3d_test_check_ok(unsigned int line, bool result, const char *fmt, va_list arg
if (result)
{
InterlockedIncrement(&vkd3d_test_state.todo_success_count);
printf("%s:%d%s: Todo succeeded: ", vkd3d_test_name, line, vkd3d_test_state.context);
vkd3d_test_printf(line, "Todo succeeded: ");
}
else
{
InterlockedIncrement(&vkd3d_test_state.todo_count);
printf("%s:%d%s: Todo: ", vkd3d_test_name, line, vkd3d_test_state.context);
vkd3d_test_printf(line, "Todo: ");
}
vprintf(fmt, args);
}
@@ -213,7 +224,7 @@ vkd3d_test_skip(unsigned int line, const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
printf("%s:%d%s: Test skipped: ", vkd3d_test_name, line, vkd3d_test_state.context);
vkd3d_test_printf(line, "Test skipped: ");
vprintf(fmt, args);
va_end(args);
InterlockedIncrement(&vkd3d_test_state.skip_count);
@@ -224,7 +235,7 @@ vkd3d_test_trace(unsigned int line, const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
printf("%s:%d%s: ", vkd3d_test_name, line, vkd3d_test_state.context);
vkd3d_test_printf(line, "");
vprintf(fmt, args);
va_end(args);
}
@@ -394,21 +405,25 @@ static inline void vkd3d_test_end_bug(void)
vkd3d_test_state.bug_level >>= 1;
}
static inline void vkd3d_test_set_context(const char *fmt, ...)
static inline void vkd3d_test_push_context(const char *fmt, ...)
{
va_list args;
if (!fmt)
if (vkd3d_test_state.context_count < ARRAY_SIZE(vkd3d_test_state.context))
{
vkd3d_test_state.context[0] = '\0';
return;
va_start(args, fmt);
vsnprintf(vkd3d_test_state.context[vkd3d_test_state.context_count],
sizeof(vkd3d_test_state.context), fmt, args);
va_end(args);
vkd3d_test_state.context[vkd3d_test_state.context_count][sizeof(vkd3d_test_state.context[0]) - 1] = '\0';
}
++vkd3d_test_state.context_count;
}
vkd3d_test_state.context[0] = ':';
va_start(args, fmt);
vsnprintf(&vkd3d_test_state.context[1], sizeof(vkd3d_test_state.context) - 1, fmt, args);
va_end(args);
vkd3d_test_state.context[sizeof(vkd3d_test_state.context) - 1] = '\0';
static inline void vkd3d_test_pop_context(void)
{
if (vkd3d_test_state.context_count)
--vkd3d_test_state.context_count;
}
#define run_test(test_pfn) \
Loading