https://git.reactos.org/?p=reactos.git;a=commitdiff;h=88ab888f9478f383d80304...
commit 88ab888f9478f383d803040170ef9eede3beff6e Author: Timo Kreuzer timo.kreuzer@reactos.org AuthorDate: Wed Dec 4 16:20:18 2019 +0100 Commit: Timo Kreuzer timo.kreuzer@reactos.org CommitDate: Sat Dec 21 12:44:48 2019 +0100
[TESTS] Instead of entirely skipping tests with ros_skip_flaky, only disable counting errors --- sdk/include/reactos/wine/test.h | 77 ++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 35 deletions(-)
diff --git a/sdk/include/reactos/wine/test.h b/sdk/include/reactos/wine/test.h index 52bad3a8f84..4da38a4533a 100644 --- a/sdk/include/reactos/wine/test.h +++ b/sdk/include/reactos/wine/test.h @@ -65,15 +65,14 @@ extern void winetest_set_location( const char* file, int line ); extern void winetest_start_todo( int is_todo ); extern int winetest_loop_todo(void); extern void winetest_end_todo(void); +extern void winetest_start_nocount(unsigned int flags); +extern int winetest_loop_nocount(void); +extern void winetest_end_nocount(void); extern int winetest_get_mainargs( char*** pargv ); extern LONG winetest_get_failures(void); extern LONG winetest_get_successes(void); extern void winetest_add_failures( LONG new_failures ); extern void winetest_wait_child_process( HANDLE process ); -extern void winetest_disable_success_count_start(); -extern int winetest_disable_success_count_end(); -extern int winetest_disable_success_count_get(); -extern int winetest_disable_success_count_set();
extern const char *wine_dbgstr_wn( const WCHAR *str, intptr_t n ); extern const char *wine_dbgstr_guid( const GUID *guid ); @@ -164,13 +163,13 @@ extern void __winetest_cdecl winetest_print(const char* msg, ...); #define todo_wine_if(is_todo) todo_if((is_todo) && !strcmp(winetest_platform, "wine")) #endif
-#define ros_skip_flaky for (winetest_print("Skipping flaky test\n");0;) +#define ros_skip_flaky for (winetest_start_nocount(3); \ + winetest_loop_nocount(); \ + winetest_end_nocount())
-#define disable_success_count for (winetest_disable_success_count_start(); \ - (winetest_disable_success_count_get() ? \ - winetest_disable_success_count_end() : \ - winetest_disable_success_count_set()); \ - ) +#define disable_success_count for (winetest_start_nocount(1); \ + winetest_loop_nocount(); \ + winetest_end_nocount())
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
@@ -374,6 +373,7 @@ int winetest_vok( int condition, const char *msg, __winetest_va_list args ) fprintf( stdout, __winetest_file_line_prefix ": Test succeeded inside todo block: ", data->current_file, data->current_line ); vfprintf(stdout, msg, args); + if ((data->nocount_level & 2) == 0) InterlockedIncrement(&todo_failures); return 0; } @@ -386,7 +386,7 @@ int winetest_vok( int condition, const char *msg, __winetest_va_list args ) data->current_file, data->current_line ); vfprintf(stdout, msg, args); } - if (data->nocount_level == 0) + if ((data->nocount_level & 1) == 0) InterlockedIncrement(&todo_successes); return 1; } @@ -398,15 +398,16 @@ int winetest_vok( int condition, const char *msg, __winetest_va_list args ) fprintf( stdout, __winetest_file_line_prefix ": Test failed: ", data->current_file, data->current_line ); vfprintf(stdout, msg, args); + if ((data->nocount_level & 2) == 0) InterlockedIncrement(&failures); return 0; } else { - if (report_success && data->nocount_level == 0) + if (report_success && (data->nocount_level & 1) == 0) fprintf( stdout, __winetest_file_line_prefix ": Test succeeded\n", data->current_file, data->current_line); - if (data->nocount_level == 0) + if ((data->nocount_level & 1) == 0) InterlockedIncrement(&successes); return 1; } @@ -500,6 +501,34 @@ void winetest_end_todo(void) data->todo_level >>= 1; }
+void winetest_start_nocount(unsigned int flags) +{ + tls_data* data = get_tls_data(); + + /* The lowest 2 bits of nocount_level specify whether counting of successes + and/or failures is disabled. For each nested level the bits are shifted + left, the new lowest 2 bits are copied from the previous state and ored + with the new mask. This allows nested handling of both states up tp a + level of 16. */ + flags |= data->nocount_level & 3; + data->nocount_level = (data->nocount_level << 2) | flags; + data->todo_do_loop = 1; +} + +int winetest_loop_nocount(void) +{ + tls_data* data = get_tls_data(); + int do_loop = data->todo_do_loop; + data->todo_do_loop = 0; + return do_loop; +} + +void winetest_end_nocount(void) +{ + tls_data* data = get_tls_data(); + data->nocount_level >>= 2; +} + int winetest_get_mainargs( char*** pargv ) { *pargv = winetest_argv; @@ -548,28 +577,6 @@ void winetest_wait_child_process( HANDLE process ) } }
-void winetest_disable_success_count_start() -{ - get_tls_data()->nocount_level <<= 1; -} - -int winetest_disable_success_count_end() -{ - get_tls_data()->nocount_level >>= 1; - return 0; -} - -int winetest_disable_success_count_get() -{ - return get_tls_data()->nocount_level & 1; -} - -int winetest_disable_success_count_set() -{ - get_tls_data()->nocount_level |= 1; - return 1; -} - const char *wine_dbgstr_wn( const WCHAR *str, intptr_t n ) { char *dst, *res;