Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com ---
test.ico is just a black icon of size 32x32.
dlls/shell32/tests/rsrc.rc | 2 ++ dlls/shell32/tests/shelllink.c | 43 +++++++++++++++++++++++++++++++++++++++++ dlls/shell32/tests/test.ico | Bin 0 -> 3262 bytes 3 files changed, 45 insertions(+) create mode 100644 dlls/shell32/tests/test.ico
diff --git a/dlls/shell32/tests/rsrc.rc b/dlls/shell32/tests/rsrc.rc index 00c949b..0706028 100644 --- a/dlls/shell32/tests/rsrc.rc +++ b/dlls/shell32/tests/rsrc.rc @@ -26,3 +26,5 @@ STRINGTABLE { 1 "Folder Name Resource" } + +1 ICON "test.ico" diff --git a/dlls/shell32/tests/shelllink.c b/dlls/shell32/tests/shelllink.c index 3bfd9cb..4feb5dd 100644 --- a/dlls/shell32/tests/shelllink.c +++ b/dlls/shell32/tests/shelllink.c @@ -47,6 +47,7 @@ static HRESULT (WINAPI *pSHGetStockIconInfo)(SHSTOCKICONID, UINT, SHSTOCKICONINF static DWORD (WINAPI *pGetLongPathNameA)(LPCSTR, LPSTR, DWORD); static DWORD (WINAPI *pGetShortPathNameA)(LPCSTR, LPSTR, DWORD); static UINT (WINAPI *pSHExtractIconsW)(LPCWSTR, int, int, int, HICON *, UINT *, UINT, UINT); +static DWORD_PTR (WINAPI *pSHGetFileInfoW)(LPCWSTR, DWORD, SHFILEINFOW *, UINT, UINT); static BOOL (WINAPI *pIsProcessDPIAware)(void);
static const GUID _IID_IShellLinkDataList = { @@ -1477,6 +1478,46 @@ static void test_SHGetImageList(void) } }
+static void test_ImageList_sync(void) +{ + static const UINT ImageList_size[] = { SHIL_LARGE, SHIL_SMALL }; + int count[ARRAY_SIZE(ImageList_size)]; + WCHAR buf[MAX_PATH]; + SHFILEINFOW info; + DWORD nr; + UINT i; + + if (!pSHGetFileInfoW) + { + win_skip("SHGetFileInfoW not available\n"); + return; + } + + nr = GetModuleFileNameW(NULL, buf, ARRAY_SIZE(buf)); + ok(nr, "GetModuleFileName failed, last error %08x\n", GetLastError()); + if (!nr) return; + + nr = pSHGetFileInfoW(buf, 0, &info, sizeof(info), SHGFI_ICON); + ok(nr, "SHGetFileInfo returned 0, last error %08x\n", GetLastError()); + if (!nr) return; + + ok(info.hIcon != NULL, "NULL icon\n"); + DestroyIcon(info.hIcon); + + for (i = 0; i < ARRAY_SIZE(ImageList_size); i++) + { + IImageList *il; + HRESULT hr; + + hr = SHGetImageList(ImageList_size[i], &IID_IImageList, (void**)&il); + ok(hr == S_OK, "got %08x\n", hr); + hr = IImageList_GetImageCount(il, &count[i]); + ok(hr == S_OK, "got %08x\n", hr); + IImageList_Release(il); + } + ok(count[0] == count[1], "ImageLists out of sync (large: %d, small: %d)\n", count[0], count[1]); +} + START_TEST(shelllink) { HRESULT r; @@ -1493,6 +1534,7 @@ START_TEST(shelllink) pGetLongPathNameA = (void *)GetProcAddress(hkernel32, "GetLongPathNameA"); pGetShortPathNameA = (void *)GetProcAddress(hkernel32, "GetShortPathNameA"); pSHExtractIconsW = (void *)GetProcAddress(hmod, "SHExtractIconsW"); + pSHGetFileInfoW = (void *)GetProcAddress(hmod, "SHGetFileInfoW"); pIsProcessDPIAware = (void *)GetProcAddress(huser32, "IsProcessDPIAware");
r = CoInitialize(NULL); @@ -1511,6 +1553,7 @@ START_TEST(shelllink) test_ExtractIcon(); test_ExtractAssociatedIcon(); test_SHGetImageList(); + test_ImageList_sync();
CoUninitialize(); } diff --git a/dlls/shell32/tests/test.ico b/dlls/shell32/tests/test.ico new file mode 100644 index 0000000000000000000000000000000000000000..88ad5974402a9aa222899f05390fb6ada6067135 GIT binary patch literal 3262 zcmeIup%DNe5Cg%(qZ#B&%Aj1zBvgU9|4BsTLd#c?o}3N?SV<;!@^()F1r$&~0R<FL LKmi35_$_b&hYA75
literal 0 HcmV?d00001