Partial merge of condrv_restructure branch r65657.
[reactos.git] / rostests / apitests / com / shell32.c
1 /*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: COM interface test for shell32 classes
5 * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org>
6 */
7
8 #include "com_apitest.h"
9
10 #define NDEBUG
11 #include <debug.h>
12
13 static const CLASS_AND_INTERFACES ExpectedInterfaces[] =
14 {
15 {
16 ID_NAME(CLSID_CopyToMenu),
17 {
18 { 0x0, &IID_IContextMenu3 },
19 { 0x0, &IID_IContextMenu2 },
20 { 0x0, &IID_IContextMenu },
21 { 0x0, &IID_IUnknown },
22 { 0x4, &IID_IShellExtInit },
23 { 0x8, &IID_IObjectWithSite },
24 { 0x10, &IID_IFolderFilter },
25 }
26 },
27 {
28 ID_NAME(CLSID_DeskMovr),
29 {
30 { 0x0, &IID_IUnknown },
31 { 0x70, &IID_IDeskMovr },
32 { 0x74, &IID_IOleObject },
33 { 0x78, &IID_IPersistPropertyBag },
34 { 0x80, &IID_IOleInPlaceActiveObject },
35 { 0x84, &IID_IViewObjectEx },
36 { 0x84, &IID_IViewObject2 },
37 { 0x84, &IID_IViewObject },
38 { 0x88, &IID_IOleWindow },
39 { 0x88, &IID_IOleInPlaceObject },
40 { 0x88, &IID_IOleInPlaceObjectWindowless },
41 }
42 },
43 {
44 ID_NAME(CLSID_DragDropHelper),
45 {
46 { 0x0, &IID_IDragSourceHelper },
47 { 0x0, &IID_IUnknown },
48 { 0x4, &IID_IDropTargetHelper },
49 }
50 },
51 {
52 ID_NAME(CLSID_FadeTask),
53 {
54 { 0x0, &IID_IUnknown },
55 }
56 },
57 {
58 ID_NAME(CLSID_FileSearchBand),
59 {
60 { 0x0, &IID_IFileSearchBand },
61 { 0x0, &IID_IDispatch },
62 { 0x0, &IID_IUnknown },
63 { 0x4, &IID_IObjectWithSite },
64 { 0x8, &IID_IPersistStream },
65 { 0x8, &IID_IPersist },
66 { 0xc, &IID_IDeskBand },
67 { 0xc, &IID_IDockingWindow },
68 { 0xc, &IID_IOleWindow },
69 { 0x10, &IID_IInputObject },
70 { 0x18, &IID_IOleInPlaceSite },
71 }
72 },
73 {
74 ID_NAME(CLSID_FolderItem),
75 {
76 //{ 0x0, &CLSID_ShellFolderItem }, // broken QueryInterface that doesn't add a reference
77 { 0x0, &IID_FolderItem2 },
78 { 0x0, &IID_FolderItem },
79 { 0x0, &IID_IDispatch },
80 { 0x0, &IID_IUnknown },
81 { 0x4, &IID_IPersistFolder2 },
82 { 0x4, &IID_IPersistFolder },
83 { 0x4, &IID_IPersist },
84 { 0x8, &IID_IObjectSafety },
85 }
86 },
87 {
88 ID_NAME(CLSID_FolderItemsFDF),
89 {
90 { 0x0, &IID_FolderItems3 },
91 //{ 0x0, &IID_FolderItems2 }, ????
92 { 0x0, &IID_FolderItems },
93 { 0x0, &IID_IDispatch },
94 { 0x0, &IID_IUnknown },
95 { 0x4, &IID_IPersistFolder },
96 { 0x8, &IID_IObjectSafety },
97 }
98 },
99 {
100 ID_NAME(CLSID_FolderShortcut),
101 {
102 { 0x0, &IID_IShellFolder2 },
103 { 0x0, &IID_IShellFolder },
104 { 0x0, &IID_IUnknown },
105 { 0x4, &IID_IPersistFolder3 },
106 { 0x4, &IID_IPersistFolder2 },
107 { 0x4, &IID_IPersistFolder },
108 { 0x4, &IID_IPersist },
109 { 0x8, &IID_IShellLinkA },
110 { 0xc, &IID_IShellLinkW },
111 { 0x10, &IID_IPersistFile },
112 { 0x14, &IID_IExtractIconW },
113 { 0x18, &IID_IQueryInfo },
114 { 0x20, &IID_IPersistStream },
115 { 0x20, &IID_IPersistStreamInit },
116 { 0x24, &IID_IPersistPropertyBag },
117 { 0x28, &IID_IBrowserFrameOptions },
118 }
119 },
120 {
121 ID_NAME(CLSID_FolderViewHost),
122 {
123 { 0x0, &IID_IUnknown },
124 { 0x4, &IID_IServiceProvider },
125 { 0x8, &IID_IOleWindow },
126 { 0xc, &IID_IFolderView },
127 { 0x10, &IID_IObjectWithSite },
128 }
129 },
130 {
131 ID_NAME(CLSID_ISFBand),
132 {
133 { -0xac, &IID_IDeskBand },
134 { -0xac, &IID_IDockingWindow },
135 { -0xac, &IID_IOleWindow },
136 { -0xa8, &IID_IObjectWithSite },
137 { -0xa0, &IID_IInputObject },
138 { -0x9c, &IID_IPersistStream },
139 { -0x9c, &IID_IPersist },
140 { -0x98, &IID_IOleCommandTarget },
141 { -0x94, &IID_IServiceProvider },
142 { -0x78, &IID_IWinEventHandler },
143 { -0x74, &IID_IShellChangeNotify },
144 { -0x70, &IID_IDropTarget },
145 { -0x4, &IID_IContextMenu },
146 { 0x0, &IID_IShellFolderBand },
147 { 0x0, &IID_IUnknown },
148 { 0x94, &IID_IFolderBandPriv },
149 }
150 },
151 {
152 ID_NAME(CLSID_MenuBand),
153 {
154 { -0x30, &IID_IDeskBand },
155 { -0x30, &IID_IDockingWindow },
156 { -0x30, &IID_IOleWindow },
157 { -0x2c, &IID_IObjectWithSite },
158 { -0x24, &IID_IInputObject },
159 { -0x20, &IID_IPersistStream },
160 { -0x20, &IID_IPersist },
161 { -0x1c, &IID_IOleCommandTarget },
162 { -0x18, &IID_IServiceProvider },
163 { 0x0, &IID_IMenuPopup },
164 { 0x0, &IID_IDeskBar },
165 { 0x0, &IID_IUnknown },
166 { 0x4, &IID_IMenuBand },
167 { 0x8, &IID_IShellMenu2 },
168 { 0x8, &IID_IShellMenu },
169 { 0xc, &IID_IWinEventHandler },
170 { 0x10, &IID_IShellMenuAcc },
171 }
172 },
173 {
174 ID_NAME(CLSID_MenuBandSite),
175 {
176 { 0x0, &IID_IBandSite },
177 { 0x0, &IID_IUnknown },
178 { 0x4, &IID_IDeskBarClient },
179 { 0x4, &IID_IOleWindow },
180 { 0x8, &IID_IOleCommandTarget },
181 { 0xc, &IID_IInputObject },
182 { 0x10, &IID_IInputObjectSite },
183 { 0x14, &IID_IWinEventHandler },
184 { 0x18, &IID_IServiceProvider },
185 }
186 },
187 {
188 ID_NAME(CLSID_MenuDeskBar),
189 {
190 { -0x48, &IID_IOleCommandTarget },
191 { -0x44, &IID_IServiceProvider },
192 { -0x40, &IID_IDeskBar },
193 { -0x40, &IID_IOleWindow },
194 { -0x3c, &IID_IInputObjectSite },
195 { -0x38, &IID_IInputObject },
196 { 0x0, &IID_IMenuPopup },
197 { 0x0, &IID_IUnknown },
198 { 0x4, &IID_IObjectWithSite },
199 { 0x8, &IID_IBanneredBar },
200 { 0xc, &IID_IInitializeObject },
201 }
202 },
203 #if 0 // This is registered to shell32, but can't be instanciated
204 {
205 ID_NAME(CLSID_MenuToolbarBase),
206 {
207 { 0x0, &IID_IUnknown },
208 }
209 },
210 #endif
211 {
212 ID_NAME(CLSID_MergedFolder),
213 {
214 { -0x8, &IID_IShellFolder2 },
215 { -0x4, &IID_IStorage },
216 { 0x0, &IID_IAugmentedShellFolder2 },
217 { 0x0, &IID_IAugmentedShellFolder },
218 { 0x0, &IID_IShellFolder },
219 { 0x0, &IID_IUnknown },
220 { 0x4, &IID_IShellService },
221 { 0xc, &IID_IPersistFolder2 },
222 { 0xc, &IID_IPersistFolder },
223 { 0xc, &IID_IPersist },
224 { 0x10, &IID_IPersistPropertyBag },
225 }
226 },
227 {
228 ID_NAME(CLSID_MoveToMenu),
229 {
230 { 0x0, &IID_IContextMenu3 },
231 { 0x0, &IID_IContextMenu2 },
232 { 0x0, &IID_IContextMenu },
233 { 0x0, &IID_IUnknown },
234 { 0x4, &IID_IShellExtInit },
235 { 0x8, &IID_IObjectWithSite },
236 { 0x10, &IID_IFolderFilter },
237 }
238 },
239 {
240 ID_NAME(CLSID_NewMenu),
241 {
242 { -0xc, &IID_IObjectWithSite },
243 { -0x4, &IID_IContextMenu3 },
244 { -0x4, &IID_IContextMenu2 },
245 { -0x4, &IID_IContextMenu },
246 { 0x0, &IID_IShellExtInit },
247 { 0x0, &IID_IUnknown },
248 }
249 },
250 {
251 ID_NAME(CLSID_PersonalStartMenu),
252 {
253 { -0x30, &IID_IDeskBand },
254 { -0x30, &IID_IDockingWindow },
255 { -0x30, &IID_IOleWindow },
256 { -0x2c, &IID_IObjectWithSite },
257 { -0x24, &IID_IInputObject },
258 { -0x20, &IID_IPersistStream },
259 { -0x20, &IID_IPersist },
260 { -0x1c, &IID_IOleCommandTarget },
261 { -0x18, &IID_IServiceProvider },
262 { 0x0, &IID_IMenuPopup },
263 { 0x0, &IID_IDeskBar },
264 { 0x0, &IID_IUnknown },
265 { 0x4, &IID_IMenuBand },
266 { 0x8, &IID_IShellMenu2 },
267 { 0x8, &IID_IShellMenu },
268 { 0xc, &IID_IWinEventHandler },
269 { 0x10, &IID_IShellMenuAcc },
270 }
271 },
272 {
273 ID_NAME(CLSID_QuickLinks),
274 {
275 { -0xac, &IID_IDeskBand },
276 { -0xac, &IID_IDockingWindow },
277 { -0xac, &IID_IOleWindow },
278 { -0xa8, &IID_IObjectWithSite },
279 { -0xa0, &IID_IInputObject },
280 { -0x9c, &IID_IPersistStream },
281 { -0x9c, &IID_IPersist },
282 { -0x98, &IID_IOleCommandTarget },
283 { -0x94, &IID_IServiceProvider },
284 { -0x78, &IID_IWinEventHandler },
285 { -0x74, &IID_IShellChangeNotify },
286 { -0x70, &IID_IDropTarget },
287 { -0x4, &IID_IContextMenu },
288 { 0x0, &IID_IShellFolderBand },
289 { 0x0, &IID_IUnknown },
290 { 0x94, &IID_IFolderBandPriv },
291 }
292 },
293 {
294 ID_NAME(CLSID_SendToMenu),
295 {
296 { -0x4, &IID_IContextMenu3 },
297 { -0x4, &IID_IContextMenu2 },
298 { -0x4, &IID_IContextMenu },
299 { 0x0, &IID_IShellExtInit },
300 { 0x0, &IID_IUnknown },
301 { 0x4, &IID_IOleWindow },
302 }
303 },
304 {
305 ID_NAME(CLSID_Shell),
306 {
307 { 0x0, &IID_IShellDispatch4 },
308 { 0x0, &IID_IShellDispatch3 },
309 { 0x0, &IID_IShellDispatch2 },
310 { 0x0, &IID_IShellDispatch },
311 { 0x0, &IID_IDispatch },
312 { 0x0, &IID_IUnknown },
313 { 0x4, &IID_IObjectSafety },
314 { 0x20, &IID_IObjectWithSite },
315 }
316 },
317 {
318 ID_NAME(CLSID_ShellDesktop),
319 {
320 { -0x8, &CLSID_ShellDesktop },
321 { -0x8, &IID_IObjectWithSite },
322 { 0x0, &IID_IUnknown },
323 { 0x4, &IID_IStorage },
324 { 0x8, &IID_IPersistFolder2 },
325 { 0x8, &IID_IPersistFolder },
326 { 0x8, &IID_IPersist },
327 { 0xc, &IID_IShellIcon },
328 { 0x14, &IID_IContextMenuCB },
329 { 0x20, &IID_IOleCommandTarget },
330 { FARAWY, &IID_IShellFolder2 },
331 { FARAWY, &IID_IShellFolder },
332 }
333 },
334 {
335 ID_NAME(CLSID_ShellFSFolder),
336 {
337 { 0x0, &IID_IUnknown },
338 { 0xc, &IID_IShellFolder2 },
339 { 0xc, &IID_IShellFolder },
340 { 0x10, &IID_IShellIcon },
341 { 0x18, &IID_IPersistFolder3 },
342 { 0x18, &IID_IPersistFolder2 },
343 { 0x18, &IID_IPersistFolder },
344 { 0x18, &IID_IPersist },
345 { 0x1c, &IID_IStorage },
346 { 0x2c, &IID_IContextMenuCB },
347 { 0x34, &IID_IOleCommandTarget },
348 }
349 },
350 {
351 ID_NAME(CLSID_ShellFldSetExt),
352 {
353 { 0x0, &IID_IShellPropSheetExt },
354 { 0x0, &IID_IUnknown },
355 { 0x4, &IID_IShellExtInit },
356 { 0x8, &IID_IObjectWithSite },
357 }
358 },
359 {
360 ID_NAME(CLSID_ShellFolderView),
361 {
362 { 0x0, &IID_IShellFolderViewDual2 },
363 { 0x0, &IID_IShellFolderViewDual },
364 { 0x0, &IID_IDispatch },
365 { 0x0, &IID_IUnknown },
366 { 0x4, &IID_IShellService },
367 { 0x8, &IID_IServiceProvider },
368 { 0xc, &IID_IObjectSafety },
369 { 0x14, &IID_IObjectWithSite },
370 }
371 },
372 {
373 ID_NAME(CLSID_ShellFolderViewOC),
374 {
375 { 0x0, &IID_IFolderViewOC },
376 { 0x0, &IID_IDispatch },
377 { 0x0, &IID_IUnknown },
378 { 0x8, &IID_IObjectSafety },
379 { 0x88, &IID_IPersistStreamInit },
380 { 0x88, &IID_IPersist },
381 { 0x90, &IID_IOleObject },
382 { 0x94, &IID_IOleInPlaceActiveObject },
383 { 0x98, &IID_IOleInPlaceObjectWindowless },
384 { 0x98, &IID_IOleInPlaceObject },
385 { 0x98, &IID_IOleWindow },
386 }
387 },
388 {
389 ID_NAME(CLSID_ShellItem),
390 {
391 { 0x0, &IID_IShellItem },
392 { 0x0, &IID_IUnknown },
393 { 0x4, &IID_IPersistIDList },
394 }
395 },
396 {
397 ID_NAME(CLSID_ShellLink),
398 {
399 { 0x0, &IID_IShellLinkA },
400 { 0x0, &IID_IUnknown },
401 { 0x4, &IID_IShellLinkW },
402 { 0x8, &IID_IPersistStream },
403 { 0xc, &IID_IPersistFile },
404 { 0x10, &IID_IShellExtInit },
405 { 0x14, &IID_IContextMenu3 },
406 { 0x14, &IID_IContextMenu2 },
407 { 0x14, &IID_IContextMenu },
408 { 0x18, &IID_IDropTarget },
409 { 0x1c, &IID_IQueryInfo },
410 { 0x24, &IID_IExtractIconA },
411 { 0x28, &IID_IExtractIconW },
412 { 0x2c, &IID_IExtractImage2 },
413 { 0x2c, &IID_IExtractImage },
414 { 0x30, &IID_IPersistPropertyBag },
415 { 0x34, &IID_IServiceProvider },
416 { 0x3c, &IID_IObjectWithSite },
417 }
418 },
419 #if 0 // Apparently we can only get this through Folder.Items().GetLink
420 {
421 ID_NAME(CLSID_ShellLinkObject),
422 {
423 { 0x0, &IID_IUnknown },
424 }
425 },
426 #endif
427 {
428 ID_NAME(CLSID_StartMenu),
429 {
430 { -0x48, &IID_IOleCommandTarget },
431 { -0x44, &IID_IServiceProvider },
432 { -0x40, &IID_IDeskBar },
433 { -0x40, &IID_IOleWindow },
434 { -0x3c, &IID_IInputObjectSite },
435 { -0x38, &IID_IInputObject },
436 { 0x0, &IID_IMenuPopup },
437 { 0x0, &IID_IUnknown },
438 { 0x4, &IID_IObjectWithSite },
439 { 0x8, &IID_IBanneredBar },
440 { 0xc, &IID_IInitializeObject },
441 }
442 },
443 {
444 ID_NAME(CLSID_StartMenuPin),
445 {
446 { 0x0, &IID_IShellExtInit },
447 { 0x0, &IID_IUnknown },
448 { 0x4, &IID_IContextMenu },
449 { 0xc, &IID_IObjectWithSite },
450 }
451 },
452 {
453 ID_NAME(CLSID_TrackShellMenu),
454 {
455 { 0x0, &IID_ITrackShellMenu },
456 { 0x0, &IID_IShellMenu },
457 { 0x0, &IID_IUnknown },
458 { 0x4, &IID_IShellMenu2 },
459 { 0x8, &IID_IObjectWithSite },
460 { 0xc, &IID_IServiceProvider },
461 }
462 },
463 };
464 static const INT ExpectedInterfaceCount = RTL_NUMBER_OF(ExpectedInterfaces);
465
466 START_TEST(shell32)
467 {
468 TestClasses(L"shell32", ExpectedInterfaces, ExpectedInterfaceCount);
469 }