2 * PROJECT: ReactOS API Tests
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Test for SHEnumClassesOfCategories
5 * COPYRIGHT: Copyright 2019 Serge Gautherie <reactos-git_serge_171003@gautherie.fr>
9 TODO, if they make sense:
10 * Test more than 1 Implemented/Required.
11 And maybe not "matching" ones.
12 * Check pEnumGUID after S_OK cases.
20 typedef HRESULT (WINAPI
*SHENUMCLASSESOFCATEGORIES
)(ULONG cImplemented
, CATID
*pImplemented
, ULONG cRequired
, CATID
*pRequired
, IEnumGUID
**out
);
22 static SHENUMCLASSESOFCATEGORIES pSHEnumClassesOfCategories
;
24 START_TEST(SHEnumClassesOfCategories
)
28 CATID CategoryImplemented
, CategoryRequired
;
29 CComPtr
<IEnumGUID
> pEnumGUID
;
33 hbrowseui
= LoadLibraryA("browseui.dll");
34 ok(hbrowseui
!= NULL
, "LoadLibraryA() failed\n");
41 pSHEnumClassesOfCategories
= (SHENUMCLASSESOFCATEGORIES
)GetProcAddress(hbrowseui
, MAKEINTRESOURCEA(136));
42 ok(pSHEnumClassesOfCategories
!= NULL
, "GetProcAddress() failed\n");
43 if (!pSHEnumClassesOfCategories
)
45 skip("No function, as on NT 6.1+\n");
49 // Test (mostly) invalid arguments.
51 // Implemented, '(ULONG)-1, NULL'.
52 // Keep this odd case, as ReactOS used to "implement" it.
54 // hr = pSHEnumClassesOfCategories((ULONG)-1, NULL, 0, NULL, NULL);
55 // ok_long(hr, E_INVALIDARG);
56 hr
= pSHEnumClassesOfCategories((ULONG
)-1, NULL
, 0, NULL
, &pEnumGUID
);
57 ok_long(hr
, E_INVALIDARG
);
59 CategoryRequired
= CATID_DeskBand
;
60 // hr = pSHEnumClassesOfCategories((ULONG)-1, NULL, 1, &CategoryRequired, NULL);
61 // ok_long(hr, E_INVALIDARG);
62 hr
= pSHEnumClassesOfCategories((ULONG
)-1, NULL
, 1, &CategoryRequired
, &pEnumGUID
);
63 ok_long(hr
, E_INVALIDARG
);
65 // Implemented, '0, NULL'.
67 // hr = pSHEnumClassesOfCategories(0, NULL, 0, NULL, NULL);
68 // ok_long(hr, E_INVALIDARG);
69 hr
= pSHEnumClassesOfCategories(0, NULL
, 0, NULL
, &pEnumGUID
);
70 ok_long(hr
, E_INVALIDARG
);
72 // CategoryRequired = CATID_DeskBand;
73 // hr = pSHEnumClassesOfCategories(0, NULL, 1, &CategoryRequired, NULL);
74 // ok_long(hr, E_INVALIDARG);
75 // The following case duplicates a later one.
76 // hr = pSHEnumClassesOfCategories(0, NULL, 1, &CategoryRequired, &pEnumGUID);
78 // ok(CategoryRequired == CATID_DeskBand, "CategoryRequired was modified\n");
81 // Implemented, '0, &CategoryImplemented'.
83 CategoryImplemented
= CATID_DeskBand
;
84 // hr = pSHEnumClassesOfCategories(0, &CategoryImplemented, 0, NULL, NULL);
85 // ok_long(hr, E_INVALIDARG);
86 hr
= pSHEnumClassesOfCategories(0, &CategoryImplemented
, 0, NULL
, &pEnumGUID
);
87 ok_long(hr
, E_INVALIDARG
);
89 CategoryRequired
= CATID_DeskBand
;
90 // hr = pSHEnumClassesOfCategories(0, &CategoryImplemented, 1, &CategoryRequired, NULL);
91 // ok_long(hr, E_INVALIDARG);
92 hr
= pSHEnumClassesOfCategories(0, &CategoryImplemented
, 1, &CategoryRequired
, &pEnumGUID
);
94 ok(CategoryImplemented
== CATID_DeskBand
, "CategoryImplemented was modified\n");
95 ok(CategoryRequired
== CATID_DeskBand
, "CategoryRequired was modified\n");
98 CategoryRequired
= CATID_InfoBand
;
99 // hr = pSHEnumClassesOfCategories(0, &CategoryImplemented, 1, &CategoryRequired, NULL);
100 // ok_long(hr, E_INVALIDARG);
101 hr
= pSHEnumClassesOfCategories(0, &CategoryImplemented
, 1, &CategoryRequired
, &pEnumGUID
);
103 ok(CategoryImplemented
== CATID_DeskBand
, "CategoryImplemented was modified\n");
104 ok(CategoryRequired
== CATID_InfoBand
, "CategoryRequired was modified\n");
107 // Implemented, '1, NULL'.
109 // hr = pSHEnumClassesOfCategories(1, NULL, 0, NULL, NULL);
110 // ok_long(hr, E_INVALIDARG);
111 hr
= pSHEnumClassesOfCategories(1, NULL
, 0, NULL
, &pEnumGUID
);
112 ok_long(hr
, E_INVALIDARG
);
114 CategoryRequired
= CATID_DeskBand
;
115 // hr = pSHEnumClassesOfCategories(1, NULL, 1, &CategoryRequired, NULL);
116 // ok_long(hr, E_INVALIDARG);
117 hr
= pSHEnumClassesOfCategories(1, NULL
, 1, &CategoryRequired
, &pEnumGUID
);
118 ok_long(hr
, E_INVALIDARG
);
120 // Required, '0, &CategoryRequired'.
122 CategoryRequired
= CATID_DeskBand
;
124 CategoryImplemented
= CATID_DeskBand
;
125 // hr = pSHEnumClassesOfCategories(1, &CategoryImplemented, 0, &CategoryRequired, NULL);
126 // ok_long(hr, E_INVALIDARG);
127 hr
= pSHEnumClassesOfCategories(1, &CategoryImplemented
, 0, &CategoryRequired
, &pEnumGUID
);
129 ok(CategoryImplemented
== CATID_DeskBand
, "CategoryImplemented was modified\n");
130 ok(CategoryRequired
== CATID_DeskBand
, "CategoryRequired was modified\n");
133 CategoryImplemented
= CATID_InfoBand
;
134 // hr = pSHEnumClassesOfCategories(1, &CategoryImplemented, 0, &CategoryRequired, NULL);
135 // ok_long(hr, E_INVALIDARG);
136 hr
= pSHEnumClassesOfCategories(1, &CategoryImplemented
, 0, &CategoryRequired
, &pEnumGUID
);
138 ok(CategoryImplemented
== CATID_InfoBand
, "CategoryImplemented was modified\n");
139 ok(CategoryRequired
== CATID_DeskBand
, "CategoryRequired was modified\n");
142 // Required, '1, NULL'.
144 // hr = pSHEnumClassesOfCategories(0, NULL, 1, NULL, NULL);
145 // ok_long(hr, E_INVALIDARG);
146 hr
= pSHEnumClassesOfCategories(0, NULL
, 1, NULL
, &pEnumGUID
);
147 ok_long(hr
, E_INVALIDARG
);
149 CategoryImplemented
= CATID_DeskBand
;
150 // hr = pSHEnumClassesOfCategories(1, &CategoryImplemented, 1, NULL, NULL);
151 // ok_long(hr, E_INVALIDARG);
152 hr
= pSHEnumClassesOfCategories(1, &CategoryImplemented
, 1, NULL
, &pEnumGUID
);
153 ok_long(hr
, E_INVALIDARG
);
156 // Previous similar checks are commented out, for usual use.
158 CategoryImplemented
= CATID_DeskBand
;
159 hr
= pSHEnumClassesOfCategories(1, &CategoryImplemented
, 0, NULL
, NULL
);
160 ok_long(hr
, E_INVALIDARG
);
162 CategoryRequired
= CATID_DeskBand
;
163 hr
= pSHEnumClassesOfCategories(1, &CategoryImplemented
, 1, &CategoryRequired
, NULL
);
164 ok_long(hr
, E_INVALIDARG
);
167 // CATID_* from sdk/include/psdk/shlguid.h.
168 // See also modules/rostests/winetests/shlwapi/clsid.c.
170 // Each CATID, as Implemented.
172 CategoryImplemented
= CATID_BrowsableShellExt
;
173 hr
= pSHEnumClassesOfCategories(1, &CategoryImplemented
, 0, NULL
, &pEnumGUID
);
175 ok(CategoryImplemented
== CATID_BrowsableShellExt
, "CategoryImplemented was modified\n");
178 CategoryImplemented
= CATID_BrowseInPlace
;
179 hr
= pSHEnumClassesOfCategories(1, &CategoryImplemented
, 0, NULL
, &pEnumGUID
);
181 ok(CategoryImplemented
== CATID_BrowseInPlace
, "CategoryImplemented was modified\n");
184 CategoryImplemented
= CATID_DeskBand
;
185 hr
= pSHEnumClassesOfCategories(1, &CategoryImplemented
, 0, NULL
, &pEnumGUID
);
187 ok(CategoryImplemented
== CATID_DeskBand
, "CategoryImplemented was modified\n");
190 CategoryImplemented
= CATID_InfoBand
;
191 hr
= pSHEnumClassesOfCategories(1, &CategoryImplemented
, 0, NULL
, &pEnumGUID
);
193 ok(CategoryImplemented
== CATID_InfoBand
, "CategoryImplemented was modified\n");
196 CategoryImplemented
= CATID_CommBand
;
197 hr
= pSHEnumClassesOfCategories(1, &CategoryImplemented
, 0, NULL
, &pEnumGUID
);
199 ok(CategoryImplemented
== CATID_CommBand
, "CategoryImplemented was modified\n");
202 // Each CATID, as Required.
204 CategoryRequired
= CATID_BrowsableShellExt
;
205 hr
= pSHEnumClassesOfCategories(0, NULL
, 1, &CategoryRequired
, &pEnumGUID
);
207 ok(CategoryRequired
== CATID_BrowsableShellExt
, "CategoryRequired was modified\n");
210 CategoryRequired
= CATID_BrowseInPlace
;
211 hr
= pSHEnumClassesOfCategories(0, NULL
, 1, &CategoryRequired
, &pEnumGUID
);
213 ok(CategoryRequired
== CATID_BrowseInPlace
, "CategoryRequired was modified\n");
216 CategoryRequired
= CATID_DeskBand
;
217 hr
= pSHEnumClassesOfCategories(0, NULL
, 1, &CategoryRequired
, &pEnumGUID
);
219 ok(CategoryRequired
== CATID_DeskBand
, "CategoryRequired was modified\n");
222 CategoryRequired
= CATID_InfoBand
;
223 hr
= pSHEnumClassesOfCategories(0, NULL
, 1, &CategoryRequired
, &pEnumGUID
);
225 ok(CategoryRequired
== CATID_InfoBand
, "CategoryRequired was modified\n");
228 CategoryRequired
= CATID_CommBand
;
229 hr
= pSHEnumClassesOfCategories(0, NULL
, 1, &CategoryRequired
, &pEnumGUID
);
231 ok(CategoryRequired
== CATID_CommBand
, "CategoryRequired was modified\n");
234 // Same CATID, as Implemented and Required.
236 CategoryImplemented
= CATID_DeskBand
;
237 CategoryRequired
= CATID_DeskBand
;
238 hr
= pSHEnumClassesOfCategories(1, &CategoryImplemented
, 1, &CategoryRequired
, &pEnumGUID
);
240 ok(CategoryImplemented
== CATID_DeskBand
, "CategoryImplemented was modified\n");
241 ok(CategoryRequired
== CATID_DeskBand
, "CategoryRequired was modified\n");
246 ok(FreeLibrary(hbrowseui
) != 0, "FreeLibrary() failed\n");