[ROSTESTS] Skip some flaky test / do not count successes
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Sun, 15 Sep 2019 13:07:32 +0000 (15:07 +0200)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Wed, 4 Dec 2019 00:24:49 +0000 (01:24 +0100)
29 files changed:
modules/rostests/apitests/kernel32/TunnelCache.c
modules/rostests/apitests/ntdll/NtQueryInformationProcess.c
modules/rostests/apitests/user32/RedrawWindow.c
modules/rostests/apitests/user32/SetProp.c
modules/rostests/winetests/gdi32/bitmap.c
modules/rostests/winetests/gdi32/path.c
modules/rostests/winetests/kernel32/mailslot.c
modules/rostests/winetests/kernel32/pipe.c
modules/rostests/winetests/kernel32/process.c
modules/rostests/winetests/kernel32/sync.c
modules/rostests/winetests/mshtml/xmlhttprequest.c
modules/rostests/winetests/msi/msi.c
modules/rostests/winetests/msxml3/domdoc.c
modules/rostests/winetests/ntdll/exception.c
modules/rostests/winetests/ntdll/info.c
modules/rostests/winetests/ntdll/process.c
modules/rostests/winetests/ole32/compobj.c
modules/rostests/winetests/qmgr/job.c
modules/rostests/winetests/quartz/filtermapper.c
modules/rostests/winetests/quartz/referenceclock.c
modules/rostests/winetests/riched20/editor.c
modules/rostests/winetests/rpcrt4/server.c
modules/rostests/winetests/user32/listbox.c
modules/rostests/winetests/user32/msg.c
modules/rostests/winetests/user32/win.c
modules/rostests/winetests/usp10/usp10.c
modules/rostests/winetests/wininet/ftp.c
modules/rostests/winetests/wininet/http.c
sdk/include/reactos/wine/test.h

index 9e67e74..8081da4 100644 (file)
@@ -176,6 +176,7 @@ Test_LongTests(void)
     ok(GetFileTime(hFile, &File1Time, NULL, NULL) != FALSE, "GetFileTime() failed\n");
     CloseHandle(hFile);
 
+    ros_skip_flaky
     ok(RtlCompareMemory(&FileTime, &File1Time, sizeof(FILETIME)) == sizeof(FILETIME), "Tunnel cache failed\n");
 
     DeleteFile("file2");
index ec6c56d..bdbfc3f 100644 (file)
@@ -119,6 +119,7 @@ Test_ProcessTimes(void)
                                        sizeof(KERNEL_USER_TIMES),
                                        NULL);
     ok_hex(Status, STATUS_SUCCESS);
