Author: fireball Date: Thu Aug 5 21:28:34 2010 New Revision: 48467
URL: http://svn.reactos.org/svn/reactos?rev=48467&view=rev Log: - Sync ole32 and oleaut32 regtests to Wine-1.3.
Modified: trunk/rostests/winetests/ole32/compobj.c trunk/rostests/winetests/ole32/dragdrop.c trunk/rostests/winetests/ole32/ole2.c trunk/rostests/winetests/oleaut32/olepicture.c trunk/rostests/winetests/oleaut32/tmarshal.rc trunk/rostests/winetests/oleaut32/typelib.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] Thu Aug 5 21:28:34 2010 @@ -34,8 +34,6 @@ #include "ctxtcall.h"
#include "wine/test.h" - -extern const IID GUID_NULL;
/* functions that are not present on all versions of Windows */ HRESULT (WINAPI * pCoInitializeEx)(LPVOID lpReserved, DWORD dwCoInit);
Modified: trunk/rostests/winetests/ole32/dragdrop.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/dragdrop.c... ============================================================================== --- trunk/rostests/winetests/ole32/dragdrop.c [iso-8859-1] (original) +++ trunk/rostests/winetests/ole32/dragdrop.c [iso-8859-1] Thu Aug 5 21:28:34 2010 @@ -31,8 +31,7 @@
#include "wine/test.h"
-static int droptarget_addref_called; -static int droptarget_release_called; +static int droptarget_refs;
/* helper macros to make tests a bit leaner */ #define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x\n", hr) @@ -54,14 +53,14 @@
static ULONG WINAPI DropTarget_AddRef(IDropTarget* iface) { - droptarget_addref_called++; - return 2; + droptarget_refs++; + return droptarget_refs; }
static ULONG WINAPI DropTarget_Release(IDropTarget* iface) { - droptarget_release_called++; - return 1; + droptarget_refs--; + return droptarget_refs; }
static HRESULT WINAPI DropTarget_DragEnter(IDropTarget* iface, @@ -314,10 +313,10 @@ hr = RegisterDragDrop((HWND)0xdeadbeef, &DropTarget); ok(hr == DRAGDROP_E_INVALIDHWND, "RegisterDragDrop with garbage hwnd should return DRAGDROP_E_INVALIDHWND instead of 0x%08x\n", hr);
- ok(droptarget_addref_called == 0, "DropTarget_AddRef shouldn't have been called\n"); + ok(droptarget_refs == 0, "DropTarget refs should be zero not %d\n", droptarget_refs); hr = RegisterDragDrop(hwnd, &DropTarget); ok_ole_success(hr, "RegisterDragDrop"); - ok(droptarget_addref_called == 1, "DropTarget_AddRef should have been called once, not %d times\n", droptarget_addref_called); + ok(droptarget_refs >= 1, "DropTarget refs should be at least one\n");
prop = GetPropA(hwnd, "OleDropTargetInterface"); ok(prop == &DropTarget, "expected IDropTarget pointer %p, got %p\n", &DropTarget, prop); @@ -325,15 +324,15 @@ hr = RegisterDragDrop(hwnd, &DropTarget); ok(hr == DRAGDROP_E_ALREADYREGISTERED, "RegisterDragDrop with already registered hwnd should return DRAGDROP_E_ALREADYREGISTERED instead of 0x%08x\n", hr);
- ok(droptarget_release_called == 0, "DropTarget_Release shouldn't have been called\n"); + ok(droptarget_refs >= 1, "DropTarget refs should be at least one\n"); OleUninitialize(); - ok(droptarget_release_called == 0, "DropTarget_Release shouldn't have been called\n"); + ok(droptarget_refs >= 1, "DropTarget refs should be at least one\n");
hr = RevokeDragDrop(hwnd); ok_ole_success(hr, "RevokeDragDrop"); - ok(droptarget_release_called == 1 || - broken(droptarget_release_called == 0), /* NT4 */ - "DropTarget_Release should have been called once, not %d times\n", droptarget_release_called); + ok(droptarget_refs == 0 || + broken(droptarget_refs == 1), /* NT4 */ + "DropTarget refs should be zero not %d\n", droptarget_refs);
hr = RevokeDragDrop(NULL); ok(hr == DRAGDROP_E_INVALIDHWND, "RevokeDragDrop with NULL hwnd should return DRAGDROP_E_INVALIDHWND instead of 0x%08x\n", hr);
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] Thu Aug 5 21:28:34 2010 @@ -1585,13 +1585,13 @@ Unknown_Release };
-static IUnknown Unknown2 = { &UnknownVtbl }; +static IUnknown Unknown = { &UnknownVtbl };
static void test_OleLockRunning(void) { HRESULT hr;
- hr = OleLockRunning((LPUNKNOWN)&Unknown2, TRUE, FALSE); + hr = OleLockRunning((LPUNKNOWN)&Unknown, TRUE, FALSE); ok(hr == S_OK, "OleLockRunning failed 0x%08x\n", hr); }
Modified: trunk/rostests/winetests/oleaut32/olepicture.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/olepict... ============================================================================== --- trunk/rostests/winetests/oleaut32/olepicture.c [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/olepicture.c [iso-8859-1] Thu Aug 5 21:28:34 2010 @@ -216,6 +216,13 @@ ok(hres == S_OK,"IPicture_get_Handle does not return S_OK, but 0x%08x\n", hres); ok(handle != 0, "IPicture_get_Handle returns a NULL handle, but it should be non NULL\n");
+ if (handle) + { + BITMAP bmp; + GetObject((HGDIOBJ)handle, sizeof(BITMAP), &bmp); + todo_wine ok(bmp.bmBits != 0, "not a dib\n"); + } + width = 0; hres = IPicture_get_Width (pic, &width); ok(hres == S_OK,"IPicture_get_Width does not return S_OK, but 0x%08x\n", hres); @@ -932,11 +939,11 @@ NoStatStreamImpl* const This=(NoStatStreamImpl*)iface; if (ppvObject==0) return E_INVALIDARG; *ppvObject = 0; - if (memcmp(&IID_IUnknown, riid, sizeof(IID_IUnknown)) == 0) + if (IsEqualIID(&IID_IUnknown, riid)) { *ppvObject = This; } - else if (memcmp(&IID_IStream, riid, sizeof(IID_IStream)) == 0) + else if (IsEqualIID(&IID_IStream, riid)) { *ppvObject = This; }
Modified: trunk/rostests/winetests/oleaut32/tmarshal.rc URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/tmarsha... ============================================================================== --- trunk/rostests/winetests/oleaut32/tmarshal.rc [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/tmarshal.rc [iso-8859-1] Thu Aug 5 21:28:34 2010 @@ -28,10 +28,10 @@ #include "wine/wine_common_ver.rc"
/* @makedep: tmarshal.tlb */ -1 TYPELIB LOADONCALL DISCARDABLE tmarshal.tlb +1 TYPELIB tmarshal.tlb
/* @makedep: test_tlb.tlb */ -2 TYPELIB LOADONCALL DISCARDABLE test_tlb.tlb +2 TYPELIB test_tlb.tlb
/* @makedep: test_reg.tlb */ -3 TYPELIB LOADONCALL DISCARDABLE test_reg.tlb +3 TYPELIB test_reg.tlb
Modified: trunk/rostests/winetests/oleaut32/typelib.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/typelib... ============================================================================== --- trunk/rostests/winetests/oleaut32/typelib.c [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/typelib.c [iso-8859-1] Thu Aug 5 21:28:34 2010 @@ -56,7 +56,18 @@
#define ok_ole_success(hr, func) ok(hr == S_OK, #func " failed with error 0x%08x\n", hr)
+static HRESULT WINAPI (*pRegisterTypeLibForUser)(ITypeLib*,OLECHAR*,OLECHAR*); +static HRESULT WINAPI (*pUnRegisterTypeLibForUser)(REFGUID,WORD,WORD,LCID,SYSKIND); + static const WCHAR wszStdOle2[] = {'s','t','d','o','l','e','2','.','t','l','b',0}; + +static void init_function_pointers(void) +{ + HMODULE hmod = GetModuleHandleA("oleaut32.dll"); + + pRegisterTypeLibForUser = (void *)GetProcAddress(hmod, "RegisterTypeLibForUser"); + pUnRegisterTypeLibForUser = (void *)GetProcAddress(hmod, "UnRegisterTypeLibForUser"); +}
static void ref_count_test(LPCWSTR type_lib) { @@ -108,6 +119,7 @@ static WCHAR wszOLE_COLOR[] = {'O','L','E','_','C','O','L','O','R',0}; static WCHAR wszClone[] = {'C','l','o','n','e',0}; static WCHAR wszclone[] = {'c','l','o','n','e',0}; + static WCHAR wszJunk[] = {'J','u','n','k',0};
hr = LoadTypeLib(wszStdOle2, &pTypeLib); ok_ole_success(hr, LoadTypeLib); @@ -282,6 +294,17 @@ ok(bindptr.lpfuncdesc != NULL, "bindptr.lpfuncdesc should not have been set to NULL\n"); ITypeInfo_ReleaseFuncDesc(pTypeInfo, bindptr.lpfuncdesc); ITypeInfo_Release(pTypeInfo); + + /* tests non-existent members */ + desckind = 0xdeadbeef; + bindptr.lptcomp = (ITypeComp*)0xdeadbeef; + pTypeInfo = (ITypeInfo*)0xdeadbeef; + ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszJunk); + hr = ITypeComp_Bind(pTypeComp, wszJunk, ulHash, 0, &pTypeInfo, &desckind, &bindptr); + ok_ole_success(hr, ITypeComp_Bind); + ok(desckind == DESCKIND_NONE, "desckind should have been DESCKIND_NONE, was: %d\n", desckind); + ok(pTypeInfo == NULL, "pTypeInfo should have been NULL, was: %p\n", pTypeInfo); + ok(bindptr.lptcomp == NULL, "bindptr should have been NULL, was: %p\n", bindptr.lptcomp);
ITypeComp_Release(pTypeComp); ITypeInfo_Release(pFontTypeInfo); @@ -477,31 +500,69 @@ "ITypeInfo_GetIDsOfNames should have returned DISP_E_UNKNOWNNAME instead of 0x%08x\n", hr);
- /* test invalid memberid */ - dispparams.cNamedArgs = 0; dispparams.cArgs = 0; dispparams.rgdispidNamedArgs = NULL; dispparams.rgvarg = NULL; + + /* test dispparams not NULL */ + + /* invalid member id -- wrong flags -- cNamedArgs not bigger than cArgs */ + dispparams.cNamedArgs = 0; + hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, 0xdeadbeef, DISPATCH_PROPERTYGET, &dispparams, NULL, NULL, NULL); + ok(hr == DISP_E_MEMBERNOTFOUND, "ITypeInfo_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr); + /* invalid member id -- correct flags -- cNamedArgs not bigger than cArgs */ hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, 0xdeadbeef, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); ok(hr == DISP_E_MEMBERNOTFOUND, "ITypeInfo_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr);
+ /* invalid member id -- wrong flags -- cNamedArgs bigger than cArgs */ + dispparams.cNamedArgs = 1; + hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, 0xdeadbeef, DISPATCH_PROPERTYGET, &dispparams, NULL, NULL, NULL); + ok(hr == E_INVALIDARG, "ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08x\n", hr); + /* invalid member id -- correct flags -- cNamedArgs bigger than cArgs */ + hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, 0xdeadbeef, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); + ok(hr == E_INVALIDARG, "ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08x\n", hr); + + hr = ITypeInfo_GetIDsOfNames(pTypeInfo, &pwszClone, 1, &dispidMember); ok_ole_success(hr, ITypeInfo_GetIDsOfNames);
- /* test correct memberid, but wrong flags */ + /* correct member id -- wrong flags -- cNamedArgs not bigger than cArgs */ + dispparams.cNamedArgs = 0; hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_PROPERTYGET, &dispparams, NULL, NULL, NULL); ok(hr == DISP_E_MEMBERNOTFOUND, "ITypeInfo_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr); - - /* test NULL dispparams */ + /* correct member id -- correct flags -- cNamedArgs not bigger than cArgs + hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); + ok(hr == 0x8002000e, "ITypeInfo_Invoke should have returned 0x8002000e instead of 0x%08x\n", hr); */ + + /* correct member id -- wrong flags -- cNamedArgs bigger than cArgs */ + dispparams.cNamedArgs = 1; + hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_PROPERTYGET, &dispparams, NULL, NULL, NULL); + ok(hr == E_INVALIDARG, "ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08x\n", hr); + /* correct member id -- correct flags -- cNamedArgs bigger than cArgs */ + hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); + ok(hr == E_INVALIDARG, "ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08x\n", hr); + + /* test NULL dispparams */ + + /* correct member id -- wrong flags -- cNamedArgs not bigger than cArgs */ + dispparams.cNamedArgs = 0; + hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_PROPERTYGET, NULL, NULL, NULL, NULL); + ok(hr == E_INVALIDARG, "ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08x\n", hr); + /* correct member id -- correct flags -- cNamedArgs not bigger than cArgs */ hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_METHOD, NULL, NULL, NULL, NULL); ok(hr == E_INVALIDARG, "ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08x\n", hr);
- /* test dispparams->cNamedArgs being bigger than dispparams->cArgs */ + /* correct member id -- wrong flags -- cNamedArgs bigger than cArgs */ dispparams.cNamedArgs = 1; - hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); + hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_PROPERTYGET, NULL, NULL, NULL, NULL); ok(hr == E_INVALIDARG, "ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08x\n", hr); + /* correct member id -- correct flags -- cNamedArgs bigger than cArgs */ + hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_METHOD, NULL, NULL, NULL, NULL); + ok(hr == E_INVALIDARG, "ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08x\n", hr);
ITypeInfo_Release(pTypeInfo); + +
hr = ITypeLib_GetTypeInfoOfGuid(pTypeLib, &IID_IDispatch, &pTypeInfo); ok_ole_success(hr, ITypeLib_GetTypeInfoOfGuid); @@ -528,11 +589,41 @@ VariantClear(&var); }
- /* test invoking a method with a [restricted] keyword */ - hr = ITypeInfo_Invoke(pTypeInfo, NULL, dispidMember, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); - todo_wine { + /* test invoking a method with a [restricted] keyword */ + + /* correct member id -- wrong flags -- cNamedArgs not bigger than cArgs */ + dispparams.cNamedArgs = 0; + hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_PROPERTYGET, &dispparams, NULL, NULL, NULL); ok(hr == DISP_E_MEMBERNOTFOUND, "ITypeInfo_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr); - } + /* correct member id -- correct flags -- cNamedArgs not bigger than cArgs */ + hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); + ok(hr == DISP_E_MEMBERNOTFOUND, "ITypeInfo_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr); + + /* correct member id -- wrong flags -- cNamedArgs bigger than cArgs */ + dispparams.cNamedArgs = 1; + hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_PROPERTYGET, &dispparams, NULL, NULL, NULL); + ok(hr == DISP_E_MEMBERNOTFOUND, "ITypeInfo_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr); + /* correct member id -- correct flags -- cNamedArgs bigger than cArgs */ + hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); + ok(hr == DISP_E_MEMBERNOTFOUND, "ITypeInfo_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr); + + /* test NULL dispparams */ + + /* correct member id -- wrong flags -- cNamedArgs not bigger than cArgs */ + dispparams.cNamedArgs = 0; + hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_PROPERTYGET, NULL, NULL, NULL, NULL); + ok(hr == DISP_E_MEMBERNOTFOUND, "ITypeInfo_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr); + /* correct member id -- correct flags -- cNamedArgs not bigger than cArgs */ + hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_METHOD, NULL, NULL, NULL, NULL); + ok(hr == DISP_E_MEMBERNOTFOUND, "ITypeInfo_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr); + + /* correct member id -- wrong flags -- cNamedArgs bigger than cArgs */ + dispparams.cNamedArgs = 1; + hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_PROPERTYGET, NULL, NULL, NULL, NULL); + ok(hr == DISP_E_MEMBERNOTFOUND, "ITypeInfo_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr); + /* correct member id -- correct flags -- cNamedArgs bigger than cArgs */ + hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_METHOD, NULL, NULL, NULL, NULL); + ok(hr == DISP_E_MEMBERNOTFOUND, "ITypeInfo_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr);
ITypeInfo_Release(pTypeInfo); ITypeLib_Release(pTypeLib); @@ -2094,7 +2185,7 @@ }
-static void test_register_typelib(void) +static void test_register_typelib(BOOL system_registration) { HRESULT hr; WCHAR filename[MAX_PATH]; @@ -2124,13 +2215,32 @@ { TKIND_DISPATCH, TYPEFLAG_FDISPATCHABLE } };
+ trace("Starting %s typelib registration tests\n", + system_registration ? "system" : "user"); + + if (!system_registration && (!pRegisterTypeLibForUser || !pUnRegisterTypeLibForUser)) + { + win_skip("User typelib registration functions are not available\n"); + return; + } + filenameA = create_test_typelib(3); MultiByteToWideChar(CP_ACP, 0, filenameA, -1, filename, MAX_PATH);
hr = LoadTypeLibEx(filename, REGKIND_NONE, &typelib); ok(SUCCEEDED(hr), "got %08x\n", hr);
- hr = RegisterTypeLib(typelib, filename, NULL); + if (system_registration) + hr = RegisterTypeLib(typelib, filename, NULL); + else + hr = pRegisterTypeLibForUser(typelib, filename, NULL); + if (hr == TYPE_E_REGISTRYACCESS) + { + win_skip("Insufficient privileges to register typelib in the registry\n"); + ITypeLib_Release(typelib); + DeleteFileA(filenameA); + return; + } ok(SUCCEEDED(hr), "got %08x\n", hr);
count = ITypeLib_GetTypeInfoCount(typelib); @@ -2193,7 +2303,10 @@ ITypeInfo_Release(typeinfo); }
- hr = UnRegisterTypeLib(&LIBID_register_test, 1, 0, LOCALE_NEUTRAL, sizeof(void*) == 8 ? SYS_WIN64 : SYS_WIN32); + if (system_registration) + hr = UnRegisterTypeLib(&LIBID_register_test, 1, 0, LOCALE_NEUTRAL, sizeof(void*) == 8 ? SYS_WIN64 : SYS_WIN32); + else + hr = pUnRegisterTypeLibForUser(&LIBID_register_test, 1, 0, LOCALE_NEUTRAL, sizeof(void*) == 8 ? SYS_WIN64 : SYS_WIN32); ok(SUCCEEDED(hr), "got %08x\n", hr);
ITypeLib_Release(typelib); @@ -2203,6 +2316,8 @@ START_TEST(typelib) { const char *filename; + + init_function_pointers();
ref_count_test(wszStdOle2); test_TypeComp(); @@ -2218,7 +2333,8 @@ DeleteFile( filename ); }
- test_register_typelib(); + test_register_typelib(TRUE); + test_register_typelib(FALSE); test_create_typelibs();
}