Author: akhaldi
Date: Sun Mar 5 21:03:59 2017
New Revision: 74095
URL:
http://svn.reactos.org/svn/reactos?rev=74095&view=rev
Log:
[OLE32_WINETEST] Sync with Wine Staging 2.2. CORE-12823
Modified:
trunk/rostests/winetests/ole32/clipboard.c
trunk/rostests/winetests/ole32/compobj.c
trunk/rostests/winetests/ole32/marshal.c
trunk/rostests/winetests/ole32/propvariant.c
Modified: trunk/rostests/winetests/ole32/clipboard.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/clipboard…
==============================================================================
--- trunk/rostests/winetests/ole32/clipboard.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/ole32/clipboard.c [iso-8859-1] Sun Mar 5 21:03:59 2017
@@ -198,7 +198,7 @@
ret->fmtetc_cnt = fmtetc_cnt;
ret->fmtetc = HeapAlloc(GetProcessHeap(), 0, fmtetc_cnt*sizeof(FORMATETC));
memcpy(ret->fmtetc, fmtetc, fmtetc_cnt*sizeof(FORMATETC));
- *lplpformatetc = (LPENUMFORMATETC)ret;
+ *lplpformatetc = &ret->IEnumFORMATETC_iface;
return S_OK;
}
@@ -401,7 +401,7 @@
obj->fmtetc = HeapAlloc(GetProcessHeap(), 0,
obj->fmtetc_cnt*sizeof(FORMATETC));
InitFormatEtc(obj->fmtetc[0], CF_TEXT, TYMED_HGLOBAL);
- *lplpdataobj = (LPDATAOBJECT)obj;
+ *lplpdataobj = &obj->IDataObject_iface;
return S_OK;
}
@@ -457,7 +457,7 @@
InitFormatEtc(obj->fmtetc[7], cf_another, 0xfffff);
obj->fmtetc[7].dwAspect = DVASPECT_ICON;
- *lplpdataobj = (LPDATAOBJECT)obj;
+ *lplpdataobj = &obj->IDataObject_iface;
return S_OK;
}
@@ -618,9 +618,7 @@
if(src)
{
hr = IEnumFORMATETC_Next(src_enum, 1, &src_fmt, NULL);
- ok(hr == S_FALSE ||
- broken(hr == S_OK && count == 5), /* win9x and winme don't
enumerate duplicated cf's */
- "%d: got %08x\n", count, hr);
+ ok(hr == S_FALSE, "%d: got %08x\n", count, hr);
IEnumFORMATETC_Release(src_enum);
}
@@ -801,8 +799,7 @@
ok(DataObjectImpl_GetDataHere_calls == 1, "got %d\n",
DataObjectImpl_GetDataHere_calls);
ptr = GlobalLock(h);
size = GlobalSize(h);
- ok(size == strlen(cmpl_stm_data) ||
- broken(size > strlen(cmpl_stm_data)), /* win9x, winme */
+ ok(size == strlen(cmpl_stm_data),
"expected %d got %d\n", lstrlenA(cmpl_stm_data), size);
ok(!memcmp(ptr, cmpl_stm_data, strlen(cmpl_stm_data)),
"mismatch\n");
GlobalUnlock(h);
@@ -818,8 +815,7 @@
ok(DataObjectImpl_GetDataHere_calls == 0, "got %d\n",
DataObjectImpl_GetDataHere_calls);
ptr = GlobalLock(h);
size = GlobalSize(h);
- ok(size == strlen(cmpl_text_data) + 1 ||
- broken(size > strlen(cmpl_text_data) + 1), /* win9x, winme */
+ ok(size == strlen(cmpl_text_data) + 1,
"expected %d got %d\n", lstrlenA(cmpl_text_data) + 1, size);
ok(!memcmp(ptr, cmpl_text_data, strlen(cmpl_text_data) + 1),
"mismatch\n");
GlobalUnlock(h);
@@ -836,6 +832,7 @@
ULONG ref;
LPDATAOBJECT data1, data2, data_cmpl;
HGLOBAL hblob, h;
+ void *ptr;
cf_stream = RegisterClipboardFormatA("stream format");
cf_storage = RegisterClipboardFormatA("storage format");
@@ -861,10 +858,7 @@
CoInitialize(NULL);
hr = OleSetClipboard(data1);
- ok(hr == CO_E_NOTINITIALIZED ||
- hr == CLIPBRD_E_CANT_SET, /* win9x */
- "OleSetClipboard should have failed with "
- "CO_E_NOTINITIALIZED or CLIPBRD_E_CANT_SET instead of 0x%08x\n", hr);
+ ok(hr == CO_E_NOTINITIALIZED, "OleSetClipboard failed with 0x%08x\n", hr);
CoUninitialize();
hr = OleInitialize(NULL);
@@ -896,14 +890,18 @@
/* put a format directly onto the clipboard to show
OleFlushClipboard doesn't empty the clipboard */
hblob = GlobalAlloc(GMEM_DDESHARE|GMEM_MOVEABLE|GMEM_ZEROINIT, 10);
- OpenClipboard(NULL);
+ ptr = GlobalLock( hblob );
+ ok( ptr && ptr != hblob, "got fixed block %p / %p\n", ptr, hblob
);
+ GlobalUnlock( hblob );
+ ok( OpenClipboard(NULL), "OpenClipboard failed\n" );
h = SetClipboardData(cf_onemore, hblob);
ok(h == hblob, "got %p\n", h);
h = GetClipboardData(cf_onemore);
- ok(h == hblob ||
- broken(h != NULL), /* win9x */
- "got %p\n", h);
- CloseClipboard();
+ ok(h == hblob, "got %p / %p\n", h, hblob);
+ ptr = GlobalLock( h );
+ ok( ptr && ptr != h, "got fixed block %p / %p\n", ptr, h );
+ GlobalUnlock( hblob );
+ ok( CloseClipboard(), "CloseClipboard failed\n" );
hr = OleFlushClipboard();
ok(hr == S_OK, "failed to flush clipboard, hr = 0x%08x\n", hr);
@@ -915,12 +913,13 @@
ok(hr == S_FALSE, "expect S_FALSE, hr = 0x%08x\n", hr);
/* format should survive the flush */
- OpenClipboard(NULL);
+ ok( OpenClipboard(NULL), "OpenClipboard failed\n" );
h = GetClipboardData(cf_onemore);
- ok(h == hblob ||
- broken(h != NULL), /* win9x */
- "got %p\n", h);
- CloseClipboard();
+ ok(h == hblob, "got %p\n", h);
+ ptr = GlobalLock( h );
+ ok( ptr && ptr != h, "got fixed block %p / %p\n", ptr, h );
+ GlobalUnlock( hblob );
+ ok( CloseClipboard(), "CloseClipboard failed\n" );
test_cf_dataobject(NULL);
@@ -952,6 +951,104 @@
OleUninitialize();
}
+static LPDATAOBJECT clip_data;
+static HWND next_wnd;
+static UINT wm_drawclipboard;
+
+static LRESULT CALLBACK clipboard_wnd_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
+{
+ LRESULT ret;
+
+ switch (msg)
+ {
+ case WM_DRAWCLIPBOARD:
+ wm_drawclipboard++;
+ if (clip_data)
+ {
+ /* if this is the WM_DRAWCLIPBOARD of a previous change, the data isn't
current yet */
+ /* this demonstrates an issue in Qt where it will free the data while
it's being set */
+ HRESULT hr = OleIsCurrentClipboard( clip_data );
+ ok( hr == (wm_drawclipboard > 1) ? S_OK : S_FALSE,
+ "OleIsCurrentClipboard returned %x\n", hr );
+ }
+ break;
+ case WM_CHANGECBCHAIN:
+ if (next_wnd == (HWND)wp) next_wnd = (HWND)lp;
+ else if (next_wnd) SendMessageA( next_wnd, msg, wp, lp );
+ break;
+ case WM_USER:
+ ret = wm_drawclipboard;
+ wm_drawclipboard = 0;
+ return ret;
+ }
+
+ return DefWindowProcA(hwnd, msg, wp, lp);
+}
+
+static DWORD CALLBACK set_clipboard_thread(void *arg)
+{
+ OpenClipboard( GetDesktopWindow() );
+ EmptyClipboard();
+ SetClipboardData( CF_WAVE, 0 );
+ CloseClipboard();
+ return 0;
+}
+
+/* test that WM_DRAWCLIPBOARD can be delivered for a previous change during
OleSetClipboard */
+static void test_set_clipboard_DRAWCLIPBOARD(void)
+{
+ LPDATAOBJECT data;
+ HRESULT hr;
+ WNDCLASSA cls;
+ HWND viewer;
+ int ret;
+ HANDLE thread;
+
+ hr = DataObjectImpl_CreateText("data", &data);
+ ok(hr == S_OK, "Failed to create data object: 0x%08x\n", hr);
+
+ memset(&cls, 0, sizeof(cls));
+ cls.lpfnWndProc = clipboard_wnd_proc;
+ cls.hInstance = GetModuleHandleA(NULL);
+ cls.lpszClassName = "clipboard_test";
+ RegisterClassA(&cls);
+
+ viewer = CreateWindowA("clipboard_test", NULL, 0, 0, 0, 0, 0, NULL, 0,
NULL, 0);
+ ok(viewer != NULL, "CreateWindow failed: %d\n", GetLastError());
+ next_wnd = SetClipboardViewer( viewer );
+
+ ret = SendMessageA( viewer, WM_USER, 0, 0 );
+ ok( ret == 1, "%u WM_DRAWCLIPBOARD received\n", ret );
+
+ hr = OleInitialize(NULL);
+ ok(hr == S_OK, "OleInitialize failed with error 0x%08x\n", hr);
+
+ ret = SendMessageA( viewer, WM_USER, 0, 0 );
+ ok( !ret, "%u WM_DRAWCLIPBOARD received\n", ret );
+
+ thread = CreateThread(NULL, 0, set_clipboard_thread, NULL, 0, NULL);
+ ok(thread != NULL, "CreateThread failed (%d)\n", GetLastError());
+ ret = WaitForSingleObject(thread, 5000);
+ ok(ret == WAIT_OBJECT_0, "WaitForSingleObject returned %x\n", ret);
+
+ clip_data = data;
+ hr = OleSetClipboard(data);
+ ok(hr == S_OK, "failed to set clipboard to data, hr = 0x%08x\n", hr);
+
+ ret = SendMessageA( viewer, WM_USER, 0, 0 );
+ ok( ret == 2, "%u WM_DRAWCLIPBOARD received\n", ret );
+
+ clip_data = NULL;
+ hr = OleFlushClipboard();
+ ok(hr == S_OK, "failed to flush clipboard, hr = 0x%08x\n", hr);
+ ret = IDataObject_Release(data);
+ ok(ret == 0, "got %d\n", ret);
+
+ OleUninitialize();
+ ChangeClipboardChain( viewer, next_wnd );
+ DestroyWindow( viewer );
+}
+
static inline ULONG count_refs(IDataObject *d)
{
IDataObject_AddRef(d);
@@ -987,9 +1084,7 @@
hr = OleGetClipboard(&get2);
ok(hr == S_OK, "got %08x\n", hr);
- ok(get1 == get2 ||
- broken(get1 != get2), /* win9x, winme & nt4 */
- "data objects differ\n");
+ ok(get1 == get2, "data objects differ\n");
refs = IDataObject_Release(get2);
ok(refs == (get1 == get2 ? 1 : 0), "got %d\n", refs);
@@ -1345,17 +1440,14 @@
hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL);
ok(hr == S_OK, "got %08x\n", hr); /* User32 adds some synthesised formats
*/
- todo_wine ok(fmt.cfFormat == CF_LOCALE, "cf %04x\n", fmt.cfFormat);
- if(fmt.cfFormat == CF_LOCALE)
- {
- ok(fmt.ptd == NULL, "ptd %p\n", fmt.ptd);
- ok(fmt.dwAspect == DVASPECT_CONTENT, "aspect %x\n", fmt.dwAspect);
- ok(fmt.lindex == -1, "lindex %d\n", fmt.lindex);
- ok(fmt.tymed == (TYMED_ISTREAM | TYMED_HGLOBAL), "tymed %x\n",
fmt.tymed);
-
- hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL);
- ok(hr == S_OK, "got %08x\n", hr);
- }
+ ok(fmt.cfFormat == CF_LOCALE, "cf %04x\n", fmt.cfFormat);
+ ok(fmt.ptd == NULL, "ptd %p\n", fmt.ptd);
+ ok(fmt.dwAspect == DVASPECT_CONTENT, "aspect %x\n", fmt.dwAspect);
+ ok(fmt.lindex == -1, "lindex %d\n", fmt.lindex);
+ todo_wine ok(fmt.tymed == (TYMED_ISTREAM | TYMED_HGLOBAL), "tymed %x\n",
fmt.tymed);
+
+ hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL);
+ ok(hr == S_OK, "got %08x\n", hr);
ok(fmt.cfFormat == CF_OEMTEXT, "cf %04x\n", fmt.cfFormat);
ok(fmt.ptd == NULL, "ptd %p\n", fmt.ptd);
@@ -1365,19 +1457,14 @@
hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL);
ok(hr == S_OK, "got %08x\n", hr);
- ok(fmt.cfFormat == CF_UNICODETEXT ||
- broken(fmt.cfFormat == CF_METAFILEPICT), /* win9x and winme don't have
CF_UNICODETEXT */
- "cf %04x\n", fmt.cfFormat);
- if(fmt.cfFormat == CF_UNICODETEXT)
- {
- ok(fmt.ptd == NULL, "ptd %p\n", fmt.ptd);
- ok(fmt.dwAspect == DVASPECT_CONTENT, "aspect %x\n", fmt.dwAspect);
- ok(fmt.lindex == -1, "lindex %d\n", fmt.lindex);
- ok(fmt.tymed == (TYMED_ISTREAM | TYMED_HGLOBAL), "tymed %x\n",
fmt.tymed);
-
- hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL);
- ok(hr == S_OK, "got %08x\n", hr);
- }
+ ok(fmt.cfFormat == CF_UNICODETEXT, "cf %04x\n", fmt.cfFormat);
+ ok(fmt.ptd == NULL, "ptd %p\n", fmt.ptd);
+ ok(fmt.dwAspect == DVASPECT_CONTENT, "aspect %x\n", fmt.dwAspect);
+ ok(fmt.lindex == -1, "lindex %d\n", fmt.lindex);
+ ok(fmt.tymed == (TYMED_ISTREAM | TYMED_HGLOBAL), "tymed %x\n", fmt.tymed);
+
+ hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL);
+ ok(hr == S_OK, "got %08x\n", hr);
ok(fmt.cfFormat == CF_METAFILEPICT, "cf %04x\n", fmt.cfFormat);
ok(fmt.ptd == NULL, "ptd %p\n", fmt.ptd);
ok(fmt.dwAspect == DVASPECT_CONTENT, "aspect %x\n", fmt.dwAspect);
@@ -1611,6 +1698,7 @@
{
test_get_clipboard_uninitialized();
test_set_clipboard();
+ test_set_clipboard_DRAWCLIPBOARD();
test_consumer_refs();
test_flushed_getdata();
test_nonole_clipboard();
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] Sun Mar 5 21:03:59 2017
@@ -626,6 +626,26 @@
return hr;
}
+#define test_apt_type(t, q, t_t, t_q) _test_apt_type(t, q, t_t, t_q, __LINE__)
+static void _test_apt_type(APTTYPE expected_type, APTTYPEQUALIFIER expected_qualifier,
BOOL todo_type,
+ BOOL todo_qualifier, int line)
+{
+ APTTYPEQUALIFIER qualifier = ~0u;
+ APTTYPE type = ~0u;
+ HRESULT hr;
+
+ if (!pCoGetApartmentType)
+ return;
+
+ hr = pCoGetApartmentType(&type, &qualifier);
+ ok_(__FILE__, line)(hr == S_OK || hr == CO_E_NOTINITIALIZED, "Unexpected return
code: 0x%08x\n", hr);
+todo_wine_if(todo_type)
+ ok_(__FILE__, line)(type == expected_type, "Wrong apartment type %d, expected
%d\n", type, expected_type);
+todo_wine_if(todo_qualifier)
+ ok_(__FILE__, line)(qualifier == expected_qualifier, "Wrong apartment qualifier
%d, expected %d\n", qualifier,
+ expected_qualifier);
+}
+
static void test_CoCreateInstance(void)
{
HRESULT hr;
@@ -670,6 +690,8 @@
/* show that COM doesn't have to be initialized for multi-threaded apartments if
another
thread has already done so */
+ test_apt_type(APTTYPE_CURRENT, APTTYPEQUALIFIER_NONE, FALSE, FALSE);
+
info.wait = CreateEventA(NULL, TRUE, FALSE, NULL);
ok(info.wait != NULL, "CreateEvent failed with error %d\n",
GetLastError());
@@ -680,6 +702,8 @@
ok(thread != NULL, "CreateThread failed with error %d\n", GetLastError());
ok( !WaitForSingleObject(info.wait, 10000 ), "wait timed out\n" );
+
+ test_apt_type(APTTYPE_MTA, APTTYPEQUALIFIER_IMPLICIT_MTA, TRUE, TRUE);
pUnk = (IUnknown *)0xdeadbeef;
hr = CoCreateInstance(rclsid, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void
**)&pUnk);
@@ -696,6 +720,8 @@
CloseHandle(thread);
CloseHandle(info.wait);
CloseHandle(info.stop);
+
+ test_apt_type(APTTYPE_CURRENT, APTTYPEQUALIFIER_NONE, FALSE, FALSE);
}
static void test_CoGetClassObject(void)
@@ -722,6 +748,8 @@
/* show that COM doesn't have to be initialized for multi-threaded apartments if
another
thread has already done so */
+ test_apt_type(APTTYPE_CURRENT, APTTYPEQUALIFIER_NONE, FALSE, FALSE);
+
info.wait = CreateEventA(NULL, TRUE, FALSE, NULL);
ok(info.wait != NULL, "CreateEvent failed with error %d\n",
GetLastError());
@@ -732,6 +760,8 @@
ok(thread != NULL, "CreateThread failed with error %d\n", GetLastError());
ok( !WaitForSingleObject(info.wait, 10000), "wait timed out\n" );
+
+ test_apt_type(APTTYPE_MTA, APTTYPEQUALIFIER_IMPLICIT_MTA, TRUE, TRUE);
pUnk = (IUnknown *)0xdeadbeef;
hr = CoGetClassObject(rclsid, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, (void
**)&pUnk);
@@ -753,6 +783,8 @@
CloseHandle(thread);
CloseHandle(info.wait);
CloseHandle(info.stop);
+
+ test_apt_type(APTTYPE_CURRENT, APTTYPEQUALIFIER_NONE, FALSE, FALSE);
if (!pRegOverridePredefKey)
{
@@ -1807,6 +1839,8 @@
/* show that COM doesn't have to be initialized for multi-threaded apartments if
another
thread has already done so */
+ test_apt_type(APTTYPE_CURRENT, APTTYPEQUALIFIER_NONE, FALSE, FALSE);
+
info.wait = CreateEventA(NULL, TRUE, FALSE, NULL);
ok(info.wait != NULL, "CreateEvent failed with error %d\n",
GetLastError());
@@ -1817,6 +1851,8 @@
ok(thread != NULL, "CreateThread failed with error %d\n", GetLastError());
ok( !WaitForSingleObject(info.wait, 10000), "wait timed out\n" );
+
+ test_apt_type(APTTYPE_MTA, APTTYPEQUALIFIER_IMPLICIT_MTA, TRUE, TRUE);
pComThreadingInfo = NULL;
hr = pCoGetObjectContext(&IID_IComThreadingInfo, (void
**)&pComThreadingInfo);
@@ -1851,7 +1887,11 @@
CloseHandle(info.wait);
CloseHandle(info.stop);
+ test_apt_type(APTTYPE_CURRENT, APTTYPEQUALIFIER_NONE, FALSE, FALSE);
+
pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
+
+ test_apt_type(APTTYPE_MAINSTA, APTTYPEQUALIFIER_NONE, FALSE, FALSE);
hr = pCoGetObjectContext(&IID_IComThreadingInfo, (void
**)&pComThreadingInfo);
ok_ole_success(hr, "CoGetObjectContext");
@@ -2037,6 +2077,8 @@
/* show that COM doesn't have to be initialized for multi-threaded apartments if
another
thread has already done so */
+ test_apt_type(APTTYPE_CURRENT, APTTYPEQUALIFIER_NONE, FALSE, FALSE);
+
info.wait = CreateEventA(NULL, TRUE, FALSE, NULL);
ok(info.wait != NULL, "CreateEvent failed with error %d\n",
GetLastError());
@@ -2047,6 +2089,8 @@
ok(thread != NULL, "CreateThread failed with error %d\n", GetLastError());
ok( !WaitForSingleObject(info.wait, 10000), "wait timed out\n" );
+
+ test_apt_type(APTTYPE_MTA, APTTYPEQUALIFIER_IMPLICIT_MTA, TRUE, TRUE);
token = 0;
hr = pCoGetContextToken(&token);
@@ -2068,7 +2112,11 @@
CloseHandle(info.wait);
CloseHandle(info.stop);
+ test_apt_type(APTTYPE_CURRENT, APTTYPEQUALIFIER_NONE, FALSE, FALSE);
+
CoInitialize(NULL);
+
+ test_apt_type(APTTYPE_MAINSTA, APTTYPEQUALIFIER_NONE, FALSE, FALSE);
hr = pCoGetContextToken(NULL);
ok(hr == E_POINTER, "Expected E_POINTER, got 0x%08x\n", hr);
@@ -2888,10 +2936,8 @@
IMalloc *imalloc;
HRESULT hr;
-if (0) /* crashes on native */
-{
- hr = CoGetMalloc(0, NULL);
-}
+ if (0) /* crashes on native */
+ hr = CoGetMalloc(0, NULL);
imalloc = (void*)0xdeadbeef;
hr = CoGetMalloc(0, &imalloc);
Modified: trunk/rostests/winetests/ole32/marshal.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/marshal.c…
==============================================================================
--- trunk/rostests/winetests/ole32/marshal.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/ole32/marshal.c [iso-8859-1] Sun Mar 5 21:03:59 2017
@@ -3467,6 +3467,19 @@
return 1;
}
+static BOOL new_hook_struct;
+static int method, server_tid;
+static GUID causality;
+
+struct new_hook_info
+{
+ IID iid;
+ GUID causality;
+ DWORD server_pid;
+ DWORD server_tid;
+ WORD method;
+};
+
static void WINAPI TestChannelHook_ClientGetSize(
IChannelHook *iface,
REFGUID uExtent,
@@ -3474,12 +3487,36 @@
ULONG *pDataSize )
{
SChannelHookCallInfo *info = (SChannelHookCallInfo *)riid;
- trace("TestChannelHook_ClientGetBuffer\n");
- trace("\t%s method %d\n", debugstr_iid(riid), info->iMethod);
- trace("\tcid: %s\n", debugstr_iid(&info->uCausality));
- ok(info->cbSize == sizeof(*info), "info->cbSize was %d instead of
%d\n", info->cbSize, (int)sizeof(*info));
- ok(info->dwServerPid == GetCurrentProcessId(), "info->dwServerPid was 0x%x
instead of 0x%x\n", info->dwServerPid, GetCurrentProcessId());
- ok(!info->pObject, "info->pObject should be NULL\n");
+ trace("TestChannelHook_ClientGetSize\n");
+ trace("\t%s\n", debugstr_iid(riid));
+ if (info->cbSize != sizeof(*info))
+ new_hook_struct = TRUE;
+
+ if (!new_hook_struct)
+ {
+ ok(info->cbSize == sizeof(*info), "cbSize was %d instead of %d\n",
info->cbSize, (int)sizeof(*info));
+ ok(info->dwServerPid == GetCurrentProcessId(), "dwServerPid was 0x%x
instead of 0x%x\n", info->dwServerPid, GetCurrentProcessId());
+ ok(info->iMethod == method, "iMethod was %d should be %d\n",
info->iMethod, method);
+ ok(!info->pObject, "pObject should be NULL\n");
+ if (method == 3)
+ causality = info->uCausality;
+ else
+ ok(IsEqualGUID(&info->uCausality, &causality), "causality
wasn't correct\n");
+ }
+ else
+ {
+ struct new_hook_info *new_info = (struct new_hook_info *)riid;
+ ok(new_info->server_pid == GetCurrentProcessId(), "server pid was 0x%x
instead of 0x%x\n", new_info->server_pid,
+ GetCurrentProcessId());
+ ok(new_info->server_tid == server_tid, "server tid was 0x%x instead of
0x%x\n", new_info->server_tid,
+ server_tid);
+ ok(new_info->method == method, "method was %d instead of %d\n",
new_info->method, method);
+ if (method == 3)
+ causality = new_info->causality;
+ else
+ ok(IsEqualGUID(&new_info->causality, &causality), "causality
wasn't correct\n");
+ }
+
ok(IsEqualGUID(uExtent, &EXTENTID_WineTest), "uExtent wasn't
correct\n");
*pDataSize = 1;
@@ -3494,9 +3531,26 @@
{
SChannelHookCallInfo *info = (SChannelHookCallInfo *)riid;
trace("TestChannelHook_ClientFillBuffer\n");
- ok(info->cbSize == sizeof(*info), "info->cbSize was %d instead of
%d\n", info->cbSize, (int)sizeof(*info));
- ok(info->dwServerPid == GetCurrentProcessId(), "info->dwServerPid was 0x%x
instead of 0x%x\n", info->dwServerPid, GetCurrentProcessId());
- ok(!info->pObject, "info->pObject should be NULL\n");
+
+ if (!new_hook_struct)
+ {
+ ok(info->cbSize == sizeof(*info), "cbSize was %d instead of %d\n",
info->cbSize, (int)sizeof(*info));
+ ok(info->dwServerPid == GetCurrentProcessId(), "dwServerPid was 0x%x
instead of 0x%x\n", info->dwServerPid, GetCurrentProcessId());
+ ok(info->iMethod == method, "iMethod was %d should be %d\n",
info->iMethod, method);
+ ok(!info->pObject, "pObject should be NULL\n");
+ ok(IsEqualGUID(&info->uCausality, &causality), "causality
wasn't correct\n");
+ }
+ else
+ {
+ struct new_hook_info *new_info = (struct new_hook_info *)riid;
+ ok(new_info->server_pid == GetCurrentProcessId(), "server pid was 0x%x
instead of 0x%x\n", new_info->server_pid,
+ GetCurrentProcessId());
+ ok(new_info->server_tid == server_tid, "server tid was 0x%x instead of
0x%x\n", new_info->server_tid,
+ server_tid);
+ ok(new_info->method == method, "method was %d instead of %d\n",
new_info->method, method);
+ ok(IsEqualGUID(&new_info->causality, &causality), "causality
wasn't correct\n");
+ }
+
ok(IsEqualGUID(uExtent, &EXTENTID_WineTest), "uExtent wasn't
correct\n");
*(unsigned char *)pDataBuffer = 0xcc;
@@ -3514,11 +3568,28 @@
{
SChannelHookCallInfo *info = (SChannelHookCallInfo *)riid;
trace("TestChannelHook_ClientNotify hrFault = 0x%08x\n", hrFault);
- ok(info->cbSize == sizeof(*info), "info->cbSize was %d instead of
%d\n", info->cbSize, (int)sizeof(*info));
- ok(info->dwServerPid == GetCurrentProcessId(), "info->dwServerPid was 0x%x
instead of 0x%x\n", info->dwServerPid, GetCurrentProcessId());
- todo_wine {
- ok(info->pObject != NULL, "info->pObject shouldn't be NULL\n");
- }
+
+ if (!new_hook_struct)
+ {
+ ok(info->cbSize == sizeof(*info), "cbSize was %d instead of %d\n",
info->cbSize, (int)sizeof(*info));
+ ok(info->dwServerPid == GetCurrentProcessId(), "dwServerPid was 0x%x
instead of 0x%x\n", info->dwServerPid, GetCurrentProcessId());
+ ok(info->iMethod == method, "iMethod was %d should be %d\n",
info->iMethod, method);
+ todo_wine {
+ ok(info->pObject != NULL, "pObject shouldn't be NULL\n");
+ }
+ ok(IsEqualGUID(&info->uCausality, &causality), "causality
wasn't correct\n");
+ }
+ else
+ {
+ struct new_hook_info *new_info = (struct new_hook_info *)riid;
+ ok(new_info->server_pid == GetCurrentProcessId(), "server pid was 0x%x
instead of 0x%x\n", new_info->server_pid,
+ GetCurrentProcessId());
+ ok(new_info->server_tid == server_tid, "server tid was 0x%x instead of
0x%x\n", new_info->server_tid,
+ server_tid);
+ ok(new_info->method == method, "method was %d instead of %d\n",
new_info->method, method);
+ ok(IsEqualGUID(&new_info->causality, &causality), "causality
wasn't correct\n");
+ }
+
ok(IsEqualGUID(uExtent, &EXTENTID_WineTest), "uExtent wasn't
correct\n");
}
@@ -3532,9 +3603,26 @@
{
SChannelHookCallInfo *info = (SChannelHookCallInfo *)riid;
trace("TestChannelHook_ServerNotify\n");
- ok(info->cbSize == sizeof(*info), "info->cbSize was %d instead of
%d\n", info->cbSize, (int)sizeof(*info));
- ok(info->dwServerPid == GetCurrentProcessId(), "info->dwServerPid was 0x%x
instead of 0x%x\n", info->dwServerPid, GetCurrentProcessId());
- ok(info->pObject != NULL, "info->pObject shouldn't be NULL\n");
+
+ if (!new_hook_struct)
+ {
+ ok(info->cbSize == sizeof(*info), "cbSize was %d instead of %d\n",
info->cbSize, (int)sizeof(*info));
+ ok(info->dwServerPid == GetCurrentProcessId(), "dwServerPid was 0x%x
instead of 0x%x\n", info->dwServerPid, GetCurrentProcessId());
+ ok(info->iMethod == method, "iMethod was %d should be %d\n",
info->iMethod, method);
+ ok(info->pObject != NULL, "pObject shouldn't be NULL\n");
+ ok(IsEqualGUID(&info->uCausality, &causality), "causality
wasn't correct\n");
+ }
+ else
+ {
+ struct new_hook_info *new_info = (struct new_hook_info *)riid;
+ ok(new_info->server_pid == GetCurrentProcessId(), "server pid was 0x%x
instead of 0x%x\n", new_info->server_pid,
+ GetCurrentProcessId());
+ ok(new_info->server_tid == server_tid, "server tid was 0x%x instead of
0x%x\n", new_info->server_tid,
+ server_tid);
+ ok(new_info->method == method, "method was %d instead of %d\n",
new_info->method, method);
+ ok(IsEqualGUID(&new_info->causality, &causality), "causality
wasn't correct\n");
+ }
+
ok(cbDataSize == 1, "cbDataSize should have been 1 instead of %d\n",
cbDataSize);
ok(*(unsigned char *)pDataBuffer == 0xcc, "pDataBuffer should have contained
0xcc instead of 0x%x\n", *(unsigned char *)pDataBuffer);
ok(IsEqualGUID(uExtent, &EXTENTID_WineTest), "uExtent wasn't
correct\n");
@@ -3549,10 +3637,26 @@
{
SChannelHookCallInfo *info = (SChannelHookCallInfo *)riid;
trace("TestChannelHook_ServerGetSize\n");
- trace("\t%s method %d\n", debugstr_iid(riid), info->iMethod);
- ok(info->cbSize == sizeof(*info), "info->cbSize was %d instead of
%d\n", info->cbSize, (int)sizeof(*info));
- ok(info->dwServerPid == GetCurrentProcessId(), "info->dwServerPid was 0x%x
instead of 0x%x\n", info->dwServerPid, GetCurrentProcessId());
- ok(info->pObject != NULL, "info->pObject shouldn't be NULL\n");
+ trace("\t%s\n", debugstr_iid(riid));
+ if (!new_hook_struct)
+ {
+ ok(info->cbSize == sizeof(*info), "cbSize was %d instead of %d\n",
info->cbSize, (int)sizeof(*info));
+ ok(info->dwServerPid == GetCurrentProcessId(), "dwServerPid was 0x%x
instead of 0x%x\n", info->dwServerPid, GetCurrentProcessId());
+ ok(info->iMethod == method, "iMethod was %d should be %d\n",
info->iMethod, method);
+ ok(info->pObject != NULL, "pObject shouldn't be NULL\n");
+ ok(IsEqualGUID(&info->uCausality, &causality), "causality
wasn't correct\n");
+ }
+ else
+ {
+ struct new_hook_info *new_info = (struct new_hook_info *)riid;
+ ok(new_info->server_pid == GetCurrentProcessId(), "server pid was 0x%x
instead of 0x%x\n", new_info->server_pid,
+ GetCurrentProcessId());
+ ok(new_info->server_tid == server_tid, "server tid was 0x%x instead of
0x%x\n", new_info->server_tid,
+ server_tid);
+ ok(new_info->method == method, "method was %d instead of %d\n",
new_info->method, method);
+ ok(IsEqualGUID(&new_info->causality, &causality), "causality
wasn't correct\n");
+ }
+
ok(IsEqualGUID(uExtent, &EXTENTID_WineTest), "uExtent wasn't
correct\n");
if (hrFault != S_OK)
trace("\thrFault = 0x%08x\n", hrFault);
@@ -3607,6 +3711,7 @@
hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream);
ok_ole_success(hr, CreateStreamOnHGlobal);
tid = start_host_object2(pStream, &IID_IClassFactory,
(IUnknown*)&Test_ClassFactory, MSHLFLAGS_NORMAL, &MessageFilter, &thread);
+ server_tid = tid;
ok_more_than_one_lock();
@@ -3617,8 +3722,11 @@
ok_more_than_one_lock();
+ method = 3;
hr = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (LPVOID*)&proxy);
ok_ole_success(hr, IClassFactory_CreateInstance);
+
+ method = 5;
IUnknown_Release(proxy);
IClassFactory_Release(cf);
Modified: trunk/rostests/winetests/ole32/propvariant.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/propvaria…
==============================================================================
--- trunk/rostests/winetests/ole32/propvariant.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/ole32/propvariant.c [iso-8859-1] Sun Mar 5 21:03:59 2017
@@ -176,16 +176,7 @@
}
else if(flags == PROP_V0)
ok(hr == S_OK, "%s (%s): got %08x\n", wine_vtypes[idx], modifier, hr);
- else if(flags & PROP_TODO)
- {
- todo_wine
- {
- if(hr != S_OK)
- win_skip("%s (%s): unsupported\n", wine_vtypes[idx], modifier);
- else ok(hr == S_OK, "%s (%s): got %08x\n", wine_vtypes[idx], modifier,
hr);
- }
- }
- else
+ else todo_wine_if(flags & PROP_TODO)
{
if(hr != S_OK)
win_skip("%s (%s): unsupported\n", wine_vtypes[idx], modifier);