Andrew Nguyen : oleaut32/tests: Test typelib registration in the user registry.
Module: wine Branch: master Commit: ce8c450d83a0b2e32290effd58ca69cd9f0572be URL: http://source.winehq.org/git/wine.git/?a=commit;h=ce8c450d83a0b2e32290effd58... Author: Andrew Nguyen <anguyen(a)codeweavers.com> Date: Fri Jul 30 07:44:19 2010 -0500 oleaut32/tests: Test typelib registration in the user registry. --- dlls/oleaut32/tests/typelib.c | 44 +++++++++++++++++++++++++++++++++++++--- 1 files changed, 40 insertions(+), 4 deletions(-) diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c index 8a1fccb..9843327 100644 --- a/dlls/oleaut32/tests/typelib.c +++ b/dlls/oleaut32/tests/typelib.c @@ -55,8 +55,19 @@ #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) { ITypeLib *iface; @@ -2173,7 +2184,7 @@ static void test_create_typelibs(void) } -static void test_register_typelib(void) +static void test_register_typelib(BOOL system_registration) { HRESULT hr; WCHAR filename[MAX_PATH]; @@ -2203,13 +2214,32 @@ static void test_register_typelib(void) { 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); @@ -2272,7 +2302,10 @@ static void test_register_typelib(void) 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); @@ -2283,6 +2316,8 @@ START_TEST(typelib) { const char *filename; + init_function_pointers(); + ref_count_test(wszStdOle2); test_TypeComp(); test_CreateDispTypeInfo(); @@ -2297,7 +2332,8 @@ START_TEST(typelib) DeleteFile( filename ); } - test_register_typelib(); + test_register_typelib(TRUE); + test_register_typelib(FALSE); test_create_typelibs(); }
participants (1)
-
Alexandre Julliard