Module: wine Branch: master Commit: ac5ebb6192ce81fd10ecd7f3c6fac60f74d62207 URL: https://source.winehq.org/git/wine.git/?a=commit;h=ac5ebb6192ce81fd10ecd7f3c...
Author: Alexandre Julliard julliard@winehq.org Date: Fri Feb 18 18:25:39 2022 +0100
kernel32/tests: Add tests for apiset query functions.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/kernel32/tests/module.c | 88 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+)
diff --git a/dlls/kernel32/tests/module.c b/dlls/kernel32/tests/module.c index 91e1aba31e0..dcf3b8b3765 100644 --- a/dlls/kernel32/tests/module.c +++ b/dlls/kernel32/tests/module.c @@ -37,6 +37,8 @@ static BOOL (WINAPI *pSetDefaultDllDirectories)(DWORD); static BOOL (WINAPI *pK32GetModuleInformation)(HANDLE process, HMODULE module, MODULEINFO *modinfo, DWORD cb);
+static NTSTATUS (WINAPI *pApiSetQueryApiSetPresence)(const UNICODE_STRING*,BOOLEAN*); +static NTSTATUS (WINAPI *pApiSetQueryApiSetPresenceEx)(const UNICODE_STRING*,BOOLEAN*,BOOLEAN*); static NTSTATUS (WINAPI *pLdrGetDllDirectory)(UNICODE_STRING*); static NTSTATUS (WINAPI *pLdrSetDllDirectory)(UNICODE_STRING*); static NTSTATUS (WINAPI *pLdrGetDllHandle)( LPCWSTR load_path, ULONG flags, const UNICODE_STRING *name, HMODULE *base ); @@ -44,6 +46,8 @@ static NTSTATUS (WINAPI *pLdrGetDllHandleEx)( ULONG flags, LPCWSTR load_path, UL const UNICODE_STRING *name, HMODULE *base ); static NTSTATUS (WINAPI *pLdrGetDllFullName)( HMODULE module, UNICODE_STRING *name );
+static BOOL (WINAPI *pIsApiSetImplemented)(LPCSTR); + static BOOL is_unicode_enabled = TRUE;
static BOOL cmpStrAW(const char* a, const WCHAR* b, DWORD lenA, DWORD lenB) @@ -930,11 +934,15 @@ static void init_pointers(void) MAKEFUNC(SetDefaultDllDirectories); MAKEFUNC(K32GetModuleInformation); mod = GetModuleHandleA( "ntdll.dll" ); + MAKEFUNC(ApiSetQueryApiSetPresence); + MAKEFUNC(ApiSetQueryApiSetPresenceEx); MAKEFUNC(LdrGetDllDirectory); MAKEFUNC(LdrSetDllDirectory); MAKEFUNC(LdrGetDllHandle); MAKEFUNC(LdrGetDllHandleEx); MAKEFUNC(LdrGetDllFullName); + mod = GetModuleHandleA( "kernelbase.dll" ); + MAKEFUNC(IsApiSetImplemented); #undef MAKEFUNC
/* before Windows 7 this was not exported in kernel32 */ @@ -1426,6 +1434,85 @@ static void test_LdrGetDllFullName(void) wine_dbgstr_w(expected_path), wine_dbgstr_w(path_buffer) ); }
+static void test_apisets(void) +{ + static const struct + { + const char *name; + BOOLEAN present; + NTSTATUS status; + BOOLEAN present_ex, in_schema, broken; + } + tests[] = + { + { "api-ms-win-core-console-l1-1-0", TRUE, STATUS_SUCCESS, TRUE, TRUE }, + { "api-ms-win-core-console-l1-1-0.dll", TRUE, STATUS_INVALID_PARAMETER }, + { "api-ms-win-core-console-l1-1-9", TRUE, STATUS_SUCCESS, FALSE, FALSE, TRUE }, + { "api-ms-win-core-console-l1-1-9.dll", TRUE, STATUS_INVALID_PARAMETER, FALSE, FALSE, TRUE }, + { "api-ms-win-core-console-l1-1", FALSE, STATUS_SUCCESS }, + { "api-ms-win-core-console-l1-1-0.fake", TRUE, STATUS_INVALID_PARAMETER, FALSE, FALSE, TRUE }, + { "api-ms-win-foo-bar-l1-1-0", FALSE, STATUS_SUCCESS }, + { "api-ms-win-foo-bar-l1-1-0.dll", FALSE, STATUS_INVALID_PARAMETER }, + { "ext-ms-win-gdi-draw-l1-1-1", TRUE, STATUS_SUCCESS, TRUE, TRUE }, + { "ext-ms-win-gdi-draw-l1-1-1.dll", TRUE, STATUS_INVALID_PARAMETER }, + { "api-ms-win-deprecated-apis-advapi-l1-1-0", FALSE, STATUS_SUCCESS, FALSE, TRUE }, + { "foo", FALSE, STATUS_INVALID_PARAMETER }, + { "foo.dll", FALSE, STATUS_INVALID_PARAMETER }, + { "", FALSE, STATUS_INVALID_PARAMETER }, + }; + unsigned int i; + NTSTATUS status; + BOOLEAN present, in_schema; + UNICODE_STRING name; + + if (!pApiSetQueryApiSetPresence) + { + win_skip( "ApiSetQueryApiSetPresence not implemented\n" ); + return; + } + todo_wine + if (!pApiSetQueryApiSetPresenceEx) win_skip( "ApiSetQueryApiSetPresenceEx not implemented\n" ); + todo_wine + if (!pIsApiSetImplemented) win_skip( "IsApiSetImplemented not implemented\n" ); + + for (i = 0; i < ARRAY_SIZE(tests); i++) + { + RtlCreateUnicodeStringFromAsciiz( &name, tests[i].name ); + name.Buffer[name.Length / sizeof(WCHAR)] = 0xcccc; /* test without null termination */ + winetest_push_context( "%u:%s", i, tests[i].name ); + present = 0xff; + status = pApiSetQueryApiSetPresence( &name, &present ); + todo_wine + ok( status == STATUS_SUCCESS, "wrong ret %x\n", status ); + todo_wine_if( !tests[i].present ) + ok( present == tests[i].present || broken(!present && tests[i].broken) /* win8 */, + "wrong present %u\n", present ); + if (pApiSetQueryApiSetPresenceEx) + { + present = in_schema = 0xff; + status = pApiSetQueryApiSetPresenceEx( &name, &in_schema, &present ); + ok( status == tests[i].status, "wrong ret %x\n", status ); + if (!status) + { + ok( in_schema == tests[i].in_schema, "wrong in_schema %u\n", in_schema ); + ok( present == tests[i].present_ex, "wrong present %u\n", present ); + } + else + { + ok( in_schema == 0xff, "wrong in_schema %u\n", in_schema ); + ok( present == 0xff, "wrong present %u\n", present ); + } + } + if (pIsApiSetImplemented) + { + BOOL ret = pIsApiSetImplemented( tests[i].name ); + ok( ret == (!tests[i].status && tests[i].present_ex), "wrong result %u\n", ret ); + } + winetest_pop_context(); + RtlFreeUnicodeString( &name ); + } +} + static void test_ddag_node(void) { static const struct @@ -1562,5 +1649,6 @@ START_TEST(module) test_SetDefaultDllDirectories(); test_LdrGetDllHandleEx(); test_LdrGetDllFullName(); + test_apisets(); test_ddag_node(); }