+    ros_skip_flaky
     ok(Times1.CreateTime.QuadPart < TestStartTime.QuadPart,
        "CreateTime is %I64u, expected < %I64u\n", Times1.CreateTime.QuadPart, TestStartTime.QuadPart);
     ok(Times1.CreateTime.QuadPart > TestStartTime.QuadPart - 100000000LL,
@@ -126,6 +127,7 @@ Test_ProcessTimes(void)
     ok(Times1.ExitTime.QuadPart == 0,
        "ExitTime is %I64u, expected 0\n", Times1.ExitTime.QuadPart);
     ok(Times1.KernelTime.QuadPart != 0, "KernelTime is 0\n");
+    ros_skip_flaky
     ok(Times1.UserTime.QuadPart != 0, "UserTime is 0\n");
 
     /* Do some busy waiting to increase UserTime */
@@ -162,9 +164,11 @@ Test_ProcessTimes(void)
     /* Time values must have increased */
     ok(Times2.KernelTime.QuadPart > Times1.KernelTime.QuadPart,
        "KernelTime values inconsistent. Expected %I64u > %I64u\n", Times2.KernelTime.QuadPart, Times1.KernelTime.QuadPart);
+    ros_skip_flaky
     ok(Times2.UserTime.QuadPart > Times1.UserTime.QuadPart,
        "UserTime values inconsistent. Expected %I64u > %I64u\n", Times2.UserTime.QuadPart, Times1.UserTime.QuadPart);
     /* They can't have increased by more than wall clock time difference (we only have one thread) */
+    ros_skip_flaky
     ok(Times2.KernelTime.QuadPart - Times1.KernelTime.QuadPart < Time2.QuadPart - Time1.QuadPart,
        "KernelTime values inconsistent. Expected %I64u - %I64u < %I64u\n",
        Times2.KernelTime.QuadPart, Times1.KernelTime.QuadPart, Time2.QuadPart - Time1.QuadPart);
index 8cd2b38..50ed0ea 100644 (file)
@@ -19,6 +19,7 @@ WndProc(
     _In_ WPARAM wParam,
     _In_ LPARAM lParam)
 {
+    disable_success_count
     ok(GetCurrentThreadId() == dwThreadId, "Thread 0x%lx instead of 0x%lx\n", GetCurrentThreadId(), dwThreadId);
     if (message == WM_PAINT)
     {
index 3d656fd..838dc5e 100644 (file)
@@ -158,6 +158,7 @@ START_TEST(SetProp)
     /* In particular we shouldn't see these from WM_SETICON */
     SysICAtom = RegisterWindowMessageW(L"SysIC");
     Prop = GetPropW(hWnd, (PCWSTR)MAKEINTATOM(SysICAtom));
+    ros_skip_flaky
     ok(Prop == NULL, "SysIC prop (0x%04x) is %p\n", SysICAtom, Prop);
 
     SysICSAtom = RegisterWindowMessageW(L"SysICS");
index 2409bd3..88c827c 100644 (file)
@@ -5586,8 +5586,8 @@ static void test_SetDIBitsToDevice_RLE8(void)
     for (i = 0; i < 24; i++) ok( dib_bits[i] == 0xaaaaaaaa, "%d: got %08x\n", i, dib_bits[i] );
     for (i = 24; i < 64; i++)
         if (i == 52) ok( dib_bits[i] == 0x00808080, "%d: got %08x\n", i, dib_bits[i] );
-        else if (i & 4) ok( dib_bits[i] == 0xaaaaaaaa, "%d: got %08x\n", i, dib_bits[i] );
-        else ok( dib_bits[i] == bottom_up[i - 20], "%d: got %08x\n", i, dib_bits[i] );
+        else if (i & 4) ros_skip_flaky ok( dib_bits[i] == 0xaaaaaaaa, "%d: got %08x\n", i, dib_bits[i] );
+        else ros_skip_flaky ok(dib_bits[i] == bottom_up[i - 20], "%d: got %08x\n", i, dib_bits[i]);
     memset( dib_bits, 0xaa, 64 * 4 );
 
     /* top-down compressed dibs are invalid */
@@ -5653,8 +5653,8 @@ static void test_SetDIBitsToDevice_RLE8(void)
     ok( ret == 37, "got %d\n", ret );
     for (i = 0; i < 40; i++)
         if (i == 12) ok( dib_bits[i] == 0x00808080, "%d: got %08x\n", i, dib_bits[i] );
-        else if (i & 4) ok( dib_bits[i] == 0xaaaaaaaa, "%d: got %08x\n", i, dib_bits[i] );
-        else ok( dib_bits[i] == top_down[i + 28], "%d: got %08x\n", i, dib_bits[i] );
+        else if (i & 4) ros_skip_flaky ok( dib_bits[i] == 0xaaaaaaaa, "%d: got %08x\n", i, dib_bits[i] );
+        else ros_skip_flaky ok( dib_bits[i] == top_down[i + 28], "%d: got %08x\n", i, dib_bits[i] );
     for (i = 40; i < 64; i++) ok( dib_bits[i] == 0xaaaaaaaa, "%d: got %08x\n", i, dib_bits[i] );
     memset( dib_bits, 0xaa, 64 * 4 );
 
index 48ef4f0..abceadd 100644 (file)
@@ -420,6 +420,7 @@ static void ok_path(HDC hdc, const char *path_name, const path_test_t *expected,
     size = GetPath(hdc, pnt, types, size);
     assert(size > 0);
 
+    ros_skip_flaky
     ok( size == expected_size, "%s: Path size %d does not match expected size %d\n",
         path_name, size, expected_size);
 
@@ -429,11 +430,13 @@ static void ok_path(HDC hdc, const char *path_name, const path_test_t *expected,
          * floating point to integer conversion */
         static const int fudge = 2;
 
+        ros_skip_flaky
         ok( types[idx] == expected[idx].type, "%s: Expected #%d: %s (%d,%d) but got %s (%d,%d)\n",
             path_name, idx, type_string[expected[idx].type], expected[idx].x, expected[idx].y,
             type_string[types[idx]], pnt[idx].x, pnt[idx].y);
 
         if (types[idx] == expected[idx].type)
+            ros_skip_flaky
             ok( (pnt[idx].x >= expected[idx].x - fudge && pnt[idx].x <= expected[idx].x + fudge) &&
                 (pnt[idx].y >= expected[idx].y - fudge && pnt[idx].y <= expected[idx].y + fudge),
                 "%s: Expected #%d: %s  position (%d,%d) but got (%d,%d)\n", path_name, idx,
index da595e9..2725824 100644 (file)
@@ -324,6 +324,7 @@ todo_wine
     ok( !ReadFile( hSlot, buffer, sizeof buffer, &count, NULL), "slot read\n");
     ok( GetLastError() == ERROR_SEM_TIMEOUT, "wrong error %u\n", GetLastError() );
     dwTimeout = GetTickCount() - dwTimeout;
+    ros_skip_flaky
     ok( dwTimeout >= 990, "timeout too short %u\n", dwTimeout );
     ok( CloseHandle( hSlot ), "closing the mailslot\n");
 
index 8e5c07f..b2f6734 100644 (file)
@@ -117,6 +117,7 @@ static BOOL RpcReadFile(HANDLE hFile, LPVOID buffer, DWORD bytesToRead, LPDWORD
 static void _test_not_signaled(unsigned line, HANDLE handle)
 {
     DWORD res = WaitForSingleObject(handle, 0);
+    disable_success_count
     ok_(__FILE__,line)(res == WAIT_TIMEOUT, "WaitForSingleObject returned %u (%u)\n", res, GetLastError());
 }
 
@@ -2784,7 +2785,9 @@ static void _overlapped_write_async(unsigned line, HANDLE writer, void *buf, DWO
     memset(overlapped, 0, sizeof(*overlapped));
     overlapped->hEvent = CreateEventW(NULL, TRUE, FALSE, NULL);
     res = WriteFile(writer, buf, size, &written_bytes, overlapped);
+    disable_success_count
     ok_(__FILE__,line)(!res && GetLastError() == ERROR_IO_PENDING, "WriteFile returned %x(%u)\n", res, GetLastError());
+    disable_success_count
     ok_(__FILE__,line)(!written_bytes, "written_bytes = %u\n", written_bytes);
 
     _test_not_signaled(line, overlapped->hEvent);
index 0c973ad..b0bf22a 100644 (file)
@@ -2572,7 +2572,7 @@ static void test_TerminateJobObject(void)
 
     ret = GetExitCodeProcess(pi.hProcess, &dwret);
     ok(ret, "GetExitCodeProcess error %u\n", GetLastError());
-    ok(dwret == 123 || broken(dwret == 0) /* randomly fails on Win 2000 / XP */,
+    ok(dwret == 123 || broken(dwret == 0) || broken(dwret == 259) /* randomly fails on Win 2000 / XP */,
        "wrong exitcode %u\n", dwret);
 
     CloseHandle(pi.hProcess);
@@ -3419,7 +3419,9 @@ static void test_SuspendProcessState(void)
 #endif
 
     ret = ReadProcessMemory( pi.hProcess, peb_ptr, &child_peb, sizeof(child_peb), NULL );
+    ros_skip_flaky
     ok( ret, "Failed to read PEB (%u)\n", GetLastError() );
+    ros_skip_flaky
     ok( child_peb.ImageBaseAddress == exe_base, "wrong base %p/%p\n",
         child_peb.ImageBaseAddress, exe_base );
     ok( entry_ptr == (char *)exe_base + nt_header.OptionalHeader.AddressOfEntryPoint,
index 0de706b..fced98b 100644 (file)
@@ -778,6 +778,7 @@ static void test_iocp_callback(void)
 static void CALLBACK timer_queue_cb1(PVOID p, BOOLEAN timedOut)
 {
     int *pn = p;
+    disable_success_count
     ok(timedOut, "Timer callbacks should always time out\n");
     ++*pn;
 }
@@ -2571,12 +2572,14 @@ static DWORD WINAPI apc_deadlock_thread(void *param)
         size = 0x1000;
         status = pNtAllocateVirtualMemory(pi->hProcess, &base, 0, &size,
                                           MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
+        disable_success_count
         ok(!status, "expected STATUS_SUCCESS, got %08x\n", status);
         ok(base != NULL, "expected base != NULL, got %p\n", base);
         SetEvent(info->event);
 
         size = 0;
         status = pNtFreeVirtualMemory(pi->hProcess, &base, &size, MEM_RELEASE);
+        disable_success_count
         ok(!status, "expected STATUS_SUCCESS, got %08x\n", status);
         SetEvent(info->event);
     }
@@ -2613,6 +2616,7 @@ static void test_apc_deadlock(void)
     result = WaitForSingleObject(event, 1000);
     ok(result == WAIT_OBJECT_0, "expected WAIT_OBJECT_0, got %u\n", result);
 
+    disable_success_count
     for (i = 0; i < 1000; i++)
     {
         result = SuspendThread(pi.hThread);
index 8a4bd17..8706e2b 100644 (file)
@@ -231,9 +231,11 @@ static HRESULT WINAPI xmlhttprequest_onreadystatechange(IDispatchEx *iface, DISP
     LONG val;
     HRESULT hres;
 
+    if (!expect_xmlhttprequest_onreadystatechange_loading)
     test_event_args(&DIID_DispHTMLXMLHttpRequest, id, wFlags, pdp, pvarRes, pei, pspCaller);
 
     hres = IHTMLXMLHttpRequest_get_readyState(xhr, &val);
+    disable_success_count
     ok(hres == S_OK, "get_readyState failed: %08x\n", hres);
     readystatechange_cnt++;
 
@@ -246,6 +248,7 @@ static HRESULT WINAPI xmlhttprequest_onreadystatechange(IDispatchEx *iface, DISP
             break;
         case 3:
             loading_cnt++;
+            disable_success_count
             CHECK_EXPECT2(xmlhttprequest_onreadystatechange_loading);
             break;
         case 4:
index 4b545f2..fcb7d66 100644 (file)
@@ -13505,6 +13505,7 @@ static void test_MsiEnumProducts(void)
     ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %u\n", r);
     ok(found1, "product1 not found\n");
     ok(found2, "product2 not found\n");
+    ros_skip_flaky
     ok(found3, "product3 not found\n");
 
     delete_key(key1, "", access & KEY_WOW64_64KEY);
@@ -13693,18 +13694,25 @@ static void test_MsiEnumProductsEx(void)
             ok( !sid[0], "got \"%s\"\n", sid );
             ok( !len, "unexpected length %u\n", len );
         }
-        if (!strcmp( product2, guid ))
+        else if (!strcmp( product2, guid ))
         {
             ok( context == MSIINSTALLCONTEXT_USERMANAGED, "got %u\n", context );
             ok( sid[0], "empty sid\n" );
             ok( len == strlen(sid), "unexpected length %u\n", len );
         }
-        if (!strcmp( product3, guid ))
+        else if (!strcmp( product3, guid ))
         {
             ok( context == MSIINSTALLCONTEXT_USERUNMANAGED, "got %u\n", context );
             ok( sid[0], "empty sid\n" );
             ok( len == strlen(sid), "unexpected length %u\n", len );
         }
+        else
+        {
+            trace("Unexpected guid: %s (have %s | %s | %s)\n", guid, product1, product2, product3);
+            ok(context != MSIINSTALLCONTEXT_NONE, "got %u\n", context);
+            ok(sid[0], "empty sid\n");
+            ok(len == strlen(sid), "unexpected length %u\n", len);
+        }
         index++;
         guid[0] = 0;
         context = 0xdeadbeef;
index 9fd83dd..fbd0f8e 100644 (file)
@@ -8027,7 +8027,7 @@ static void test_get_ownerDocument(void)
     IXMLDOMDocument_Release(doc2);
     IXMLDOMDocument_Release(doc3);
     IXMLDOMDocument2_Release(doc);
-    IXMLDOMDocument2_Release(doc_owner);
+    //IXMLDOMDocument2_Release(doc_owner); FIXME: double-free!
     free_bstrs();
 }
 
index 7d3c89a..d5a197b 100644 (file)
@@ -782,6 +782,7 @@ static DWORD bpx_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_RECORD *
         ok( context->Eip == (DWORD)code_mem, "eip is wrong:  %x instead of %x\n",
                                              context->Eip, (DWORD)code_mem);
         ok( (context->Dr6 & 0xf) == 1, "B0 flag is not set in Dr6\n");
+        ros_skip_flaky
         ok( !(context->Dr6 & 0x4000), "BS flag is set in Dr6\n");
         context->Dr0 = context->Dr0 + 1;  /* set hw bp again on next instruction */
         context->EFlags |= 0x100;       /* enable single stepping */
index e641a8d..a1a131e 100644 (file)
@@ -353,6 +353,7 @@ static void test_query_process(void)
 
         last_pid = (DWORD_PTR)spi->UniqueProcessId;
 
+        disable_success_count
         ok( spi->dwThreadCount > 0, "Expected some threads for this process, got 0\n");
 
         /* Loop through the threads, skip NT4 for now */
@@ -363,6 +364,7 @@ static void test_query_process(void)
             for ( j = 0; j < spi->dwThreadCount; j++) 
             {
                 k++;
+                disable_success_count
                 ok ( spi->ti[j].ClientId.UniqueProcess == spi->UniqueProcessId,
                      "The owning pid of the thread (%p) doesn't equal the pid (%p) of the process\n",
                      spi->ti[j].ClientId.UniqueProcess, spi->UniqueProcessId);
@@ -1691,12 +1693,14 @@ static void test_query_process_debug_flags(int argc, char **argv)
             for (;;)
             {
                 ret = WaitForDebugEvent(&ev, 1000);
+                disable_success_count
                 ok(ret, "WaitForDebugEvent failed, last error %#x.\n", GetLastError());
                 if (!ret) break;
 
                 if (ev.dwDebugEventCode == LOAD_DLL_DEBUG_EVENT) break;
 
                 ret = ContinueDebugEvent(ev.dwProcessId, ev.dwThreadId, DBG_CONTINUE);
+                disable_success_count
                 ok(ret, "ContinueDebugEvent failed, last error %#x.\n", GetLastError());
                 if (!ret) break;
             }
@@ -1733,6 +1737,7 @@ static void test_query_process_debug_flags(int argc, char **argv)
         for (j = 0; j < 100; j++)
         {
             ret = WaitForDebugEvent(&ev, 1000);
+            disable_success_count
             ok(ret || broken(GetLastError() == ERROR_SEM_TIMEOUT),
                 "WaitForDebugEvent failed, last error %#x.\n", GetLastError());
             if (!ret) break;
@@ -1740,6 +1745,7 @@ static void test_query_process_debug_flags(int argc, char **argv)
             if (ev.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT) break;
 
             ret = ContinueDebugEvent(ev.dwProcessId, ev.dwThreadId, DBG_CONTINUE);
+            disable_success_count
             ok(ret, "ContinueDebugEvent failed, last error %#x.\n", GetLastError());
             if (!ret) break;
         }
@@ -2248,12 +2254,12 @@ START_TEST(info)
     char **argv;
     int argc;
 
-    if(!InitFunctionPtrs())
-        return;
-
     argc = winetest_get_mainargs(&argv);
     if (argc >= 3) return; /* Child */
 
+    if (!InitFunctionPtrs())
+        return;
+
     /* NtQuerySystemInformation */
 
     /* 0x0 SystemBasicInformation */
index 41303b7..f10ed52 100644 (file)
@@ -123,6 +123,7 @@ static void test_NtSuspendProcess(char *process_name)
     ret = WaitForSingleObject(event, 200);
     ok(ret == WAIT_TIMEOUT, "Expected timeout, got: %d\n", ret);
 
+    disable_success_count
     for (;;)
     {
         ret = WaitForDebugEvent(&ev, INFINITE);
@@ -158,6 +159,7 @@ static void test_NtSuspendProcess(char *process_name)
     ok(ret, "ContinueDebugEvent failed, last error %#x.\n", GetLastError());
 
     ret = WaitForSingleObject(event, 200);
+    ros_skip_flaky
     ok(ret == WAIT_OBJECT_0, "Event was not signaled: %d\n", ret);
 
     TerminateProcess(info.hProcess, 0);
index 49faabd..435ef80 100644 (file)
@@ -841,6 +841,7 @@ static DWORD WINAPI MessageFilter_MessagePending(
   DWORD dwPendingType)
 {
     trace("MessagePending\n");
+    ros_skip_flaky
     todo_wine ok(0, "unexpected call\n");
     return PENDINGMSG_WAITNOPROCESS;
 }
index 6d8185a..2bee0a3 100644 (file)
@@ -359,6 +359,7 @@ static void test_CompleteLocal(void)
     hres = IBackgroundCopyJob_Resume(test_job);
     ok(hres == S_OK, "IBackgroundCopyJob_Resume\n");
 
+    disable_success_count
     for (i = 0; i < timeout_sec; ++i)
     {
         hres = IBackgroundCopyJob_GetState(test_job, &state);
@@ -428,6 +429,7 @@ static void test_CompleteLocalURL(void)
     hres = IBackgroundCopyJob_Resume(test_job);
     ok(hres == S_OK, "IBackgroundCopyJob_Resume\n");
 
+    disable_success_count
     for (i = 0; i < timeout_sec; ++i)
     {
         hres = IBackgroundCopyJob_GetState(test_job, &state);
@@ -570,6 +572,7 @@ static void test_HttpOptions(void)
     hr = IBackgroundCopyJob_Resume(test_job);
     ok(hr == S_OK, "got 0x%08x\n", hr);
 
+    disable_success_count
     for (i = 0; i < timeout; i++)
     {
         hr = IBackgroundCopyJob_GetState(test_job, &state);
index 613d98d..f5fe646 100644 (file)
@@ -39,6 +39,7 @@ static BOOL enum_find_filter(const WCHAR *wszFilterName, IEnumMoniker *pEnum)
     HRESULT hr;
     static const WCHAR wszFriendlyName[] = {'F','r','i','e','n','d','l','y','N','a','m','e',0};
 
+    disable_success_count
     while(!found && IEnumMoniker_Next(pEnum, 1, &pMoniker, &nb) == S_OK)
     {
         IPropertyBag * pPropBagCat = NULL;
index 4721675..f72cd90 100644 (file)
@@ -86,6 +86,7 @@ static void test_IReferenceClock_methods(const char * clockdesc, IReferenceClock
     /* FIXME: How much deviation should be allowed after a sleep? */
     /* 0.3% is common, and 0.4% is sometimes observed. */
     diff = time2 - time1;
+    ros_skip_flaky
     ok (9940000 <= diff && diff <= 10240000, "%s - Expected difference around 10000000, got %u\n", clockdesc, diff);
 
 }
index 28f9849..c2b30c0 100644 (file)
@@ -657,6 +657,7 @@ static void test_EM_POSFROMCHAR(void)
     }
     else
     {
+      ros_skip_flaky
       ok(HIWORD(result) == i * height, "EM_POSFROMCHAR reports y=%d, expected %d\n", HIWORD(result), i * height);
       ok(LOWORD(result) == xpos, "EM_POSFROMCHAR reports x=%d, expected 1\n", LOWORD(result));
     }
index 592ee9d..0525287 100644 (file)
@@ -1553,7 +1553,9 @@ pointer_tests(void)
       names = NULL;
       get_names(&n, &names);
       ok(n == 2, "expected 2, got %d\n", n);
+      ros_skip_flaky
       ok(!strcmp(names[0], "Hello"), "expected Hello, got %s\n", names[0]);
+      ros_skip_flaky
       ok(!strcmp(names[1], "World!"), "expected World!, got %s\n", names[1]);
       MIDL_user_free(names[0]);
       MIDL_user_free(names[1]);
@@ -1563,7 +1565,9 @@ pointer_tests(void)
       namesw = NULL;
       get_namesw(&n, &namesw);
       ok(n == 2, "expected 2, got %d\n", n);
+      ros_skip_flaky
       ok(!lstrcmpW(namesw[0], helloW), "expected Hello, got %s\n", wine_dbgstr_w(namesw[0]));
+      ros_skip_flaky
       ok(!lstrcmpW(namesw[1], worldW), "expected World!, got %s\n", wine_dbgstr_w(namesw[1]));
       MIDL_user_free(namesw[0]);
       MIDL_user_free(namesw[1]);
@@ -1573,6 +1577,7 @@ pointer_tests(void)
 
   if (!is_interp) { /* broken in widl */
   pa2 = a;
+  ros_skip_flaky
   ok(sum_pcarr2(4, &pa2) == 10, "RPC sum_pcarr2\n");
   }
 
index 8d81151..3f83b5a 100644 (file)
@@ -1720,6 +1720,7 @@ static void test_listbox_dlgdir(void)
         memset(tempBuffer, 0, MAX_PATH);
         driveletter = '\0';
         SendMessageA(g_listBox, LB_GETTEXT, i, (LPARAM)itemBuffer);
+        if (!strstr(itemBuffer, ".exe")) continue; // skip downloaded/generated files from other tests
         res = SendMessageA(g_listBox, LB_SETCURSEL, i, 0);
         ok (res == i, "SendMessageA(LB_SETCURSEL, %d) failed\n", i);
         if (sscanf(itemBuffer, "[-%c-]", &driveletter) == 1) {
index e66d0dc..7df4ba0 100644 (file)
@@ -10289,6 +10289,7 @@ static void test_timers(void)
     start = GetTickCount();
     while (GetTickCount()-start < 1001 && GetMessageA(&msg, info.hWnd, 0, 0))
         DispatchMessageA(&msg);
+ros_skip_flaky
 todo_wine
     ok(abs(count-TIMER_COUNT_EXPECTED) < TIMER_COUNT_TOLERANCE /* xp */
        || broken(abs(count-64) < TIMER_COUNT_TOLERANCE) /* most common */
@@ -16902,6 +16903,7 @@ static void test_hotkey(void)
     keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
     while (PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE))
     {
+        ros_skip_flaky
         ok(msg.hwnd != NULL, "unexpected thread message %x\n", msg.message);
         DispatchMessageA(&msg);
     }
index 74fb112..4e98d2a 100644 (file)
@@ -149,6 +149,7 @@ static void check_wnd_state_(const char *file, int line,
     /* foreground can be moved to a different app pretty much at any time */
     if (foreground && GetForegroundWindow() &&
         GetWindowThreadProcessId(GetForegroundWindow(), NULL) == GetCurrentThreadId())
+        disable_success_count
         ok_(file, line)(foreground == GetForegroundWindow(), "GetForegroundWindow() = %p\n", GetForegroundWindow());
     ok_(file, line)(focus == GetFocus(), "GetFocus() = %p\n", GetFocus());
     ok_(file, line)(capture == GetCapture(), "GetCapture() = %p\n", GetCapture());
@@ -164,6 +165,7 @@ static void check_active_state_(const char *file, int line,
     /* foreground can be moved to a different app pretty much at any time */
     if (foreground && GetForegroundWindow() &&
         GetWindowThreadProcessId(GetForegroundWindow(), NULL) == GetCurrentThreadId())
+        disable_success_count
         ok_(file, line)(foreground == GetForegroundWindow(), "GetForegroundWindow() = %p\n", GetForegroundWindow());
     ok_(file, line)(focus == GetFocus(), "GetFocus() = %p\n", GetFocus());
 }
@@ -774,6 +776,7 @@ static LRESULT WINAPI main_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LPAR
            break;
        }
        case WM_WINDOWPOSCHANGED:
+    disable_success_count
        {
             RECT rc1, rc2;
            WINDOWPOS *winpos = (WINDOWPOS *)lparam;
@@ -966,6 +969,8 @@ static void verify_window_info(const char *hook, HWND hwnd, const WINDOWINFO *in
     if (GetForegroundWindow())
         ok(info->dwWindowStatus == status, "wrong dwWindowStatus: %04x != %04x active %p fg %p in hook %s\n",
            info->dwWindowStatus, status, GetActiveWindow(), GetForegroundWindow(), hook);
+    else
+        ok(1, "Just counting");
 
     /* win2k and XP return broken border info in GetWindowInfo most of
      * the time, so there is no point in testing it.
@@ -981,6 +986,7 @@ if (0)
 }
     ok(info->atomWindowType == GetClassLongA(hwnd, GCW_ATOM), "wrong atomWindowType for %p in hook %s\n",
        hwnd, hook);
+    todo_ros
     ok(info->wCreatorVersion == 0x0400 /* NT4, Win2000, XP, Win2003 */ ||
        info->wCreatorVersion == 0x0500 /* Vista */,
        "wrong wCreatorVersion %04x for %p in hook %s\n", info->wCreatorVersion, hwnd, hook);
@@ -3091,8 +3097,10 @@ static void test_SetActiveWindow(HWND hwnd)
     ok(hwnd2 == hwnd, "SetActiveWindow returned %p instead of %p\n", hwnd2, hwnd);
     if (!GetActiveWindow())  /* doesn't always work on vista */
     {
+        ros_skip_flaky
         check_wnd_state(0, 0, 0, 0);
         hwnd2 = SetActiveWindow(hwnd);
+        ros_skip_flaky
         ok(hwnd2 == 0, "SetActiveWindow returned %p instead of 0\n", hwnd2);
     }
     check_wnd_state(hwnd, hwnd, hwnd, 0);
index 9e870ee..3a74ca3 100644 (file)
@@ -1713,6 +1713,8 @@ static void test_ScriptShapeOpenType(HDC hdc)
         DeleteObject(hfont);
     }
 
+    hfont = NULL;
+    ros_skip_flaky
     test_valid = find_font_for_range(hdc, "Estrangelo Edessa", 71, test_syriac[0], &hfont, &hfont_orig, &fingerprint_estrangelo);
     if (hfont != NULL)
     {
index d2118fa..baf20ff 100644 (file)
@@ -74,10 +74,12 @@ static void test_connect(HINTERNET hInternet)
     hFtp = InternetConnectA(hInternet, "ftp.winehq.org", INTERNET_DEFAULT_FTP_PORT, "anonymous", NULL, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
     if (hFtp)  /* some servers accept an empty password */
     {
+        ros_skip_flaky
         ok ( GetLastError() == ERROR_SUCCESS, "ERROR_SUCCESS, got %d\n", GetLastError());
         InternetCloseHandle(hFtp);
     }
     else
+        ros_skip_flaky
         ok ( GetLastError() == ERROR_INTERNET_LOGIN_FAILURE,
              "Expected ERROR_INTERNET_LOGIN_FAILURE, got %d\n", GetLastError());
 
@@ -109,7 +111,9 @@ static void test_connect(HINTERNET hInternet)
         SetLastError(0xdeadbeef);
         hFtp = InternetConnectA(hInternet, "ftp.winehq.org", INTERNET_DEFAULT_FTP_PORT, "anonymous", "IEUser@", INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
     }
+    ros_skip_flaky
     ok ( hFtp != NULL, "InternetConnect failed : %d\n", GetLastError());
+    ros_skip_flaky
     ok ( GetLastError() == ERROR_SUCCESS,
         "ERROR_SUCCESS, got %d\n", GetLastError());
     InternetCloseHandle(hFtp);
@@ -119,11 +123,13 @@ static void test_connect(HINTERNET hInternet)
             INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
     if (!hFtp)
     {
+        ros_skip_flaky
         ok(GetLastError() == ERROR_INTERNET_LOGIN_FAILURE,
                 "Expected ERROR_INTERNET_LOGIN_FAILURE, got %d\n", GetLastError());
     }
     else
     {
+        ros_skip_flaky
         ok(GetLastError() == ERROR_SUCCESS,
                 "Expected ERROR_SUCCESS, got %d\n", GetLastError());
         InternetCloseHandle(hFtp);
index 1f61b92..1c5cbfe 100644 (file)
@@ -351,6 +351,7 @@ static VOID WINAPI callback(
      DWORD dwStatusInformationLength
 )
 {
+    ros_skip_flaky
     CHECK_EXPECT(dwInternetStatus);
     switch (dwInternetStatus)
     {
@@ -4800,9 +4801,11 @@ static void test_async_read(int port)
         ret = InternetReadFileExA( req, &ib, 0, 0xdeadbeef );
         if (!count) /* the first part should arrive immediately */
             ok( ret, "InternetReadFileExA failed %u\n", GetLastError() );
+        ros_skip_flaky
         if (!ret)
         {
             ok( GetLastError() == ERROR_IO_PENDING, "expected ERROR_IO_PENDING, got %u\n", GetLastError() );
+            ros_skip_flaky
             CHECK_NOTIFIED( INTERNET_STATUS_RECEIVING_RESPONSE );
             SET_EXPECT( INTERNET_STATUS_REQUEST_COMPLETE );
             if (!pending_reads++)
@@ -4891,6 +4894,7 @@ static void test_async_read(int port)
         {
             ok( GetLastError() == ERROR_IO_PENDING, "expected ERROR_IO_PENDING, got %u\n", GetLastError() );
             ok( bytes == 0, "expected 0, got %u\n", bytes );
+            ros_skip_flaky
             CHECK_NOTIFIED( INTERNET_STATUS_RECEIVING_RESPONSE );
             SET_EXPECT( INTERNET_STATUS_REQUEST_COMPLETE );
             if (!pending_reads++)
@@ -4902,9 +4906,13 @@ static void test_async_read(int port)
             res = WaitForSingleObject( complete_event, INFINITE );
             ok( res == WAIT_OBJECT_0, "expected WAIT_OBJECT_0, got %u\n", res );
             ok( req_error == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %u\n", req_error );
+            ros_skip_flaky {
             todo_wine_if( pending_reads > 1 )
             ok( bytes != 0, "expected bytes != 0\n" );
+            }
+            ros_skip_flaky
             CHECK_NOTIFIED( INTERNET_STATUS_RESPONSE_RECEIVED );
+            ros_skip_flaky
             CHECK_NOTIFIED( INTERNET_STATUS_REQUEST_COMPLETE );
         }
 
@@ -4913,6 +4921,7 @@ static void test_async_read(int port)
         if (!bytes) break;
     }
 
+    ros_skip_flaky
     ok( pending_reads == 1, "expected 1 pending read, got %u\n", pending_reads );
     ok( !strcmp(buffer, page1), "unexpected buffer content\n" );
     close_async_handle( ses, 2 );
@@ -6160,6 +6169,7 @@ static void test_security_flags(void)
     }
     HeapFree(GetProcessHeap(), 0, cert);
 
+    ros_skip_flaky
     CHECK_NOTIFIED2(INTERNET_STATUS_CONNECTING_TO_SERVER, 2);
     CHECK_NOTIFIED2(INTERNET_STATUS_CONNECTED_TO_SERVER, 2);
     CHECK_NOTIFIED2(INTERNET_STATUS_CLOSING_CONNECTION, 2);
index 0b4c540..52bad3a 100644 (file)
@@ -53,6 +53,8 @@ extern "C" {
 /* debug level */
 extern int winetest_debug;
 
+extern int report_success;
+
 /* running in interactive mode? */
 extern int winetest_interactive;
 
@@ -65,8 +67,13 @@ extern int winetest_loop_todo(void);
 extern void winetest_end_todo(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 );
@@ -121,6 +128,7 @@ extern void __winetest_cdecl winetest_ok( int condition, const char *msg, ... )
 extern void __winetest_cdecl winetest_skip( const char *msg, ... ) __attribute__((format (printf,1,2)));
 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)));
 
 #else /* __GNUC__ */
 # define WINETEST_PRINTF_ATTR(fmt,args)
@@ -128,6 +136,7 @@ extern void __winetest_cdecl winetest_ok( int condition, const char *msg, ... );
 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, ...);
 
 #endif /* __GNUC__ */
 
@@ -155,6 +164,14 @@ extern void __winetest_cdecl winetest_trace( 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 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 ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
 
 #ifdef NONAMELESSUNION
@@ -241,7 +258,7 @@ int winetest_interactive = 0;
 const char *winetest_platform = "windows";
 
 /* report successful tests (BOOL) */
-static int report_success = 0;
+int report_success = 0;
 
 /* passing arguments around */
 static int winetest_argc;
@@ -261,6 +278,7 @@ typedef struct
     const char* current_file;        /* file of current check */
     int current_line;                /* line of current check */
     unsigned int todo_level;         /* current todo nesting level */
+    unsigned int nocount_level;
     int todo_do_loop;
     char *str_pos;                   /* position in debug buffer */
     char strings[2000];              /* buffer for debug strings */
@@ -368,6 +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)
             InterlockedIncrement(&todo_successes);
             return 1;
         }
@@ -384,9 +403,10 @@ int winetest_vok( int condition, const char *msg, __winetest_va_list args )
         }
         else
         {
-            if (report_success)
+            if (report_success && data->nocount_level == 0)
                 fprintf( stdout, __winetest_file_line_prefix ": Test succeeded\n",
                          data->current_file, data->current_line);
+            if (data->nocount_level == 0)
             InterlockedIncrement(&successes);
             return 1;
         }
@@ -416,6 +436,17 @@ void __winetest_cdecl winetest_trace( const char *msg, ... )
     }
 }
 
+void __winetest_cdecl winetest_print(const char* msg, ...)
+{
+    __winetest_va_list valist;
+    tls_data* data = get_tls_data();
+
+    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);
+}
+
 void winetest_vskip( const char *msg, __winetest_va_list args )
 {
     tls_data* data=get_tls_data();
@@ -480,6 +511,11 @@ LONG winetest_get_failures(void)
     return failures;
 }
 
+LONG winetest_get_successes(void)
+{
+    return successes;
+}
+
 void winetest_add_failures( LONG new_failures )
 {
     while (new_failures-- > 0)
@@ -512,6 +548,28 @@ 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;