1 /*
2  * PROJECT:     ReactOS api tests
3  * LICENSE:     GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4  * PURPOSE:     Tests for SHAreIconsEqual
5  * COPYRIGHT:   Copyright 2018 Mark Jansen (mark.jansen@reactos.org)
6  */
7 
8 #include <apitest.h>
9 #include <shlwapi.h>
10 #include "resource.h"
11 
12 #include <pseh/pseh2.h>
13 
14 static BOOL (WINAPI *pSHAreIconsEqual)(HICON hIcon1, HICON hIcon2);
15 
16 static const char* names[] =
17 {
18     "16_8_black",
19     "16_8_red",
20     "16_32_black",
21     "16_32_red",
22     "32_8",
23     "32_32",
24 };
25 
26 void compare_icons_imp(int id1, int id2, BOOL expected)
27 {
28     HICON icon1 = LoadImageA(GetModuleHandle(NULL), MAKEINTRESOURCEA(id1), IMAGE_ICON, 0, 0, 0);
29     HICON icon2 = LoadImageA(GetModuleHandle(NULL), MAKEINTRESOURCEA(id2), IMAGE_ICON, 0, 0, 0);
30 
31     BOOL result = pSHAreIconsEqual(icon1, icon2);
32 
33     winetest_ok(icon1 != icon2, "Expected two different handles for %s==%s\n", names[id1-1], names[id2-1]);
34     winetest_ok(result == expected, "Expected %d, got %d for %s==%s\n", expected, result, names[id1-1], names[id2-1]);
35 
36     DestroyIcon(icon1);
37     DestroyIcon(icon2);
38 }
39 
40 #define compare_icons  (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : compare_icons_imp
41 
42 
43 
44 START_TEST(SHAreIconsEqual)
45 {
46     HMODULE module = LoadLibraryA("shlwapi.dll");
47     BOOL Continue = FALSE;
48     pSHAreIconsEqual = (void*)GetProcAddress(module, MAKEINTRESOURCEA(548));
49     if (!pSHAreIconsEqual)
50     {
51         skip("SHAreIconsEqual not exported\n");
52         return;
53     }
54 
55     _SEH2_TRY
56     {
57         pSHAreIconsEqual((HICON)IDC_APPSTARTING, (HICON)IDC_APPSTARTING);
58         Continue = TRUE;
59     }
60     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
61     {
62         Continue = FALSE;
63         trace("SHAreIconsEqual not implemented?\n");
64     }
65     _SEH2_END;
66 
67     if (!Continue)
68     {
69         return;
70     }
71 
72     ok(pSHAreIconsEqual((HICON)NULL, (HICON)NULL) == FALSE, "NULL\n");
73     ok(pSHAreIconsEqual((HICON)IDC_APPSTARTING, (HICON)IDC_APPSTARTING) == FALSE, "IDC_APPSTARTING\n");
74     ok(pSHAreIconsEqual((HICON)IDC_ARROW, (HICON)IDC_ARROW) == FALSE, "IDC_ARROW\n");
75     ok(pSHAreIconsEqual((HICON)IDC_SIZENESW, (HICON)IDC_SIZENESW) == FALSE, "IDC_SIZENESW\n");
76 
77     compare_icons(ICON_16_8_BLACK, ICON_16_8_BLACK, TRUE);
78     compare_icons(ICON_16_8_BLACK, ICON_16_8_RED, FALSE);
79     compare_icons(ICON_16_8_BLACK, ICON_16_32_BLACK, FALSE);
80     compare_icons(ICON_16_8_BLACK, ICON_16_32_RED, FALSE);
81     compare_icons(ICON_16_8_BLACK, ICON_32_8, FALSE);
82     compare_icons(ICON_16_8_BLACK, ICON_32_32, FALSE);
83 }
84