Author: cwittich Date: Sat Sep 13 13:52:03 2008 New Revision: 36197
URL: http://svn.reactos.org/svn/reactos?rev=36197&view=rev Log: sync ole2 winetest
Modified: trunk/rostests/winetests/ole32/clipboard.c trunk/rostests/winetests/ole32/compobj.c trunk/rostests/winetests/ole32/marshal.c trunk/rostests/winetests/ole32/moniker.c trunk/rostests/winetests/ole32/ole2.c trunk/rostests/winetests/ole32/stg_prop.c trunk/rostests/winetests/ole32/storage32.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] Sat Sep 13 13:52:03 2008 @@ -451,6 +451,8 @@ ok(hr == S_OK, "expected current clipboard to be data1, hr = 0x%08x\n", hr); hr = OleIsCurrentClipboard(data2); ok(hr == S_FALSE, "did not expect current clipboard to be data2, hr = 0x%08x\n", hr); + hr = OleIsCurrentClipboard(NULL); + ok(hr == S_FALSE, "expect S_FALSE, hr = 0x%08x\n", hr);
test_get_clipboard();
@@ -460,6 +462,8 @@ ok(hr == S_FALSE, "did not expect current clipboard to be data1, hr = 0x%08x\n", hr); hr = OleIsCurrentClipboard(data2); ok(hr == S_OK, "expected current clipboard to be data2, hr = 0x%08x\n", hr); + hr = OleIsCurrentClipboard(NULL); + ok(hr == S_FALSE, "expect S_FALSE, hr = 0x%08x\n", hr);
hr = OleFlushClipboard(); ok(hr == S_OK, "failed to flush clipboard, hr = 0x%08x\n", hr); @@ -467,6 +471,8 @@ ok(hr == S_FALSE, "did not expect current clipboard to be data1, hr = 0x%08x\n", hr); hr = OleIsCurrentClipboard(data2); ok(hr == S_FALSE, "did not expect current clipboard to be data2, hr = 0x%08x\n", hr); + hr = OleIsCurrentClipboard(NULL); + ok(hr == S_FALSE, "expect S_FALSE, hr = 0x%08x\n", hr);
ok(OleSetClipboard(NULL) == S_OK, "failed to clear clipboard, hr = 0x%08x\n", hr);
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] Sat Sep 13 13:52:03 2008 @@ -244,7 +244,9 @@ ok(pUnk == NULL, "CoGetClassObject should have changed the passed in pointer to NULL, instead of %p\n", pUnk);
hr = CoGetClassObject(&CLSID_MyComputer, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, NULL); - ok(hr == E_INVALIDARG, "CoGetClassObject should have returned E_INVALIDARG instead of 0x%08x\n", hr); + ok(hr == E_INVALIDARG || + broken(hr == CO_E_NOTINITIALIZED), /* win9x */ + "CoGetClassObject should have returned E_INVALIDARG instead of 0x%08x\n", hr); }
static ATOM register_dummy_class(void) @@ -944,7 +946,9 @@
ok(is_module_loaded("urlmon.dll"), "urlmon.dll should be loaded\n");
- ok(pUnk != NULL, "Expected a valid pointer\n"); + ok(pUnk != NULL || + broken(pUnk == NULL), /* win9x */ + "Expected a valid pointer\n"); if (pUnk) IUnknown_Release(pUnk);
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] Sat Sep 13 13:52:03 2008 @@ -27,11 +27,15 @@
#include "windef.h" #include "winbase.h" +#include "initguid.h" #include "objbase.h" +#include "olectl.h" #include "shlguid.h" #include "shobjidl.h"
#include "wine/test.h" + +DEFINE_GUID(CLSID_StdGlobalInterfaceTable,0x00000323,0x0000,0x0000,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46);
/* functions that are not present on all versions of Windows */ HRESULT (WINAPI * pCoInitializeEx)(LPVOID lpReserved, DWORD dwCoInit); @@ -2333,20 +2337,23 @@ ok_ole_success(hr, "CoUnmarshalInterface"); IStream_Release(pStream);
- ok_more_than_one_lock(); - - hr = IUnknown_QueryInterface(pProxy, &IID_IWineTest, (void **)&pObject); - ok(hr == E_NOINTERFACE, "IUnknown_QueryInterface with unknown IID should have returned E_NOINTERFACE instead of 0x%08x\n", hr); - - /* it's a handler as it supports IOleObject */ - hr = IUnknown_QueryInterface(pProxy, &IID_IOleObject, (void **)&pObject); - todo_wine - ok_ole_success(hr, "IUnknown_QueryInterface(&IID_IOleObject)"); - if (SUCCEEDED(hr)) IUnknown_Release(pObject); - - IUnknown_Release(pProxy); - - ok_no_locks(); + if(hr == S_OK) + { + ok_more_than_one_lock(); + + hr = IUnknown_QueryInterface(pProxy, &IID_IWineTest, (void **)&pObject); + ok(hr == E_NOINTERFACE, "IUnknown_QueryInterface with unknown IID should have returned E_NOINTERFACE instead of 0x%08x\n", hr); + + /* it's a handler as it supports IOleObject */ + hr = IUnknown_QueryInterface(pProxy, &IID_IOleObject, (void **)&pObject); + todo_wine + ok_ole_success(hr, "IUnknown_QueryInterface(&IID_IOleObject)"); + if (SUCCEEDED(hr)) IUnknown_Release(pObject); + + IUnknown_Release(pProxy); + + ok_no_locks(); + }
end_host_object(tid, thread);
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] Sat Sep 13 13:52:03 2008 @@ -571,26 +571,18 @@ /* try with our own moniker that doesn't support IROTData */ hr = IRunningObjectTable_Register(pROT, ROTFLAGS_REGISTRATIONKEEPSALIVE, (IUnknown*)&Test_ClassFactory, &MonikerNoROTData, &dwCookie); - todo_wine { /* only fails because of lack of IMoniker marshaling */ ok_ole_success(hr, IRunningObjectTable_Register); - } ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list);
- todo_wine { /* only fails because of lack of IMoniker marshaling */ ok_more_than_one_lock(); - }
expected_method_list = methods_isrunning_no_ROTData; hr = IRunningObjectTable_IsRunning(pROT, &MonikerNoROTData); - todo_wine { /* only fails because of lack of IMoniker marshaling */ ok_ole_success(hr, IRunningObjectTable_IsRunning); - } ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list);
hr = IRunningObjectTable_Revoke(pROT, dwCookie); - todo_wine { /* only fails because of lack of IMoniker marshaling */ ok_ole_success(hr, IRunningObjectTable_Revoke); - }
ok_no_locks();
@@ -598,26 +590,18 @@ /* try with our own moniker */ hr = IRunningObjectTable_Register(pROT, ROTFLAGS_REGISTRATIONKEEPSALIVE, (IUnknown*)&Test_ClassFactory, &Moniker, &dwCookie); - todo_wine { /* only fails because of lack of IMoniker marshaling */ ok_ole_success(hr, IRunningObjectTable_Register); - } ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list);
- todo_wine { /* only fails because of lack of IMoniker marshaling */ ok_more_than_one_lock(); - }
expected_method_list = methods_isrunning; hr = IRunningObjectTable_IsRunning(pROT, &Moniker); - todo_wine { /* only fails because of lack of IMoniker marshaling */ ok_ole_success(hr, IRunningObjectTable_IsRunning); - } ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list);
hr = IRunningObjectTable_Revoke(pROT, dwCookie); - todo_wine { /* only fails because of lack of IMoniker marshaling */ ok_ole_success(hr, IRunningObjectTable_Revoke); - }
ok_no_locks();
@@ -1765,7 +1749,9 @@ bind_opts.cbStruct = -1; hr = IBindCtx_GetBindOptions(pBindCtx, (BIND_OPTS *)&bind_opts); ok_ole_success(hr, "IBindCtx_GetBindOptions"); - ok(bind_opts.cbStruct == sizeof(bind_opts), "bind_opts.cbStruct was %d\n", bind_opts.cbStruct); + ok(bind_opts.cbStruct == sizeof(bind_opts) || + bind_opts.cbStruct == 36, /* Vista */ + "bind_opts.cbStruct was %d\n", bind_opts.cbStruct);
bind_opts.cbStruct = sizeof(BIND_OPTS); hr = IBindCtx_GetBindOptions(pBindCtx, (BIND_OPTS *)&bind_opts);
Modified: trunk/rostests/winetests/ole32/ole2.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/ole2.c?rev... ============================================================================== --- trunk/rostests/winetests/ole32/ole2.c [iso-8859-1] (original) +++ trunk/rostests/winetests/ole32/ole2.c [iso-8859-1] Sat Sep 13 13:52:03 2008 @@ -782,10 +782,14 @@ expected_method_list = methods_olerender_format; trace("OleCreate with OLERENDER_FORMAT:\n"); hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_FORMAT, &formatetc, (IOleClientSite *)0xdeadbeef, pStorage, (void **)&pObject); - ok_ole_success(hr, "OleCreate"); + ok(hr == S_OK || + broken(hr == E_INVALIDARG), /* win2k */ + "OleCreate failed with error 0x%08x\n", hr); if (pObject) + { IOleObject_Release(pObject); - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); + ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); + }
expected_method_list = methods_olerender_asis; trace("OleCreate with OLERENDER_ASIS:\n"); @@ -839,10 +843,14 @@ expected_method_list = methods_oleload; trace("OleLoad:\n"); hr = OleLoad(pStorage, &IID_IOleObject, (IOleClientSite *)0xdeadbeef, (void **)&pObject); - ok_ole_success(hr, "OleLoad"); + ok(hr == S_OK || + broken(hr == E_INVALIDARG), /* win98 and win2k */ + "OleLoad failed with error 0x%08x\n", hr); if (pObject) + { IOleObject_Release(pObject); - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); + ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); + } }
static BOOL STDMETHODCALLTYPE draw_continue(ULONG_PTR param)
Modified: trunk/rostests/winetests/ole32/stg_prop.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/stg_prop.c... ============================================================================== --- trunk/rostests/winetests/ole32/stg_prop.c [iso-8859-1] (original) +++ trunk/rostests/winetests/ole32/stg_prop.c [iso-8859-1] Sat Sep 13 13:52:03 2008 @@ -19,6 +19,12 @@ #define COBJMACROS #include "objbase.h" #include "wine/test.h" +#include "initguid.h" + +DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0); +DEFINE_GUID(FMTID_SummaryInformation,0xF29F85E0,0x4FF9,0x1068,0xAB,0x91,0x08,0x00,0x2B,0x27,0xB3,0xD9); +DEFINE_GUID(FMTID_DocSummaryInformation,0xD5CDD502,0x2E9C,0x101B,0x93,0x97,0x08,0x00,0x2B,0x2C,0xF9,0xAE); +DEFINE_GUID(FMTID_UserDefinedProperties,0xD5CDD505,0x2E9C,0x101B,0x93,0x97,0x08,0x00,0x2B,0x2C,0xF9,0xAE);
#ifndef PID_BEHAVIOR #define PID_BEHAVIOR 0x80000003
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] Sat Sep 13 13:52:03 2008 @@ -999,6 +999,218 @@ ok(IsEqualCLSID(&clsid, &test_stg_cls), "clsid should have been set to CLSID_WineTest\n"); }
+struct access_res +{ + BOOL gothandle; + DWORD lasterr; +}; + +static const struct access_res create[16] = +{ + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS } +}; + +static const struct access_res create_commit[16] = +{ + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS } +}; + +static const struct access_res create_close[16] = +{ + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS } +}; + +static void _test_file_access(LPCSTR file, const struct access_res *ares, DWORD line) +{ + DWORD access = 0, share = 0; + DWORD lasterr; + HANDLE hfile; + int i, j, idx = 0; + + for (i = 0; i < 4; i++) + { + if (i == 0) access = 0; + if (i == 1) access = GENERIC_READ; + if (i == 2) access = GENERIC_WRITE; + if (i == 3) access = GENERIC_READ | GENERIC_WRITE; + + for (j = 0; j < 4; j++) + { + if (j == 0) share = 0; + if (j == 1) share = FILE_SHARE_READ; + if (j == 2) share = FILE_SHARE_WRITE; + if (j == 3) share = FILE_SHARE_READ | FILE_SHARE_WRITE; + + SetLastError(0xdeadbeef); + hfile = CreateFileA(file, access, share, NULL, OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, 0); + lasterr = GetLastError(); + + ok((hfile != INVALID_HANDLE_VALUE) == ares[idx].gothandle, + "(%d, handle, %d): Expected %d, got %d\n", + line, idx, ares[idx].gothandle, + (hfile != INVALID_HANDLE_VALUE)); + + ok(lasterr == ares[idx].lasterr, + "(%d, lasterr, %d): Expected %d, got %d\n", + line, idx, ares[idx].lasterr, lasterr); + + CloseHandle(hfile); + idx++; + } + } +} + +#define test_file_access(file, ares) _test_file_access(file, ares, __LINE__) + +static void test_access(void) +{ + IStorage *stg; + HRESULT hr; + + static const WCHAR fileW[] = {'w','i','n','e','t','e','s','t',0}; + + /* STGM_TRANSACTED */ + + hr = StgCreateDocfile(fileW, STGM_CREATE | STGM_READWRITE | + STGM_SHARE_EXCLUSIVE | STGM_TRANSACTED, 0, &stg); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + test_file_access("winetest", create); + + hr = IStorage_Commit(stg, STGC_DEFAULT); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + test_file_access("winetest", create_commit); + + IStorage_Release(stg); + + test_file_access("winetest", create_close); + + DeleteFileA("winetest"); + + /* STGM_DIRECT */ + + hr = StgCreateDocfile(fileW, STGM_CREATE | STGM_READWRITE | + STGM_SHARE_EXCLUSIVE | STGM_DIRECT, 0, &stg); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + test_file_access("winetest", create); + + hr = IStorage_Commit(stg, STGC_DEFAULT); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + test_file_access("winetest", create_commit); + + IStorage_Release(stg); + + test_file_access("winetest", create_close); + + DeleteFileA("winetest"); + + /* STGM_SHARE_DENY_NONE */ + + hr = StgCreateDocfile(fileW, STGM_CREATE | STGM_READWRITE | + STGM_SHARE_DENY_NONE | STGM_TRANSACTED, 0, &stg); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + test_file_access("winetest", create); + + hr = IStorage_Commit(stg, STGC_DEFAULT); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + test_file_access("winetest", create_commit); + + IStorage_Release(stg); + + test_file_access("winetest", create_close); + + DeleteFileA("winetest"); + + /* STGM_SHARE_DENY_READ */ + + hr = StgCreateDocfile(fileW, STGM_CREATE | STGM_READWRITE | + STGM_SHARE_DENY_READ | STGM_TRANSACTED, 0, &stg); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + test_file_access("winetest", create); + + hr = IStorage_Commit(stg, STGC_DEFAULT); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + test_file_access("winetest", create_commit); + + IStorage_Release(stg); + + test_file_access("winetest", create_close); + + DeleteFileA("winetest"); + + /* STGM_SHARE_DENY_WRITE */ + + hr = StgCreateDocfile(fileW, STGM_CREATE | STGM_READWRITE | + STGM_SHARE_DENY_WRITE | STGM_TRANSACTED, 0, &stg); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + test_file_access("winetest", create); + + hr = IStorage_Commit(stg, STGC_DEFAULT); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + test_file_access("winetest", create_commit); + + IStorage_Release(stg); + + test_file_access("winetest", create_close); + + DeleteFileA("winetest"); +} + START_TEST(storage32) { test_hglobal_storage_stat(); @@ -1010,4 +1222,5 @@ test_streamenum(); test_transact(); test_ReadClassStm(); -} + test_access(); +}