Gated behind a boolean environment variable WINETEST_COLOR for the moment (default off).
I've experimented with this locally for a while, and I've found it helps me immensely when looking for a specific kind of message. Too often failure or succeeded-inside-todo messages get buried among todo messages, WINEDEBUG output, or (in the case of some badly written test units) trace() output, but this has also helped me check whether there are any todo and skip messages, in cases where I want to make sure that one or the other doesn't show up.
I'm quite open to bikeshedding :-)
From: Rafa�� Harabie�� rafalh1992@o2.pl
Colours are disabled by default, and can be enabled using WINETEST_COLOR=1. --- include/wine/test.h | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/include/wine/test.h b/include/wine/test.h index 6d18dfa3915..2bfdb56da0c 100644 --- a/include/wine/test.h +++ b/include/wine/test.h @@ -199,6 +199,9 @@ int winetest_report_success = 0; /* silence todos and skips above this threshold */ int winetest_mute_threshold = 42;
+/* use ANSI escape codes for output coloring */ +static int winetest_color; + /* passing arguments around */ static int winetest_argc; static char** winetest_argv; @@ -277,6 +280,9 @@ const char *winetest_elapsed(void) return wine_dbg_sprintf( "%.3f", (now - winetest_start_time) / 1000.0); }
+static const char color_reset[] = "\e[0m"; +static const char color_bright_red[] = "\e[1;91m"; + static void winetest_printf( const char *msg, ... ) __WINE_PRINTF_ATTR(1,2); static void winetest_printf( const char *msg, ... ) { @@ -374,8 +380,10 @@ int winetest_vok( int condition, const char *msg, va_list args ) { if (!condition) { + if (winetest_color) printf( color_bright_red ); winetest_print_context( "Test failed: " ); vprintf(msg, args); + if (winetest_color) printf( color_reset ); InterlockedIncrement(&failures); return 0; } @@ -656,6 +664,7 @@ int main( int argc, char **argv ) else if (running_under_wine()) winetest_platform = "wine";
+ if (GetEnvironmentVariableA( "WINETEST_COLOR", p, sizeof(p) )) winetest_color = atoi(p); if (GetEnvironmentVariableA( "WINETEST_DEBUG", p, sizeof(p) )) winetest_debug = atoi(p); if (GetEnvironmentVariableA( "WINETEST_INTERACTIVE", p, sizeof(p) )) winetest_interactive = atoi(p); if (GetEnvironmentVariableA( "WINETEST_REPORT_SUCCESS", p, sizeof(p) )) winetest_report_success = atoi(p);
From: Zebediah Figura zfigura@codeweavers.com
--- include/wine/test.h | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/include/wine/test.h b/include/wine/test.h index 2bfdb56da0c..91b586d24e4 100644 --- a/include/wine/test.h +++ b/include/wine/test.h @@ -281,6 +281,7 @@ const char *winetest_elapsed(void) }
static const char color_reset[] = "\e[0m"; +static const char color_dark_red[] = "\e[31m"; static const char color_bright_red[] = "\e[1;91m";
static void winetest_printf( const char *msg, ... ) __WINE_PRINTF_ATTR(1,2); @@ -354,8 +355,10 @@ int winetest_vok( int condition, const char *msg, va_list args ) { if (condition) { + if (winetest_color) printf( color_dark_red ); winetest_print_context( "Test succeeded inside todo block: " ); vprintf(msg, args); + if (winetest_color) printf( color_reset ); InterlockedIncrement(&todo_failures); return 0; }
From: Zebediah Figura zfigura@codeweavers.com
--- include/wine/test.h | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/include/wine/test.h b/include/wine/test.h index 91b586d24e4..107c658dcf9 100644 --- a/include/wine/test.h +++ b/include/wine/test.h @@ -282,6 +282,7 @@ const char *winetest_elapsed(void)
static const char color_reset[] = "\e[0m"; static const char color_dark_red[] = "\e[31m"; +static const char color_yellow[] = "\e[33m"; static const char color_bright_red[] = "\e[1;91m";
static void winetest_printf( const char *msg, ... ) __WINE_PRINTF_ATTR(1,2); @@ -369,8 +370,10 @@ int winetest_vok( int condition, const char *msg, va_list args ) { if (winetest_debug > 0) { + if (winetest_color) printf( color_yellow ); winetest_print_context( "Test marked todo: " ); vprintf(msg, args); + if (winetest_color) printf( color_reset ); } InterlockedIncrement(&todo_successes); }
From: Zebediah Figura zfigura@codeweavers.com
--- include/wine/test.h | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/include/wine/test.h b/include/wine/test.h index 107c658dcf9..e2f473008ee 100644 --- a/include/wine/test.h +++ b/include/wine/test.h @@ -283,6 +283,7 @@ const char *winetest_elapsed(void) static const char color_reset[] = "\e[0m"; static const char color_dark_red[] = "\e[31m"; static const char color_yellow[] = "\e[33m"; +static const char color_blue[] = "\e[34m"; static const char color_bright_red[] = "\e[1;91m";
static void winetest_printf( const char *msg, ... ) __WINE_PRINTF_ATTR(1,2); @@ -436,8 +437,10 @@ void winetest_vskip( const char *msg, va_list args ) { if (winetest_add_line() < winetest_mute_threshold) { + if (winetest_color) printf( color_blue ); winetest_print_context( "Tests skipped: " ); vprintf(msg, args); + if (winetest_color) printf( color_reset ); InterlockedIncrement(&skipped); } else
From: Zebediah Figura zfigura@codeweavers.com
--- include/wine/test.h | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/include/wine/test.h b/include/wine/test.h index e2f473008ee..7779e252dd7 100644 --- a/include/wine/test.h +++ b/include/wine/test.h @@ -282,6 +282,7 @@ const char *winetest_elapsed(void)
static const char color_reset[] = "\e[0m"; static const char color_dark_red[] = "\e[31m"; +static const char color_green[] = "\e[32m"; static const char color_yellow[] = "\e[33m"; static const char color_blue[] = "\e[34m"; static const char color_bright_red[] = "\e[1;91m"; @@ -399,7 +400,9 @@ int winetest_vok( int condition, const char *msg, va_list args ) if (winetest_report_success || (winetest_time && GetTickCount() >= winetest_last_time + 1000)) { + if (winetest_color) printf( color_green ); winetest_printf("Test succeeded\n"); + if (winetest_color) printf( color_reset ); } InterlockedIncrement(&successes); return 1;