Author: akhaldi
Date: Mon Mar 9 19:58:31 2015
New Revision: 66629
URL:
http://svn.reactos.org/svn/reactos?rev=66629&view=rev
Log:
[OLE32_WINETEST] Sync with Wine Staging 1.7.37. CORE-9246
Modified:
trunk/rostests/winetests/ole32/compobj.c
trunk/rostests/winetests/ole32/moniker.c
trunk/rostests/winetests/ole32/storage32.c
trunk/rostests/winetests/ole32/usrmarshal.c
Modified: trunk/rostests/winetests/ole32/compobj.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/compobj.c…
==============================================================================
--- trunk/rostests/winetests/ole32/compobj.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/ole32/compobj.c [iso-8859-1] Mon Mar 9 19:58:31 2015
@@ -38,6 +38,7 @@
//#include "shlguid.h"
#include <ole2.h>
#include <urlmon.h> /* for CLSID_FileProtocol */
+#include <dde.h>
#include <ctxtcall.h>
@@ -390,6 +391,7 @@
clsid = CLSID_NULL;
hr = CLSIDFromProgID(progidW, &clsid);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
/* it returns generated CLSID here */
ok(!IsEqualCLSID(&clsid, &CLSID_non_existent) &&
!IsEqualCLSID(&clsid, &CLSID_NULL),
"got wrong clsid %s\n", wine_dbgstr_guid(&clsid));
@@ -1166,6 +1168,7 @@
ok(!res, "RegCreateKeyEx returned %d\n", res);
res = RegCreateKeyExA(hkey, "ProxyStubClsid32",
0, NULL, 0, KEY_ALL_ACCESS | opposite, NULL,
&hkey_psclsid, NULL);
+ ok(!res, "RegCreateKeyEx returned %d\n", res);
res = RegSetValueExA(hkey_psclsid, NULL, 0, REG_SZ, (const BYTE *)clsidA,
strlen(clsidA)+1);
ok(!res, "RegSetValueEx returned %d\n", res);
RegCloseKey(hkey_psclsid);
@@ -1919,10 +1922,10 @@
ok(hr == S_OK, "Expected S_OK, got 0x%08x\n", hr);
todo_wine ok(ctx == (IObjContext *)token, "Expected interface pointers to be the
same\n");
- refs = IUnknown_AddRef((IUnknown *)ctx);
+ refs = IObjContext_AddRef(ctx);
todo_wine ok(refs == 3, "Expected 3, got %u\n", refs);
- refs = IUnknown_Release((IUnknown *)ctx);
+ refs = IObjContext_Release(ctx);
todo_wine ok(refs == 2, "Expected 2, got %u\n", refs);
refs = IUnknown_Release((IUnknown *)token);
@@ -1935,13 +1938,13 @@
ok(token, "Expected token != 0\n");
todo_wine ok(ctx == (IObjContext *)token, "Expected interface pointers to be the
same\n");
- refs = IUnknown_AddRef((IUnknown *)ctx);
+ refs = IObjContext_AddRef(ctx);
ok(refs == 2, "Expected 1, got %u\n", refs);
- refs = IUnknown_Release((IUnknown *)ctx);
+ refs = IObjContext_Release(ctx);
ok(refs == 1, "Expected 0, got %u\n", refs);
- refs = IUnknown_Release((IUnknown *)ctx);
+ refs = IObjContext_Release(ctx);
ok(refs == 0, "Expected 0, got %u\n", refs);
CoUninitialize();
@@ -2043,6 +2046,7 @@
/* Cleanup */
CoUninitialize();
OleUninitialize();
+ OleUninitialize();
}
static void test_OleRegGetMiscStatus(void)
@@ -2095,6 +2099,350 @@
hr = CoCreateGuid(NULL);
ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
+}
+
+static void CALLBACK apc_test_proc(ULONG_PTR param)
+{
+ /* nothing */
+}
+
+static DWORD CALLBACK release_semaphore_thread( LPVOID arg )
+{
+ HANDLE handle = arg;
+ if (WaitForSingleObject(handle, 200) == WAIT_TIMEOUT)
+ ReleaseSemaphore(handle, 1, NULL);
+ return 0;
+}
+
+static DWORD CALLBACK send_message_thread(LPVOID arg)
+{
+ HWND hWnd = arg;
+ Sleep(50);
+ SendMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ return 0;
+}
+
+static DWORD CALLBACK post_message_thread(LPVOID arg)
+{
+ HWND hWnd = arg;
+ Sleep(50);
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ return 0;
+}
+
+static void test_CoWaitForMultipleHandles(void)
+{
+ static const char cls_name[] = "cowait_test_class";
+ HANDLE handles[2], thread;
+ DWORD index, tid;
+ WNDCLASSEXA wc;
+ BOOL success;
+ HRESULT hr;
+ HWND hWnd;
+ MSG msg;
+
+ hr = pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
+ ok(hr == S_OK, "CoInitializeEx failed with error 0x%08x\n", hr);
+
+ memset(&wc, 0, sizeof(wc));
+ wc.cbSize = sizeof(wc);
+ wc.style = CS_VREDRAW | CS_HREDRAW;
+ wc.hInstance = GetModuleHandleA(0);
+ wc.hCursor = LoadCursorA(NULL, (LPCSTR)IDC_ARROW);
+ wc.hbrBackground = NULL;
+ wc.lpszClassName = cls_name;
+ wc.lpfnWndProc = DefWindowProcA;
+ success = RegisterClassExA(&wc) != 0;
+ ok(success, "RegisterClassExA failed %u\n", GetLastError());
+
+ hWnd = CreateWindowExA(0, cls_name, "Test", WS_TILEDWINDOW, 0, 0, 640, 480,
0, 0, 0, 0);
+ ok(hWnd != 0, "CreateWindowExA failed %u\n", GetLastError());
+ handles[0] = CreateSemaphoreA(NULL, 1, 1, NULL);
+ ok(handles[0] != 0, "CreateSemaphoreA failed %u\n", GetLastError());
+ handles[1] = CreateSemaphoreA(NULL, 1, 1, NULL);
+ ok(handles[1] != 0, "CreateSemaphoreA failed %u\n", GetLastError());
+
+ /* test without flags */
+
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ hr = CoWaitForMultipleHandles(0, 50, 0, handles, NULL);
+ ok(hr == E_INVALIDARG, "expected E_INVALIDARG, got 0x%08x\n", hr);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(success, "CoWaitForMultipleHandles unexpectedly pumped messages\n");
+
+ index = 0xdeadbeef;
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ hr = CoWaitForMultipleHandles(0, 50, 0, NULL, &index);
+ ok(hr == E_INVALIDARG, "expected E_INVALIDARG, got 0x%08x\n", hr);
+ ok(index == 0, "expected index 0, got %u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(success, "CoWaitForMultipleHandles unexpectedly pumped messages\n");
+
+ index = 0xdeadbeef;
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ hr = CoWaitForMultipleHandles(0, 50, 0, handles, &index);
+ ok(hr == RPC_E_NO_SYNC, "expected RPC_E_NO_SYNC, got 0x%08x\n", hr);
+ ok(index == 0, "expected index 0, got %u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(success, "CoWaitForMultipleHandles unexpectedly pumped messages\n");
+
+ index = 0xdeadbeef;
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ hr = CoWaitForMultipleHandles(0, 50, 1, handles, &index);
+ ok(hr == S_OK, "expected S_OK, got 0x%08x\n", hr);
+ ok(index == 0, "expected index 0, got %u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(success, "CoWaitForMultipleHandles unexpectedly pumped messages\n");
+
+ index = 0xdeadbeef;
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ hr = CoWaitForMultipleHandles(0, 50, 2, handles, &index);
+ ok(hr == S_OK, "expected S_OK, got 0x%08x\n", hr);
+ ok(index == 1, "expected index 1, got %u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(success, "CoWaitForMultipleHandles unexpectedly pumped messages\n");
+
+ index = 0xdeadbeef;
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ hr = CoWaitForMultipleHandles(0, 50, 2, handles, &index);
+ ok(hr == RPC_S_CALLPENDING, "expected RPC_S_CALLPENDING, got 0x%08x\n",
hr);
+ ok(index == 0 || broken(index == 0xdeadbeef) /* Win 8 */, "expected index 0, got
%u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(!success, "CoWaitForMultipleHandles didn't pump any messages\n");
+
+ /* test PostMessageA/SendMessageA from a different thread */
+
+ index = 0xdeadbeef;
+ thread = CreateThread(NULL, 0, post_message_thread, hWnd, 0, &tid);
+ ok(thread != NULL, "CreateThread failed, error %u\n", GetLastError());
+ hr = CoWaitForMultipleHandles(0, 100, 2, handles, &index);
+ ok(hr == RPC_S_CALLPENDING, "expected RPC_S_CALLPENDING, got 0x%08x\n",
hr);
+ ok(index == 0 || broken(index == 0xdeadbeef) /* Win 8 */, "expected index 0, got
%u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(!success, "CoWaitForMultipleHandles didn't pump any messages\n");
+ index = WaitForSingleObject(thread, 200);
+ ok(index == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
+ CloseHandle(thread);
+
+ index = 0xdeadbeef;
+ thread = CreateThread(NULL, 0, send_message_thread, hWnd, 0, &tid);
+ ok(thread != NULL, "CreateThread failed, error %u\n", GetLastError());
+ hr = CoWaitForMultipleHandles(0, 100, 2, handles, &index);
+ ok(hr == RPC_S_CALLPENDING, "expected RPC_S_CALLPENDING, got 0x%08x\n",
hr);
+ ok(index == 0 || broken(index == 0xdeadbeef) /* Win 8 */, "expected index 0, got
%u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(!success, "CoWaitForMultipleHandles didn't pump any messages\n");
+ index = WaitForSingleObject(thread, 200);
+ ok(index == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
+ CloseHandle(thread);
+
+ ReleaseSemaphore(handles[0], 1, NULL);
+ ReleaseSemaphore(handles[1], 1, NULL);
+
+ /* test with COWAIT_WAITALL */
+
+ index = 0xdeadbeef;
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ hr = CoWaitForMultipleHandles(COWAIT_WAITALL, 50, 2, handles, &index);
+ ok(hr == S_OK, "expected S_OK, got 0x%08x\n", hr);
+ ok(index == 0, "expected index 0, got %u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(success, "CoWaitForMultipleHandles unexpectedly pumped messages\n");
+
+ index = 0xdeadbeef;
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ hr = CoWaitForMultipleHandles(0, 50, 2, handles, &index);
+ ok(hr == RPC_S_CALLPENDING, "expected RPC_S_CALLPENDING, got 0x%08x\n",
hr);
+ ok(index == 0 || broken(index == 0xdeadbeef) /* Win 8 */, "expected index 0, got
%u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(!success, "CoWaitForMultipleHandles didn't pump any messages\n");
+
+ ReleaseSemaphore(handles[0], 1, NULL);
+ ReleaseSemaphore(handles[1], 1, NULL);
+
+ /* test with COWAIT_ALERTABLE */
+
+ index = 0xdeadbeef;
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ hr = CoWaitForMultipleHandles(COWAIT_ALERTABLE, 50, 1, handles, &index);
+ ok(hr == S_OK, "expected S_OK, got 0x%08x\n", hr);
+ ok(index == 0, "expected index 0, got %u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(success, "CoWaitForMultipleHandles unexpectedly pumped messages\n");
+
+ index = 0xdeadbeef;
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ hr = CoWaitForMultipleHandles(COWAIT_ALERTABLE, 50, 2, handles, &index);
+ ok(hr == S_OK, "expected S_OK, got 0x%08x\n", hr);
+ ok(index == 1, "expected index 1, got %u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(success, "CoWaitForMultipleHandles unexpectedly pumped messages\n");
+
+ index = 0xdeadbeef;
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ hr = CoWaitForMultipleHandles(COWAIT_ALERTABLE, 50, 2, handles, &index);
+ ok(hr == RPC_S_CALLPENDING, "expected RPC_S_CALLPENDING, got 0x%08x\n",
hr);
+ ok(index == 0 || broken(index == 0xdeadbeef) /* Win 8 */, "expected index 0, got
%u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(!success, "CoWaitForMultipleHandles didn't pump any messages\n");
+
+ index = 0xdeadbeef;
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ success = QueueUserAPC(apc_test_proc, GetCurrentThread(), 0);
+ ok(success, "QueueUserAPC failed %u\n", GetLastError());
+ hr = CoWaitForMultipleHandles(COWAIT_ALERTABLE, 50, 2, handles, &index);
+ ok(hr == S_OK, "expected S_OK, got 0x%08x\n", hr);
+ ok(index == WAIT_IO_COMPLETION, "expected index WAIT_IO_COMPLETION, got
%u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(success, "CoWaitForMultipleHandles unexpectedly pumped messages\n");
+
+ /* test with COWAIT_INPUTAVAILABLE (semaphores are still locked) */
+
+ index = 0xdeadbeef;
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_NOREMOVE);
+ ok(success, "PeekMessageA returned FALSE\n");
+ hr = CoWaitForMultipleHandles(0, 50, 2, handles, &index);
+ ok(hr == RPC_S_CALLPENDING, "expected RPC_S_CALLPENDING, got 0x%08x\n",
hr);
+ ok(index == 0 || broken(index == 0xdeadbeef) /* Win 8 */, "expected index 0, got
%u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(!success, "CoWaitForMultipleHandles didn't pump any messages\n");
+
+ index = 0xdeadbeef;
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_NOREMOVE);
+ ok(success, "PeekMessageA returned FALSE\n");
+ thread = CreateThread(NULL, 0, release_semaphore_thread, handles[1], 0, &tid);
+ ok(thread != NULL, "CreateThread failed, error %u\n", GetLastError());
+ hr = CoWaitForMultipleHandles(COWAIT_INPUTAVAILABLE, 50, 2, handles, &index);
+ ok(hr == RPC_S_CALLPENDING || broken(hr == E_INVALIDARG) || broken(hr == S_OK) /* Win
8 */,
+ "expected RPC_S_CALLPENDING, got 0x%08x\n", hr);
+ if (hr != S_OK) ReleaseSemaphore(handles[1], 1, NULL);
+ ok(index == 0 || broken(index == 1) /* Win 8 */, "expected index 0, got
%u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(!success || broken(success && hr == E_INVALIDARG),
+ "CoWaitForMultipleHandles didn't pump any messages\n");
+ index = WaitForSingleObject(thread, 200);
+ ok(index == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
+ CloseHandle(thread);
+
+ /* test behaviour of WM_QUIT (semaphores are still locked) */
+
+ PostMessageA(hWnd, WM_QUIT, 40, 0);
+ memset(&msg, 0, sizeof(msg));
+ success = PeekMessageA(&msg, hWnd, WM_QUIT, WM_QUIT, PM_REMOVE);
+ ok(success, "PeekMessageA failed, error %u\n", GetLastError());
+ ok(msg.message == WM_QUIT, "expected msg.message = WM_QUIT, got %u\n",
msg.message);
+ ok(msg.wParam == 40, "expected msg.wParam = 40, got %lu\n", msg.wParam);
+ success = PeekMessageA(&msg, hWnd, WM_QUIT, WM_QUIT, PM_REMOVE);
+ ok(!success, "PeekMessageA succeeded\n");
+
+ index = 0xdeadbeef;
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ PostMessageA(hWnd, WM_QUIT, 41, 0);
+ thread = CreateThread(NULL, 0, post_message_thread, hWnd, 0, &tid);
+ ok(thread != NULL, "CreateThread failed, error %u\n", GetLastError());
+ hr = CoWaitForMultipleHandles(0, 100, 2, handles, &index);
+ ok(hr == RPC_S_CALLPENDING, "expected RPC_S_CALLPENDING, got 0x%08x\n",
hr);
+ ok(index == 0 || broken(index == 0xdeadbeef) /* Win 8 */, "expected index 0, got
%u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ todo_wine
+ ok(success || broken(!success) /* Win 2000/XP/8 */, "PeekMessageA failed, error
%u\n", GetLastError());
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(!success, "PeekMessageA succeeded\n");
+ memset(&msg, 0, sizeof(msg));
+ success = PeekMessageA(&msg, hWnd, WM_QUIT, WM_QUIT, PM_REMOVE);
+ todo_wine
+ ok(!success || broken(success) /* Win 2000/XP/8 */, "PeekMessageA
succeeded\n");
+ if (success)
+ {
+ ok(msg.message == WM_QUIT, "expected msg.message = WM_QUIT, got %u\n",
msg.message);
+ ok(msg.wParam == 41, "expected msg.wParam = 41, got %lu\n",
msg.wParam);
+ }
+ index = WaitForSingleObject(thread, 200);
+ ok(index == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
+ CloseHandle(thread);
+
+ index = 0xdeadbeef;
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ PostMessageA(hWnd, WM_QUIT, 42, 0);
+ thread = CreateThread(NULL, 0, send_message_thread, hWnd, 0, &tid);
+ ok(thread != NULL, "CreateThread failed, error %u\n", GetLastError());
+ hr = CoWaitForMultipleHandles(0, 100, 2, handles, &index);
+ ok(hr == RPC_S_CALLPENDING, "expected RPC_S_CALLPENDING, got 0x%08x\n",
hr);
+ ok(index == 0 || broken(index == 0xdeadbeef) /* Win 8 */, "expected index 0, got
%u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(!success, "CoWaitForMultipleHandles didn't pump all WM_DDE_FIRST
messages\n");
+ memset(&msg, 0, sizeof(msg));
+ success = PeekMessageA(&msg, hWnd, WM_QUIT, WM_QUIT, PM_REMOVE);
+ ok(success, "PeekMessageA failed, error %u\n", GetLastError());
+ ok(msg.message == WM_QUIT, "expected msg.message = WM_QUIT, got %u\n",
msg.message);
+ ok(msg.wParam == 42, "expected msg.wParam = 42, got %lu\n", msg.wParam);
+ index = WaitForSingleObject(thread, 200);
+ ok(index == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
+ CloseHandle(thread);
+
+ PostQuitMessage(43);
+ memset(&msg, 0, sizeof(msg));
+ success = PeekMessageA(&msg, hWnd, WM_QUIT, WM_QUIT, PM_REMOVE);
+ ok(success || broken(!success) /* Win 8 */, "PeekMessageA failed, error
%u\n", GetLastError());
+ if (!success)
+ win_skip("PostQuitMessage didn't queue a WM_QUIT message, skipping
tests\n");
+ else
+ {
+ ok(msg.message == WM_QUIT, "expected msg.message = WM_QUIT, got %u\n",
msg.message);
+ ok(msg.wParam == 43, "expected msg.wParam = 43, got %lu\n",
msg.wParam);
+ success = PeekMessageA(&msg, hWnd, WM_QUIT, WM_QUIT, PM_REMOVE);
+ ok(!success, "PeekMessageA succeeded\n");
+
+ index = 0xdeadbeef;
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ PostQuitMessage(44);
+ thread = CreateThread(NULL, 0, post_message_thread, hWnd, 0, &tid);
+ ok(thread != NULL, "CreateThread failed, error %u\n", GetLastError());
+ hr = CoWaitForMultipleHandles(0, 100, 2, handles, &index);
+ ok(hr == RPC_S_CALLPENDING, "expected RPC_S_CALLPENDING, got 0x%08x\n",
hr);
+ ok(index == 0 || broken(index == 0xdeadbeef) /* Win 8 */, "expected index 0,
got %u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(success, "PeekMessageA failed, error %u\n", GetLastError());
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ todo_wine
+ ok(!success, "PeekMessageA succeeded\n");
+ success = PeekMessageA(&msg, hWnd, WM_QUIT, WM_QUIT, PM_REMOVE);
+ todo_wine
+ ok(!success, "CoWaitForMultipleHandles didn't remove WM_QUIT
messages\n");
+ index = WaitForSingleObject(thread, 200);
+ ok(index == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
+ CloseHandle(thread);
+
+ index = 0xdeadbeef;
+ PostMessageA(hWnd, WM_DDE_FIRST, 0, 0);
+ PostQuitMessage(45);
+ thread = CreateThread(NULL, 0, send_message_thread, hWnd, 0, &tid);
+ ok(thread != NULL, "CreateThread failed, error %u\n", GetLastError());
+ hr = CoWaitForMultipleHandles(0, 100, 2, handles, &index);
+ ok(hr == RPC_S_CALLPENDING, "expected RPC_S_CALLPENDING, got 0x%08x\n",
hr);
+ ok(index == 0 || broken(index == 0xdeadbeef) /* Win 8 */, "expected index 0,
got %u\n", index);
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ ok(success, "PeekMessageA failed, error %u\n", GetLastError());
+ success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
+ todo_wine
+ ok(!success, "PeekMessageA succeeded\n");
+ success = PeekMessageA(&msg, hWnd, WM_QUIT, WM_QUIT, PM_REMOVE);
+ ok(!success, "CoWaitForMultipleHandles didn't remove WM_QUIT
messages\n");
+ index = WaitForSingleObject(thread, 200);
+ ok(index == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
+ CloseHandle(thread);
+ }
+
+ CloseHandle(handles[0]);
+ CloseHandle(handles[1]);
+ DestroyWindow(hWnd);
+
+ success = UnregisterClassA(cls_name, GetModuleHandleA(0));
+ ok(success, "UnregisterClass failed %u\n", GetLastError());
+
+ CoUninitialize();
}
static void init_funcs(void)
@@ -2157,4 +2505,5 @@
test_CoInitializeEx();
test_OleRegGetMiscStatus();
test_CoCreateGuid();
-}
+ test_CoWaitForMultipleHandles();
+}
Modified: trunk/rostests/winetests/ole32/moniker.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/moniker.c…
==============================================================================
--- trunk/rostests/winetests/ole32/moniker.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/ole32/moniker.c [iso-8859-1] Mon Mar 9 19:58:31 2015
@@ -61,14 +61,6 @@
static char const * const *expected_method_list;
static const WCHAR wszFileName1[] =
{'c',':','\\','w','i','n','d','o','w','s','\\','t','e','s','t','1','.','d','o','c',0};
static const WCHAR wszFileName2[] =
{'c',':','\\','w','i','n','d','o','w','s','\\','t','e','s','t','2','.','d','o','c',0};
-
-static const CLSID CLSID_WineTest =
-{ /* 9474ba1a-258b-490b-bc13-516e9239ace0 */
- 0x9474ba1a,
- 0x258b,
- 0x490b,
- {0xbc, 0x13, 0x51, 0x6e, 0x92, 0x39, 0xac, 0xe0}
-};
static const CLSID CLSID_TestMoniker =
{ /* b306bfbc-496e-4f53-b93e-2ff9c83223d7 */
@@ -2028,9 +2020,7 @@
hr = IMoniker_Save(pMk, pStm, TRUE);
ok_ole_success(hr, "IMoniker_Save");
-
- hr = IMoniker_Release(pMk);
- ok_ole_success(hr, "IMoniker_Release");
+ IMoniker_Release(pMk);
/* overwrite the constants with various values */
hr = IStream_Seek(pStm, zero_pos, STREAM_SEEK_SET, NULL);
@@ -2061,11 +2051,8 @@
hr = IMoniker_Load(pMk, pStm);
ok_ole_success(hr, "IMoniker_Load");
- hr = IMoniker_Release(pMk);
- ok_ole_success(hr, "IMoniker_Release");
-
- hr = IStream_Release(pStm);
- ok_ole_success(hr, "IStream_Release");
+ IMoniker_Release(pMk);
+ IStream_Release(pStm);
}
START_TEST(moniker)
Modified: trunk/rostests/winetests/ole32/storage32.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/storage32…
==============================================================================
--- trunk/rostests/winetests/ole32/storage32.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/ole32/storage32.c [iso-8859-1] Mon Mar 9 19:58:31 2015
@@ -1052,7 +1052,7 @@
r = IStorage_CreateStream(stg, stmname, STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, 0,
&stm );
ok(r==S_OK, "IStorage->CreateStream failed\n");
- r = IStream_Release(stm);
+ IStream_Release(stm);
/* first enum ... should be 1 stream */
r = IStorage_EnumElements(stg, 0, NULL, 0, &ee);
Modified: trunk/rostests/winetests/ole32/usrmarshal.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/usrmarsha…
==============================================================================
--- trunk/rostests/winetests/ole32/usrmarshal.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/ole32/usrmarshal.c [iso-8859-1] Mon Mar 9 19:58:31 2015
@@ -281,7 +281,6 @@
ok(*(DWORD *)wirehemf == (size - 0x10), "wirestgm + 0xc should be size - 0x10
instead of 0x%08x\n", *(DWORD *)wirehemf);
wirehemf += sizeof(DWORD);
ok(*(DWORD *)wirehemf == EMR_HEADER, "wirestgm + 0x10 should be EMR_HEADER
instead of %d\n", *(DWORD *)wirehemf);
- wirehemf += sizeof(DWORD);
/* ... rest of data not tested - refer to tests for GetEnhMetaFileBits
* at this point */
@@ -306,7 +305,6 @@
ok(*(DWORD *)wirehemf == WDT_REMOTE_CALL, "wirestgm + 0x0 should be
WDT_REMOTE_CALL instead of 0x%08x\n", *(DWORD *)wirehemf);
wirehemf += sizeof(DWORD);
ok(*(DWORD *)wirehemf == (DWORD)(DWORD_PTR)hemf, "wirestgm + 0x4 should be hemf
instead of 0x%08x\n", *(DWORD *)wirehemf);
- wirehemf += sizeof(DWORD);
init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size,
MSHCTX_DIFFERENTMACHINE);
HENHMETAFILE_UserUnmarshal(&umcb.Flags, buffer, &hemf2);
@@ -442,7 +440,6 @@
ok(*(DWORD *)wirehmfp == (buffer_end - buffer - 0x28), "wirestgm + 0x24 should
be size - 0x34 instead of 0x%08x\n", *(DWORD *)wirehmfp);
wirehmfp += sizeof(DWORD);
ok(*(WORD *)wirehmfp == 1, "wirehmfp + 0x28 should be 1 instead of
0x%08x\n", *(DWORD *)wirehmfp);
- wirehmfp += sizeof(DWORD);
/* ... rest of data not tested - refer to tests for GetMetaFileBits
* at this point */
@@ -585,6 +582,7 @@
ok(size == 0, "size should be 0 bytes, not %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
buffer_end = WdtpInterfacePointer_UserMarshal(&umcb.Flags, ctx, buffer, unk,
&IID_IUnknown);
+ ok(buffer_end == buffer, "buffer_end %p buffer %p\n", buffer_end, buffer);
HeapFree(GetProcessHeap(), 0, buffer);
/* Now for a non-NULL pointer. The marshalled data are two size DWORDS and then