[OLE32_WINETEST] Sync with Wine Staging 1.7.37. CORE-9246

svn path=/trunk/; revision=66629
This commit is contained in:
Amine Khaldi 2015-03-09 19:58:31 +00:00
parent ec27d5b880
commit ca2dfb03a3
4 changed files with 359 additions and 25 deletions

View file

@ -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 @@ static void test_CLSIDFromProgID(void)
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 @@ static void test_CoGetPSClsid(void)
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 @@ static void test_CoGetContextToken(void)
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 @@ static void test_CoGetContextToken(void)
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 @@ static void test_CoInitializeEx(void)
/* Cleanup */
CoUninitialize();
OleUninitialize();
OleUninitialize();
}
static void test_OleRegGetMiscStatus(void)
@ -2097,6 +2101,350 @@ static void test_CoCreateGuid(void)
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)
{
HMODULE hOle32 = GetModuleHandleA("ole32");
@ -2157,4 +2505,5 @@ START_TEST(compobj)
test_CoInitializeEx();
test_OleRegGetMiscStatus();
test_CoCreateGuid();
test_CoWaitForMultipleHandles();
}

View file

@ -62,14 +62,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 */
0xb306bfbc,
@ -2028,9 +2020,7 @@ static void test_save_load_filemoniker(void)
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 @@ static void test_save_load_filemoniker(void)
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)

View file

@ -1052,7 +1052,7 @@ static void test_streamenum(void)
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);

View file

@ -281,7 +281,6 @@ static void test_marshal_HENHMETAFILE(void)
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 @@ static void test_marshal_HENHMETAFILE(void)
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 @@ static void test_marshal_HMETAFILEPICT(void)
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 @@ static void marshal_WdtpInterfacePointer(DWORD umcb_ctx, DWORD ctx)
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