Nikolay Sivov : kernel32/tests: Some tests for typelib sections.
Module: wine Branch: master Commit: 1faebbd20299aa44f35ec1a40f400cfbe142b2f6 URL: http://source.winehq.org/git/wine.git/?a=commit;h=1faebbd20299aa44f35ec1a40f... Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Fri Aug 23 09:20:16 2013 +0400 kernel32/tests: Some tests for typelib sections. --- dlls/kernel32/tests/actctx.c | 113 +++++++++++++++++++++++++++++++++++++++++- 1 files changed, 111 insertions(+), 2 deletions(-) diff --git a/dlls/kernel32/tests/actctx.c b/dlls/kernel32/tests/actctx.c index ed38571..bd8ab13 100644 --- a/dlls/kernel32/tests/actctx.c +++ b/dlls/kernel32/tests/actctx.c @@ -24,6 +24,7 @@ #include <winnls.h> #include <stdio.h> +#include "oaidl.h" #include "initguid.h" static BOOL (WINAPI *pActivateActCtx)(HANDLE,ULONG_PTR*); @@ -85,6 +86,9 @@ static const char manifest2[] = DEFINE_GUID(IID_CoTest, 0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x11, 0x11, 0x22, 0x22, 0x33, 0x33); DEFINE_GUID(IID_TlibTest, 0x99999999, 0x8888, 0x7777, 0x66, 0x66, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55); +DEFINE_GUID(IID_TlibTest2, 0x99999999, 0x8888, 0x7777, 0x66, 0x66, 0x55, 0x55, 0x55, 0x55, 0x55, 0x56); +DEFINE_GUID(IID_TlibTest3, 0x99999999, 0x8888, 0x7777, 0x66, 0x66, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57); +DEFINE_GUID(IID_TlibTest4, 0x99999999, 0x8888, 0x7777, 0x66, 0x66, 0x55, 0x55, 0x55, 0x55, 0x55, 0x58); static const char manifest3[] = "<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">" @@ -107,6 +111,7 @@ static const char manifest_wndcls1[] = "<file name=\"testlib1.dll\">" "<windowClass versioned=\"yes\">wndClass1</windowClass>" "<windowClass>wndClass2</windowClass>" +" <typelib tlbid=\"{99999999-8888-7777-6666-555555555558}\" version=\"1.0\" helpdir=\"\" />" "</file>" "<file name=\"testlib1_2.dll\" />" "</assembly>"; @@ -115,8 +120,12 @@ static const char manifest_wndcls2[] = "<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">" "<assemblyIdentity version=\"4.3.2.1\" name=\"testdep2\" type=\"win32\" processorArchitecture=\"" ARCH "\" />" "<file name=\"testlib2.dll\">" -"<windowClass versioned=\"no\">wndClass3</windowClass>" -"<windowClass>wndClass4</windowClass>" +" <windowClass versioned=\"no\">wndClass3</windowClass>" +" <windowClass>wndClass4</windowClass>" +" <typelib tlbid=\"{99999999-8888-7777-6666-555555555555}\" version=\"1.0\" helpdir=\"help\" resourceid=\"409\"" +" flags=\"HIDDEN,CONTROL,RESTRICTED\" />" +" <typelib tlbid=\"{99999999-8888-7777-6666-555555555556}\" version=\"1.0\" helpdir=\"help1\" resourceid=\"409\" />" +" <typelib tlbid=\"{99999999-8888-7777-6666-555555555557}\" version=\"1.0\" helpdir=\"\" />" "</file>" "<file name=\"testlib2_2.dll\" />" "</assembly>"; @@ -776,6 +785,26 @@ struct string_index ULONG rosterindex; }; +struct guidsection_header +{ + DWORD magic; + ULONG size; + DWORD unk[3]; + ULONG count; + ULONG index_offset; + DWORD unk2; + ULONG names_offset; + ULONG names_len; +}; + +struct guid_index +{ + GUID guid; + ULONG data_offset; + ULONG data_len; + ULONG rosterindex; +}; + struct wndclass_redirect_data { ULONG size; @@ -793,6 +822,20 @@ struct dllredirect_data DWORD res[3]; }; +struct tlibredirect_data +{ + ULONG size; + DWORD res; + ULONG name_len; + ULONG name_offset; + LANGID langid; + WORD flags; + ULONG help_len; + ULONG help_offset; + WORD major_version; + WORD minor_version; +}; + static void test_find_dll_redirection(HANDLE handle, LPCWSTR libname, ULONG exid, int line) { ACTCTX_SECTION_KEYED_DATA data; @@ -1244,6 +1287,71 @@ static void test_dllredirect_section(void) pReleaseActCtx(handle); } +static void test_typelib_section(void) +{ + static const WCHAR helpW[] = {'h','e','l','p'}; + ACTCTX_SECTION_KEYED_DATA data, data2; + struct guidsection_header *section; + struct tlibredirect_data *tlib; + ULONG_PTR cookie; + HANDLE handle; + BOOL ret; + + /* use two dependent manifests, 4 'files' total */ + create_manifest_file("testdep1.manifest", manifest_wndcls1, -1, NULL, NULL); + create_manifest_file("testdep2.manifest", manifest_wndcls2, -1, NULL, NULL); + create_manifest_file("main_wndcls.manifest", manifest_wndcls_main, -1, NULL, NULL); + + handle = test_create("main_wndcls.manifest"); + DeleteFileA("testdep1.manifest"); + DeleteFileA("testdep2.manifest"); + DeleteFileA("main_wndcls.manifest"); + + ret = pActivateActCtx(handle, &cookie); + ok(ret, "ActivateActCtx failed: %u\n", GetLastError()); + + memset(&data, 0, sizeof(data)); + memset(&data2, 0, sizeof(data2)); + data.cbSize = sizeof(data); + data2.cbSize = sizeof(data2); + + /* get data for two typelibs from different assemblies */ + ret = pFindActCtxSectionGuid(0, NULL, + ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION, + &IID_TlibTest, &data); +todo_wine + ok(ret, "got %d\n", ret); + if (!ret) return; + + ret = pFindActCtxSectionGuid(0, NULL, + ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION, + &IID_TlibTest4, &data2); + ok(ret, "got %d\n", ret); + + section = (struct guidsection_header*)data.lpSectionBase; + ok(section->count == 4, "got %d\n", section->count); + ok(section->size == sizeof(*section), "got %d\n", section->size); + + /* For both GUIDs same section is returned */ + ok(data.lpSectionBase == data2.lpSectionBase, "got %p, %p\n", data.lpSectionBase, data2.lpSectionBase); + ok(data.ulSectionTotalLength == data2.ulSectionTotalLength, "got %u, %u\n", data.ulSectionTotalLength, + data2.ulSectionTotalLength); + + /* test some actual data */ + tlib = (struct tlibredirect_data*)data.lpData; + ok(tlib->size == sizeof(*tlib), "got %d\n", tlib->size); + ok(tlib->major_version == 1, "got %d\n", tlib->major_version); + ok(tlib->minor_version == 0, "got %d\n", tlib->minor_version); + ok(tlib->help_offset > 0, "got %d\n", tlib->help_offset); + ok(tlib->help_len == sizeof(helpW), "got %d\n", tlib->help_len); + ok(tlib->flags == (LIBFLAG_FHIDDEN|LIBFLAG_FCONTROL|LIBFLAG_FRESTRICTED), "got %x\n", tlib->flags); + + ret = pDeactivateActCtx(0, cookie); + ok(ret, "DeactivateActCtx failed: %u\n", GetLastError()); + + pReleaseActCtx(handle); +} + static void test_actctx(void) { ULONG_PTR cookie; @@ -1464,6 +1572,7 @@ static void test_actctx(void) test_wndclass_section(); test_dllredirect_section(); + test_typelib_section(); } static void test_app_manifest(void)
participants (1)
-
Alexandre Julliard