https://git.reactos.org/?p=reactos.git;a=commitdiff;h=218a1ae241aaf05e5b9516e3f2264615f72b64a9

commit 218a1ae241aaf05e5b9516e3f2264615f72b64a9
Author:     Mark Jansen <[email protected]>
AuthorDate: Mon Mar 14 00:35:20 2022 +0100
Commit:     Mark Jansen <[email protected]>
CommitDate: Sun Mar 20 19:28:43 2022 +0100

    [WINESYNC] include: Introduce winetest_push_context() and 
winetest_pop_context().
    
    include: Introduce winetest_push_context() and winetest_pop_context().
    
    Based on vkd3d's vkd3d_test_set_context(), but adding support for a stack of
    context prefixes, to more easily accomodate tests with nested loops.
    
    af39a1b0bce0622ed8df0e64f9c794380eb30c45
    
    Signed-off-by: Zebediah Figura <[email protected]>
    Signed-off-by: Alexandre Julliard <[email protected]>
---
 sdk/include/reactos/wine/test.h | 78 +++++++++++++++++++++++++++++++++--------
 1 file changed, 64 insertions(+), 14 deletions(-)

diff --git a/sdk/include/reactos/wine/test.h b/sdk/include/reactos/wine/test.h
index 45578f1a65d..414215ab0c4 100644
--- a/sdk/include/reactos/wine/test.h
+++ b/sdk/include/reactos/wine/test.h
@@ -133,6 +133,8 @@ extern void __winetest_cdecl winetest_skip( const char 
*msg, ... ) __attribute__
 extern void __winetest_cdecl winetest_win_skip( const char *msg, ... ) 
__attribute__((format (printf,1,2)));
 extern void __winetest_cdecl winetest_trace( const char *msg, ... ) 
__attribute__((format (printf,1,2)));
 extern void __winetest_cdecl winetest_print(const char* msg, ...) 
__attribute__((format(printf, 1, 2)));
+extern void __winetest_cdecl winetest_push_context( const char *fmt, ... ) 
__attribute__((format(printf, 1, 2)));
+extern void winetest_pop_context(void);
 
 #else /* __GNUC__ */
 # define WINETEST_PRINTF_ATTR(fmt,args)
@@ -141,6 +143,8 @@ extern void __winetest_cdecl winetest_skip( const char 
*msg, ... );
 extern void __winetest_cdecl winetest_win_skip( const char *msg, ... );
 extern void __winetest_cdecl winetest_trace( const char *msg, ... );
 extern void __winetest_cdecl winetest_print(const char* msg, ...);
+extern void __winetest_cdecl winetest_push_context( const char *fmt, ... );
+extern void winetest_pop_context(void);
 
 #endif /* __GNUC__ */
 
@@ -288,6 +292,8 @@ typedef struct
     int todo_do_loop;
     char *str_pos;                   /* position in debug buffer */
     char strings[2000];              /* buffer for debug strings */
+    char context[8][128];            /* data to print before messages */
+    unsigned int context_count;      /* number of context prefixes */
 } tls_data;
 static DWORD tls_index;
 
@@ -350,10 +356,36 @@ void winetest_set_location( const char* file, int line )
     data->current_line=line;
 }
 
