Commit a580c6c2 authored by Alexandre Julliard's avatar Alexandre Julliard

winetest: Allow to specify a subset of tests to run on the command line.

parent db8783e7
...@@ -51,6 +51,35 @@ static const char whitespace[] = " \t\r\n"; ...@@ -51,6 +51,35 @@ static const char whitespace[] = " \t\r\n";
static const char testexe[] = "_test.exe"; static const char testexe[] = "_test.exe";
static char build_id[64]; static char build_id[64];
/* filters for running only specific tests */
static char *filters[64];
static unsigned int nb_filters = 0;
/* check if test is being filtered out */
static BOOL test_filtered_out( LPCSTR module, LPCSTR testname )
{
char *p, dllname[MAX_PATH];
unsigned int i, len;
strcpy( dllname, module );
CharLowerA( dllname );
p = strstr( dllname, testexe );
if (p) *p = 0;
len = strlen(dllname);
if (!nb_filters) return FALSE;
for (i = 0; i < nb_filters; i++)
{
if (!strncmp( dllname, filters[i], len ))
{
if (!filters[i][len]) return FALSE;
if (filters[i][len] != ':') continue;
if (!testname || !strcmp( testname, &filters[i][len+1] )) return FALSE;
}
}
return TRUE;
}
static char * get_file_version(char * file_name) static char * get_file_version(char * file_name)
{ {
static char version[32]; static char version[32];
...@@ -392,7 +421,8 @@ get_subtests (const char *tempdir, struct wine_test *test, LPTSTR res_name) ...@@ -392,7 +421,8 @@ get_subtests (const char *tempdir, struct wine_test *test, LPTSTR res_name)
test->subtests = xrealloc (test->subtests, test->subtests = xrealloc (test->subtests,
allocated * sizeof(char*)); allocated * sizeof(char*));
} }
test->subtests[test->subtest_count++] = strdup (index); if (!test_filtered_out( test->name, index ))
test->subtests[test->subtest_count++] = xstrdup(index);
index = strtok (NULL, whitespace); index = strtok (NULL, whitespace);
} }
test->subtests = xrealloc (test->subtests, test->subtests = xrealloc (test->subtests,
...@@ -420,7 +450,7 @@ static BOOL CALLBACK ...@@ -420,7 +450,7 @@ static BOOL CALLBACK
EnumTestFileProc (HMODULE hModule, LPCTSTR lpszType, EnumTestFileProc (HMODULE hModule, LPCTSTR lpszType,
LPTSTR lpszName, LONG_PTR lParam) LPTSTR lpszName, LONG_PTR lParam)
{ {
(*(int*)lParam)++; if (!test_filtered_out( lpszName, NULL )) (*(int*)lParam)++;
return TRUE; return TRUE;
} }
...@@ -432,6 +462,8 @@ extract_test_proc (HMODULE hModule, LPCTSTR lpszType, ...@@ -432,6 +462,8 @@ extract_test_proc (HMODULE hModule, LPCTSTR lpszType,
char dllname[MAX_PATH]; char dllname[MAX_PATH];
HMODULE dll; HMODULE dll;
if (test_filtered_out( lpszName, NULL )) return TRUE;
/* Check if the main dll is present on this system */ /* Check if the main dll is present on this system */
CharLowerA(lpszName); CharLowerA(lpszName);
strcpy(dllname, lpszName); strcpy(dllname, lpszName);
...@@ -582,7 +614,7 @@ static void ...@@ -582,7 +614,7 @@ static void
usage (void) usage (void)
{ {
fprintf (stderr, fprintf (stderr,
"Usage: winetest [OPTION]...\n\n" "Usage: winetest [OPTION]... [TESTS]\n\n"
" -c console mode, no GUI\n" " -c console mode, no GUI\n"
" -e preserve the environment\n" " -e preserve the environment\n"
" -h print this message and exit\n" " -h print this message and exit\n"
...@@ -607,11 +639,14 @@ int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, ...@@ -607,11 +639,14 @@ int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst,
cmdLine = strtok (cmdLine, whitespace); cmdLine = strtok (cmdLine, whitespace);
while (cmdLine) { while (cmdLine) {
if (cmdLine[0] != '-' || cmdLine[2]) { if (cmdLine[0] != '-' || cmdLine[2]) {
report (R_ERROR, "Not a single letter option: %s", cmdLine); if (nb_filters == sizeof(filters)/sizeof(filters[0]))
usage (); {
exit (2); report (R_ERROR, "Too many test filters specified");
exit (2);
}
filters[nb_filters++] = xstrdup( cmdLine );
} }
switch (cmdLine[1]) { else switch (cmdLine[1]) {
case 'c': case 'c':
report (R_TEXTMODE); report (R_TEXTMODE);
interactive = 0; interactive = 0;
...@@ -672,21 +707,24 @@ int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, ...@@ -672,21 +707,24 @@ int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst,
SetEnvironmentVariableA( "WINETEST_REPORT_SUCCESS", "0" ); SetEnvironmentVariableA( "WINETEST_REPORT_SUCCESS", "0" );
} }
while (!tag) { if (!nb_filters) /* don't submit results when filtering */
if (!interactive) {
report (R_FATAL, "Please specify a tag (-t option) if " while (!tag) {
"running noninteractive!"); if (!interactive)
if (guiAskTag () == IDABORT) exit (1); report (R_FATAL, "Please specify a tag (-t option) if "
} "running noninteractive!");
report (R_TAG); if (guiAskTag () == IDABORT) exit (1);
}
report (R_TAG);
if (!build_id[0]) if (!build_id[0])
report( R_WARNING, "You won't be able to submit results without a valid build id.\n" report( R_WARNING, "You won't be able to submit results without a valid build id.\n"
"To submit results, winetest needs to be built from a git checkout." ); "To submit results, winetest needs to be built from a git checkout." );
}
if (!logname) { if (!logname) {
logname = run_tests (NULL); logname = run_tests (NULL);
if (build_id[0] && if (build_id[0] && !nb_filters &&
report (R_ASK, MB_YESNO, "Do you want to submit the test results?") == IDYES) report (R_ASK, MB_YESNO, "Do you want to submit the test results?") == IDYES)
if (!send_file (logname) && !DeleteFileA(logname)) if (!send_file (logname) && !DeleteFileA(logname))
report (R_WARNING, "Can't remove logfile: %u", GetLastError()); report (R_WARNING, "Can't remove logfile: %u", GetLastError());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment