tests: Add support for subtests.

Some Wine tests run code compiled from another C file, resulting in
traces and errors that look like they come from a different test.
subtest() allows such tests to declare their subtests so they are
recognized by scripts parsing the results such as the TestBot and
WineTest website.

Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Francois Gouget 2019-08-27 04:14:29 +02:00 committed by Alexandre Julliard
parent afdf14084e
commit 033196641b
1 changed files with 11 additions and 0 deletions

View File

@ -68,6 +68,7 @@ extern int winetest_report_success;
extern const char *winetest_platform; extern const char *winetest_platform;
extern void winetest_set_location( const char* file, int line ); extern void winetest_set_location( const char* file, int line );
extern void winetest_subtest( const char* name );
extern void winetest_start_todo( int is_todo ); extern void winetest_start_todo( int is_todo );
extern int winetest_loop_todo(void); extern int winetest_loop_todo(void);
extern void winetest_end_todo(void); extern void winetest_end_todo(void);
@ -123,17 +124,20 @@ extern void __winetest_cdecl winetest_win_skip( const char *msg, ... ) WINETEST_
extern void __winetest_cdecl winetest_trace( const char *msg, ... ) WINETEST_PRINTF_ATTR(1,2); extern void __winetest_cdecl winetest_trace( const char *msg, ... ) WINETEST_PRINTF_ATTR(1,2);
#ifdef WINETEST_NO_LINE_NUMBERS #ifdef WINETEST_NO_LINE_NUMBERS
# define subtest_(file, line) (winetest_set_location(file, 0), 0) ? (void)0 : winetest_subtest
# define ok_(file, line) (winetest_set_location(file, 0), 0) ? (void)0 : winetest_ok # define ok_(file, line) (winetest_set_location(file, 0), 0) ? (void)0 : winetest_ok
# define skip_(file, line) (winetest_set_location(file, 0), 0) ? (void)0 : winetest_skip # define skip_(file, line) (winetest_set_location(file, 0), 0) ? (void)0 : winetest_skip
# define win_skip_(file, line) (winetest_set_location(file, 0), 0) ? (void)0 : winetest_win_skip # define win_skip_(file, line) (winetest_set_location(file, 0), 0) ? (void)0 : winetest_win_skip
# define trace_(file, line) (winetest_set_location(file, 0), 0) ? (void)0 : winetest_trace # define trace_(file, line) (winetest_set_location(file, 0), 0) ? (void)0 : winetest_trace
#else #else
# define subtest_(file, line) (winetest_set_location(file, line), 0) ? (void)0 : winetest_subtest
# define ok_(file, line) (winetest_set_location(file, line), 0) ? (void)0 : winetest_ok # define ok_(file, line) (winetest_set_location(file, line), 0) ? (void)0 : winetest_ok
# define skip_(file, line) (winetest_set_location(file, line), 0) ? (void)0 : winetest_skip # define skip_(file, line) (winetest_set_location(file, line), 0) ? (void)0 : winetest_skip
# define win_skip_(file, line) (winetest_set_location(file, line), 0) ? (void)0 : winetest_win_skip # define win_skip_(file, line) (winetest_set_location(file, line), 0) ? (void)0 : winetest_win_skip
# define trace_(file, line) (winetest_set_location(file, line), 0) ? (void)0 : winetest_trace # define trace_(file, line) (winetest_set_location(file, line), 0) ? (void)0 : winetest_trace
#endif #endif
#define subtest subtest_(__FILE__, __LINE__)
#define ok ok_(__FILE__, __LINE__) #define ok ok_(__FILE__, __LINE__)
#define skip skip_(__FILE__, __LINE__) #define skip skip_(__FILE__, __LINE__)
#define win_skip win_skip_(__FILE__, __LINE__) #define win_skip win_skip_(__FILE__, __LINE__)
@ -308,6 +312,13 @@ void winetest_set_location( const char* file, int line )
data->current_line=line; data->current_line=line;
} }
void winetest_subtest( const char* name )
{
struct tls_data *data = get_tls_data();
printf( "%s:%d: Subtest %s\n",
data->current_file, data->current_line, name);
}
int broken( int condition ) int broken( int condition )
{ {
return (strcmp(winetest_platform, "windows") == 0) && condition; return (strcmp(winetest_platform, "windows") == 0) && condition;