+#ifdef __GNUC__
+static void __winetest_cdecl winetest_printf( const char *msg, ... ) 
__attribute__((format(printf,1,2)));
+#else
+static void __winetest_cdecl winetest_printf(const char* msg, ...);
+#endif
+static void __winetest_cdecl winetest_printf( const char *msg, ... )
+{
+    tls_data *data = get_tls_data();
+    __winetest_va_list valist;
+
+    fprintf( stdout, __winetest_file_line_prefix ": ", data->current_file, 
data->current_line );
+    __winetest_va_start( valist, msg );
+    vfprintf( stdout, msg, valist );
+    __winetest_va_end( valist );
+}
+
+static void __winetest_cdecl winetest_print_context( const char *msgtype )
+{
+    tls_data *data = get_tls_data();
+    unsigned int i;
+
+    winetest_printf( "%s", msgtype );
+    for (i = 0; i < data->context_count; ++i)
+        fprintf( stdout, "%s: ", data->context[i] );
+}
+
 void winetest_subtest(const char* name)
 {
     tls_data* data = get_tls_data();
-    printf(__winetest_file_line_prefix ": Subtest %s\n",
+    fprintf(stdout, __winetest_file_line_prefix ": Subtest %s\n",
         data->current_file, data->current_line, name);
 }
 
@@ -384,8 +416,7 @@ int winetest_vok( int condition, const char *msg, 
__winetest_va_list args )
     {
         if (condition)
         {
-            fprintf( stdout, __winetest_file_line_prefix ": Test succeeded 
inside todo block: ",
-                     data->current_file, data->current_line );
+            winetest_print_context( "Test succeeded inside todo block: " );
             vfprintf(stdout, msg, args);
             if ((data->nocount_level & 2) == 0)
             InterlockedIncrement(&todo_failures);
@@ -396,8 +427,7 @@ int winetest_vok( int condition, const char *msg, 
__winetest_va_list args )
             /* show todos even if traces are disabled*/
             /*if (winetest_debug > 0)*/
             {
-                fprintf( stdout, __winetest_file_line_prefix ": Test marked 
todo: ",
-                         data->current_file, data->current_line );
+                winetest_print_context( "Test marked todo: " );
                 vfprintf(stdout, msg, args);
             }
             if ((data->nocount_level & 1) == 0)
@@ -409,8 +439,7 @@ int winetest_vok( int condition, const char *msg, 
__winetest_va_list args )
     {
         if (!condition)
         {
-            fprintf( stdout, __winetest_file_line_prefix ": Test failed: ",
-                     data->current_file, data->current_line );
+            winetest_print_context( "Test failed: " );
             vfprintf(stdout, msg, args);
             if ((data->nocount_level & 2) == 0)
             InterlockedIncrement(&failures);
@@ -419,8 +448,9 @@ int winetest_vok( int condition, const char *msg, 
__winetest_va_list args )
         else
         {
             if (report_success && (data->nocount_level & 1) == 0)
-                fprintf( stdout, __winetest_file_line_prefix ": Test 
succeeded\n",
-                         data->current_file, data->current_line);
+            {
+                winetest_printf("Test succeeded\n");
+            }
             if ((data->nocount_level & 1) == 0)
             InterlockedIncrement(&successes);
             return 1;
@@ -440,11 +470,10 @@ void __winetest_cdecl winetest_ok( int condition, const 
char *msg, ... )
 void __winetest_cdecl winetest_trace( const char *msg, ... )
 {
     __winetest_va_list valist;
-    tls_data* data=get_tls_data();
 
     if (winetest_debug > 0)
     {
-        fprintf( stdout, __winetest_file_line_prefix ": ", data->current_file, 
data->current_line );
+        winetest_print_context( "" );
         __winetest_va_start(valist, msg);
         vfprintf(stdout, msg, valist);
         __winetest_va_end(valist);
@@ -464,9 +493,7 @@ void __winetest_cdecl winetest_print(const char* msg, ...)
 
 void winetest_vskip( const char *msg, __winetest_va_list args )
 {
-    tls_data* data=get_tls_data();
-
-    fprintf( stdout, __winetest_file_line_prefix ": Tests skipped: ", 
data->current_file, data->current_line );
+    winetest_print_context( "Tests skipped: " );
     vfprintf(stdout, msg, args);
     skipped++;
 }
@@ -543,6 +570,29 @@ void winetest_end_nocount(void)
     data->nocount_level >>= 2;
 }
 
+void __winetest_cdecl winetest_push_context(const char* fmt, ...)
+{
+    tls_data* data = get_tls_data();
+    __winetest_va_list valist;
+
+    if (data->context_count < ARRAY_SIZE(data->context))
+    {
+        __winetest_va_start(valist, fmt);
+        vsnprintf(data->context[data->context_count], 
sizeof(data->context[data->context_count]), fmt, valist);
+        __winetest_va_end(valist);
+        
data->context[data->context_count][sizeof(data->context[data->context_count]) - 
1] = 0;
+    }
+    ++data->context_count;
+}
+
+void winetest_pop_context(void)
+{
+    tls_data* data = get_tls_data();
+
+    if (data->context_count)
+        --data->context_count;
+}
+
 int winetest_get_mainargs( char*** pargv )
 {
     *pargv = winetest_argv;

Reply via email to