1 /*
2  * PROJECT:         ReactOS api tests
3  * LICENSE:         GPLv2+ - See COPYING in the top level directory
4  * PURPOSE:         COM interface test for shdocvw 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_AdminFolderShortcut),
17         {
18             {    0x0,   &IID_IShellFolder2 },
19             {    0x0,       &IID_IShellFolder },
20             {    0x0,           &IID_IUnknown },
21             {    0x4,   &IID_IPersistFolder3 },
22             {    0x4,       &IID_IPersistFolder2 },
23             {    0x4,           &IID_IPersistFolder },
24             {    0x4,               &IID_IPersist },
25             {    0x8,   &IID_IShellLinkA },
26             {    0xc,   &IID_IShellLinkW },
27             {   0x10,   &IID_IPersistFile },
28             {   0x14,   &IID_IExtractIconW },
29             {   0x18,   &IID_IQueryInfo },
30             {   0x20,   &IID_IPersistStream },
31             {   0x20,   &IID_IPersistStreamInit },
32             {   0x24,   &IID_IPersistPropertyBag },
33             {   0x28,   &IID_IBrowserFrameOptions },
34         }
35     },
36     {
37         ID_NAME(CLSID_ExplorerBand),
38         {
39             {  -0xb4,   &IID_IDeskBand },
40             {  -0xb4,       &IID_IDockingWindow },
41             {  -0xb4,           &IID_IOleWindow },
42             {  -0xb0,   &IID_IObjectWithSite },
43             {  -0xa8,   &IID_IInputObject },
44             {  -0xa4,   &IID_IPersistStream },
45             {  -0xa4,       &IID_IPersist },
46             {  -0xa0,   &IID_IOleCommandTarget },
47             {  -0x9c,   &IID_IServiceProvider },
48             {  -0x84,   &IID_IContextMenu },
49             {  -0x80,   &IID_IBandNavigate },
50             {  -0x7c,   &IID_IWinEventHandler },
51             {  -0x78,   &IID_INamespaceProxy },
52             {    0x0,   &IID_IDispatch },
53             {    0x0,       &IID_IUnknown },
54         }
55     },
56     {
57         ID_NAME(CLSID_FontsFolderShortcut),
58         {
59             {    0x0,   &IID_IShellFolder2 },
60             {    0x0,       &IID_IShellFolder },
61             {    0x0,           &IID_IUnknown },
62             {    0x4,   &IID_IPersistFolder3 },
63             {    0x4,       &IID_IPersistFolder2 },
64             {    0x4,           &IID_IPersistFolder },
65             {    0x4,               &IID_IPersist },
66             {    0x8,   &IID_IShellLinkA },
67             {    0xc,   &IID_IShellLinkW },
68             {   0x10,   &IID_IPersistFile },
69             {   0x14,   &IID_IExtractIconW },
70             {   0x18,   &IID_IQueryInfo },
71             {   0x20,   &IID_IPersistStream },
72             {   0x20,   &IID_IPersistStreamInit },
73             {   0x24,   &IID_IPersistPropertyBag },
74             {   0x28,   &IID_IBrowserFrameOptions },
75         }
76     },
77 #if 0 // E_OUTOFMEMORY?
78     {
79         ID_NAME(CLSID_ShellDispatchInproc),
80         {
81             {    0x0,   &IID_IUnknown },
82         }
83     },
84 #endif
85     {
86         ID_NAME(CLSID_MruLongList),
87         {
88             {    0x0,   &IID_IUnknown },
89         }
90     },
91     {
92         ID_NAME(CLSID_SH_FavBand),
93         {
94             {  -0x30,   &IID_IDeskBand },
95             {  -0x30,       &IID_IDockingWindow },
96             {  -0x30,           &IID_IOleWindow },
97             {  -0x2c,   &IID_IObjectWithSite },
98             {  -0x24,   &IID_IInputObject },
99             {  -0x20,   &IID_IPersistStream },
100             {  -0x20,       &IID_IPersist },
101             {  -0x1c,   &IID_IOleCommandTarget },
102             {  -0x18,   &IID_IServiceProvider },
103             {    0x0,   &IID_IContextMenu },
104             {    0x0,       &IID_IUnknown },
105             {    0x4,   &IID_IBandNavigate },
106             {    0x8,   &IID_IWinEventHandler },
107             {    0xc,   &IID_INamespaceProxy },
108         }
109     },
110     {
111         ID_NAME(CLSID_SH_HistBand),
112         {
113             {  -0xb4,   &IID_IDeskBand },
114             {  -0xb4,       &IID_IDockingWindow },
115             {  -0xb4,           &IID_IOleWindow },
116             {  -0xb0,   &IID_IObjectWithSite },
117             {  -0xa8,   &IID_IInputObject },
118             {  -0xa4,   &IID_IPersistStream },
119             {  -0xa4,       &IID_IPersist },
120             {  -0xa0,   &IID_IOleCommandTarget },
121             {  -0x9c,   &IID_IServiceProvider },
122             {  -0x84,   &IID_IContextMenu },
123             {  -0x80,   &IID_IBandNavigate },
124             {  -0x7c,   &IID_IWinEventHandler },
125             {  -0x78,   &IID_INamespaceProxy },
126             {    0x0,   &IID_IShellFolderSearchableCallback },
127             {    0x0,       &IID_IUnknown },
128         }
129     },
130     {
131         ID_NAME(CLSID_SearchAssistantOC),
132         {
133             {    0x0,   &IID_ISearchAssistantOC3 },
134             {    0x0,       &IID_ISearchAssistantOC },
135             {    0x0,           &IID_IDispatch },
136             {    0x0,               &IID_IUnknown },
137             {    0x4,   &IID_IProvideClassInfo2 },
138             {    0x4,       &IID_IProvideClassInfo },
139             {    0x8,   &IID_IQuickActivate },
140             {    0xc,   &IID_IOleControl },
141             {   0x10,   &IID_IOleObject },
142             {   0x14,   &IID_IOleInPlaceActiveObject },
143             {   0x18,   &IID_IViewObjectEx },
144             {   0x18,       &IID_IViewObject2 },
145             {   0x18,           &IID_IViewObject },
146             {   0x1c,   &IID_IOleInPlaceObjectWindowless },
147             {   0x1c,       &IID_IOleInPlaceObject },
148             {   0x1c,           &IID_IOleWindow },
149             {   0x20,   &IID_IDataObject },
150             {   0x30,   &IID_IConnectionPointContainer },
151             {   0x34,   &IID_IObjectSafety },
152             {   0x3c,   &IID_IOleCommandTarget },
153             {   0x40,   &IID_IObjectWithSite },
154         }
155     },
156     {
157         ID_NAME(CLSID_SearchBand),
158         {
159             {    0x0,   &IID_IContextMenu },
160             {    0x0,       &IID_IUnknown },
161             {    0x4,   &IID_IShellExtInit },
162             {    0x8,   &IID_IPersistPropertyBag },
163             {    0x8,       &IID_IPersist },
164         }
165     },
166     {
167         ID_NAME(CLSID_ShellSearchAssistantOC),
168         {
169             {    0x0,   &IID_ISearchAssistantOC3 },
170             {    0x0,       &IID_ISearchAssistantOC },
171             {    0x0,           &IID_IDispatch },
172             {    0x0,               &IID_IUnknown },
173             {    0x4,   &IID_IProvideClassInfo2 },
174             {    0x4,       &IID_IProvideClassInfo },
175             {    0x8,   &IID_IQuickActivate },
176             {    0xc,   &IID_IOleControl },
177             {   0x10,   &IID_IOleObject },
178             {   0x14,   &IID_IOleInPlaceActiveObject },
179             {   0x18,   &IID_IViewObjectEx },
180             {   0x18,       &IID_IViewObject2 },
181             {   0x18,           &IID_IViewObject },
182             {   0x1c,   &IID_IOleInPlaceObjectWindowless },
183             {   0x1c,       &IID_IOleInPlaceObject },
184             {   0x1c,           &IID_IOleWindow },
185             {   0x20,   &IID_IDataObject },
186             {   0x30,   &IID_IConnectionPointContainer },
187             {   0x34,   &IID_IObjectSafety },
188             {   0x3c,   &IID_IOleCommandTarget },
189             {   0x40,   &IID_IObjectWithSite },
190         }
191     },
192     {
193         ID_NAME(CLSID_ShellShellNameSpace),
194         {
195             {    0x0,   &IID_IShellNameSpace },
196             {    0x0,       &IID_IShellFavoritesNameSpace },
197             {    0x0,           &IID_IDispatch },
198             {    0x0,               &IID_IUnknown },
199             {    0x4,   &IID_IProvideClassInfo2 },
200             {    0x4,       &IID_IProvideClassInfo },
201             {    0x8,   &IID_IPersistStreamInit },
202             {    0xc,   &IID_IPersistPropertyBag },
203             {   0x10,   &IID_IQuickActivate },
204             {   0x14,   &IID_IOleControl },
205             {   0x18,   &IID_IOleObject },
206             {   0x1c,   &IID_IOleInPlaceActiveObject },
207             {   0x20,   &IID_IViewObjectEx },
208             {   0x20,       &IID_IViewObject2 },
209             {   0x20,           &IID_IViewObject },
210             {   0x24,   &IID_IOleInPlaceObjectWindowless },
211             {   0x24,       &IID_IOleInPlaceObject },
212             {   0x24,           &IID_IOleWindow },
213             {   0x28,   &IID_ISpecifyPropertyPages },
214             {   0x38,   &IID_IConnectionPointContainer },
215             {   0x3c,   &IID_IShellChangeNotify },
216             {   0x40,   &IID_IDropTarget },
217             {   0xb4,   &IID_IObjectWithSite },
218             {   0xbc,   &IID_INSCTree2 },
219             {   0xbc,       &IID_INSCTree },
220             {   0xc0,   &IID_IWinEventHandler },
221             {   0xc4,   &IID_IShellBrowser },
222             {   0xc8,   &IID_IFolderFilterSite },
223         }
224     },
225     {
226         ID_NAME(CLSID_TaskbarList),
227         {
228             {    0x0,   &IID_ITaskbarList2 },
229             {    0x0,       &IID_ITaskbarList },
230             {    0x0,           &IID_IUnknown },
231         }
232     },
233     {
234         ID_NAME(CLSID_AttachmentServices ),
235         {
236             {    0x0,   &IID_IAttachmentExecute },
237             {    0x0,       &IID_IUnknown },
238         }
239     },
240 };
241 static const INT ExpectedInterfaceCount = RTL_NUMBER_OF(ExpectedInterfaces);
242 
243 START_TEST(shdocvw)
244 {
245     TestClasses(L"shdocvw", ExpectedInterfaces, ExpectedInterfaceCount);
246 }
247