[1/2] tests: Add winetest_status() which indicates what to do with a test result.

Francois Gouget fgouget at codeweavers.com
Fri Feb 5 08:31:11 CST 2016


winetest_status() takes into account not just the condition but also the todo level, debug level, whether to report successful tests; and returns the test status and whether to trace its result.
This allows individual tests to do their own logging taking into account all these flags.

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
 include/wine/test.h | 87 ++++++++++++++++++++++++++++++++++-------------------
 1 file changed, 56 insertions(+), 31 deletions(-)

diff --git a/include/wine/test.h b/include/wine/test.h
index bed44f9..cb412ed 100644
--- a/include/wine/test.h
+++ b/include/wine/test.h
@@ -85,6 +85,15 @@ static inline int winetest_strcmpW( const WCHAR *str1, const WCHAR *str2 )
 #define START_TEST(name) void func_##name(void)
 #endif
 
+#define WINETEST_SUCCESS         0x0 /* the test succeeded */
+#define WINETEST_FAILURE         0x1 /* the test failed */
+#define WINETEST_TODO            0x2 /* the test failed inside a todo */
+#define WINETEST_TODO_SUCCESS    0x3 /* the test succeeded inside a todo */
+#define WINETEST_RESULT_MASK     0x3
+#define WINETEST_REPORT          0x4 /* trace the result */
+
+extern int winetest_status( int condition );
+
 #if defined(__x86_64__) && defined(__GNUC__) && defined(__WINE_USE_MSVCRT)
 #define __winetest_cdecl __cdecl
 #define __winetest_va_list __builtin_ms_va_list
@@ -287,6 +296,20 @@ int broken( int condition )
     return (strcmp(winetest_platform, "windows") == 0) && condition;
 }
 
+int winetest_status( int condition )
+{
+    tls_data* data=get_tls_data();
+
+    if (data->todo_level)
+        return condition ?
+            (WINETEST_TODO_SUCCESS | WINETEST_REPORT) :
+            (WINETEST_TODO | (winetest_debug > 0 ? WINETEST_REPORT : 0));
+    else
+        return condition ?
+            (WINETEST_SUCCESS | (report_success ? WINETEST_REPORT : 0)) :
+            (WINETEST_FAILURE | WINETEST_REPORT);
+}
+
 /*
  * Checks condition.
  * Parameters:
@@ -300,47 +323,49 @@ int broken( int condition )
 int winetest_vok( int condition, const char *msg, __winetest_va_list args )
 {
     tls_data* data=get_tls_data();
+    int result = winetest_status(condition);
 
-    if (data->todo_level)
+    switch (result & WINETEST_RESULT_MASK)
     {
-        if (condition)
+    case WINETEST_SUCCESS:
+        if (result & WINETEST_REPORT)
+            printf( "%s:%d: Test succeeded\n",
+                    data->current_file, data->current_line);
+        InterlockedIncrement(&successes);
+        return 1;
+
+    case WINETEST_FAILURE:
+        if (result & WINETEST_REPORT)
         {
-            printf( "%s:%d: Test succeeded inside todo block: ",
+            printf( "%s:%d: Test failed: ",
                     data->current_file, data->current_line );
             vprintf(msg, args);
-            InterlockedIncrement(&todo_failures);
-            return 0;
         }
-        else
-        {
-            if (winetest_debug > 0)
-            {
-                printf( "%s:%d: Test marked todo: ",
-                        data->current_file, data->current_line );
-                vprintf(msg, args);
-            }
-            InterlockedIncrement(&todo_successes);
-            return 1;
-        }
-    }
-    else
-    {
-        if (!condition)
+        InterlockedIncrement(&failures);
+        return 0;
+
+    case WINETEST_TODO:
+        if (result & WINETEST_REPORT)
         {
-            printf( "%s:%d: Test failed: ",
+            printf( "%s:%d: Test marked todo: ",
                     data->current_file, data->current_line );
             vprintf(msg, args);
-            InterlockedIncrement(&failures);
-            return 0;
-        }
-        else
-        {
-            if (report_success)
-                printf( "%s:%d: Test succeeded\n",
-                        data->current_file, data->current_line);
-            InterlockedIncrement(&successes);
-            return 1;
         }
+        InterlockedIncrement(&todo_successes);
+        return 1;
+
+    case WINETEST_TODO_SUCCESS:
+        if (result & WINETEST_REPORT)
+            printf( "%s:%d: Test succeeded inside todo block: ",
+                    data->current_file, data->current_line );
+        vprintf(msg, args);
+        InterlockedIncrement(&todo_failures);
+        return 0;
+
+    default:
+        printf( "%s:%d: Unknown test result %d\n",
+                data->current_file, data->current_line, result);
+        return 1;
     }
 }
 
-- 
2.7.0




More information about the wine-patches mailing list