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?re…
==============================================================================
--- 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.…
==============================================================================
--- 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();
+}