https://git.reactos.org/?p=reactos.git;a=commitdiff;h=57a9fca04b2c2f2ec3f45…
commit 57a9fca04b2c2f2ec3f45220782110f79bfe26f2
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Sun Oct 7 20:27:49 2018 +0200
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Sun Oct 7 20:32:26 2018 +0200
[USER32_APITEST] Add a test for PrivateExtractIcons(A/W) that shows that this API can
accept unexpanded file paths.
CORE-15150
---
modules/rostests/apitests/user32/CMakeLists.txt | 1 +
.../rostests/apitests/user32/PrivateExtractIcons.c | 51 ++++++++++++++++++++++
modules/rostests/apitests/user32/testlist.c | 2 +
3 files changed, 54 insertions(+)
diff --git a/modules/rostests/apitests/user32/CMakeLists.txt
b/modules/rostests/apitests/user32/CMakeLists.txt
index 6b1ad32939..4d901a4c9d 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 0000000000..b2b3ef33de
--- /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 f5214b8bd2..86a1bdbc84 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 },