From 57a9fca04b2c2f2ec3f45220782110f79bfe26f2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 7 Oct 2018 20:27:49 +0200 Subject: [PATCH] [USER32_APITEST] Add a test for PrivateExtractIcons(A/W) that shows that this API can accept unexpanded file paths. CORE-15150 --- .../rostests/apitests/user32/CMakeLists.txt | 1 + .../apitests/user32/PrivateExtractIcons.c | 51 +++++++++++++++++++ modules/rostests/apitests/user32/testlist.c | 2 + 3 files changed, 54 insertions(+) create mode 100644 modules/rostests/apitests/user32/PrivateExtractIcons.c diff --git a/modules/rostests/apitests/user32/CMakeLists.txt b/modules/rostests/apitests/user32/CMakeLists.txt index 6b1ad329393..4d901a4c9d9 100644 --- a/modules/rostests/apitests/user32/CMakeLists.txt +++ b/modules/rostests/apitests/user32/CMakeLists.txt @@ -22,6 +22,7 @@ list(APPEND SOURCE LoadImage.c LookupIconIdFromDirectoryEx.c NextDlgItem.c + PrivateExtractIcons.c RealGetWindowClass.c RedrawWindow.c RegisterClassEx.c diff --git a/modules/rostests/apitests/user32/PrivateExtractIcons.c b/modules/rostests/apitests/user32/PrivateExtractIcons.c new file mode 100644 index 00000000000..b2b3ef33de6 --- /dev/null +++ b/modules/rostests/apitests/user32/PrivateExtractIcons.c @@ -0,0 +1,51 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory + * PURPOSE: Test for PrivateExtractIcons + * PROGRAMMER: Hermes Belusca-Maito + */ + +#include "precomp.h" + +static struct +{ + PCWSTR FilePath; + UINT cIcons; // Return value from PrivateExtractIconsW + BOOL bhIconValid; // Whether or not the returned icon handle is not NULL. +} IconTests[] = +{ + /* Executables with icons */ + {L"notepad.exe", 1, TRUE}, + {L"%SystemRoot%\\System32\\cmd.exe", 1, TRUE}, + + /* Executable without icon */ + {L"%SystemRoot%\\System32\\autochk.exe", 0, FALSE}, + + /* Existing file */ + {L"%SystemRoot%\\System32\\shell32.dll", 1, TRUE}, + + /* Non-existing files */ + {L"%SystemRoot%\\non-existent-file.sdf", 0xFFFFFFFF, FALSE}, +}; + +START_TEST(PrivateExtractIcons) +{ + HICON ahIcon; + UINT i, aIconId, cIcons; + + for (i = 0; i < _countof(IconTests); ++i) + { + /* Always test extraction of the FIRST icon (index 0) */ + ahIcon = (HICON)0xdeadbeef; + aIconId = 0xdeadbeef; + cIcons = PrivateExtractIconsW(IconTests[i].FilePath, 0, 16, 16, &ahIcon, &aIconId, 1, 0); + ok(cIcons == IconTests[i].cIcons, "PrivateExtractIconsW(%u): got %u, expected %u\n", i, cIcons, IconTests[i].cIcons); + ok(ahIcon != (HICON)0xdeadbeef, "PrivateExtractIconsW(%u): icon not set\n", i); + ok((IconTests[i].bhIconValid && ahIcon) || (!IconTests[i].bhIconValid && !ahIcon), + "PrivateExtractIconsW(%u): icon expected to be %s, but got 0x%p\n", + i, IconTests[i].bhIconValid ? "valid" : "not valid", ahIcon); + ok(aIconId != 0xdeadbeef, "PrivateExtractIconsW(%u): id not set\n", i); + if (ahIcon && ahIcon != (HICON)0xdeadbeef) + DestroyIcon(ahIcon); + } +} diff --git a/modules/rostests/apitests/user32/testlist.c b/modules/rostests/apitests/user32/testlist.c index f5214b8bd27..86a1bdbc84a 100644 --- a/modules/rostests/apitests/user32/testlist.c +++ b/modules/rostests/apitests/user32/testlist.c @@ -24,6 +24,7 @@ extern void func_InitializeLpkHooks(void); extern void func_LoadImage(void); extern void func_LookupIconIdFromDirectoryEx(void); extern void func_NextDlgItem(void); +extern void func_PrivateExtractIcons(void); extern void func_RealGetWindowClass(void); extern void func_RedrawWindow(void); extern void func_RegisterHotKey(void); @@ -65,6 +66,7 @@ const struct test winetest_testlist[] = { "LoadImage", func_LoadImage }, { "LookupIconIdFromDirectoryEx", func_LookupIconIdFromDirectoryEx }, { "NextDlgItem", func_NextDlgItem }, + { "PrivateExtractIcons", func_PrivateExtractIcons }, { "RealGetWindowClass", func_RealGetWindowClass }, { "RedrawWindow", func_RedrawWindow }, { "RegisterHotKey", func_RegisterHotKey }, -- 2.17.1