comdlg32: Implement SetFileTypes and GetFileTypeIndex/SetFileTypeIndex for the Item...
[wine.git] / dlls / comdlg32 / tests / itemdlg.c
blob848d8157417135bf7b07adefd1f17590fd080c5e
1 /*
2 * Unit tests for the Common Item Dialog
4 * Copyright 2010,2011 David Hedberg
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #define COBJMACROS
24 #include "shlobj.h"
25 #include "wine/test.h"
27 static HRESULT (WINAPI *pSHCreateShellItem)(LPCITEMIDLIST,IShellFolder*,LPCITEMIDLIST,IShellItem**);
28 static HRESULT (WINAPI *pSHGetIDListFromObject)(IUnknown*, PIDLIST_ABSOLUTE*);
30 static void init_function_pointers(void)
32 HMODULE hmod = GetModuleHandleA("shell32.dll");
34 #define MAKEFUNC(f) (p##f = (void*)GetProcAddress(hmod, #f))
35 MAKEFUNC(SHCreateShellItem);
36 MAKEFUNC(SHGetIDListFromObject);
37 #undef MAKEFUNC
40 static BOOL test_instantiation(void)
42 IFileDialog *pfd;
43 IFileOpenDialog *pfod;
44 IFileSaveDialog *pfsd;
45 IServiceProvider *psp;
46 IUnknown *punk;
47 HRESULT hr;
49 /* Instantiate FileOpenDialog */
50 hr = CoCreateInstance(&CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER,
51 &IID_IFileOpenDialog, (void**)&pfod);
52 if(FAILED(hr))
54 skip("Could not instantiate the FileOpenDialog.\n");
55 return FALSE;
57 ok(hr == S_OK, "got 0x%08x.\n", hr);
59 hr = IFileOpenDialog_QueryInterface(pfod, &IID_IFileDialog, (void**)&pfd);
60 ok(hr == S_OK, "got 0x%08x.\n", hr);
61 if(SUCCEEDED(hr)) IFileDialog_Release(pfd);
63 hr = IFileOpenDialog_QueryInterface(pfod, &IID_IFileDialogCustomize, (void**)&pfd);
64 todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
65 if(SUCCEEDED(hr)) IFileDialog_Release(pfd);
67 hr = IFileOpenDialog_QueryInterface(pfod, &IID_IFileSaveDialog, (void**)&pfsd);
68 ok(hr == E_NOINTERFACE, "got 0x%08x.\n", hr);
69 if(SUCCEEDED(hr)) IFileOpenDialog_Release(pfsd);
71 hr = IFileOpenDialog_QueryInterface(pfod, &IID_IServiceProvider, (void**)&psp);
72 todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
73 if(SUCCEEDED(hr))
75 IExplorerBrowser *peb;
76 IShellBrowser *psb;
78 hr = IServiceProvider_QueryService(psp, &SID_STopLevelBrowser, &IID_IExplorerBrowser, (void**)&peb);
79 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
80 if(SUCCEEDED(hr)) IExplorerBrowser_Release(peb);
81 hr = IServiceProvider_QueryService(psp, &SID_STopLevelBrowser, &IID_IShellBrowser, (void**)&psb);
82 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
83 if(SUCCEEDED(hr)) IShellBrowser_Release(psb);
84 hr = IServiceProvider_QueryService(psp, &SID_STopLevelBrowser, &IID_ICommDlgBrowser, (void**)&punk);
85 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
86 if(SUCCEEDED(hr)) IUnknown_Release(punk);
87 hr = IServiceProvider_QueryService(psp, &SID_STopLevelBrowser, &IID_ICommDlgBrowser, (void**)&punk);
88 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
89 if(SUCCEEDED(hr)) IUnknown_Release(punk);
91 IServiceProvider_Release(psp);
94 hr = IFileOpenDialog_QueryInterface(pfod, &IID_IFileDialogEvents, (void**)&pfd);
95 ok(hr == E_NOINTERFACE, "got 0x%08x.\n", hr);
96 if(SUCCEEDED(hr)) IFileDialogEvents_Release(pfd);
98 hr = IFileOpenDialog_QueryInterface(pfod, &IID_IExplorerBrowser, (void**)&punk);
99 ok(hr == E_NOINTERFACE, "got 0x%08x.\n", hr);
100 if(SUCCEEDED(hr)) IUnknown_Release(punk);
102 hr = IFileOpenDialog_QueryInterface(pfod, &IID_IExplorerBrowserEvents, (void**)&punk);
103 todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
104 if(SUCCEEDED(hr)) IUnknown_Release(punk);
106 hr = IFileOpenDialog_QueryInterface(pfod, &IID_IShellBrowser, (void**)&punk);
107 ok(hr == E_NOINTERFACE, "got 0x%08x.\n", hr);
108 if(SUCCEEDED(hr)) IUnknown_Release(punk);
110 IFileOpenDialog_Release(pfod);
112 /* Instantiate FileSaveDialog */
113 hr = CoCreateInstance(&CLSID_FileSaveDialog, NULL, CLSCTX_INPROC_SERVER,
114 &IID_IFileSaveDialog, (void**)&pfsd);
115 if(FAILED(hr))
117 skip("Could not instantiate the FileSaveDialog.\n");
118 return FALSE;
120 ok(hr == S_OK, "got 0x%08x.\n", hr);
122 hr = IFileSaveDialog_QueryInterface(pfsd, &IID_IFileDialog, (void**)&pfd);
123 ok(hr == S_OK, "got 0x%08x.\n", hr);
124 if(SUCCEEDED(hr)) IFileDialog_Release(pfd);
126 hr = IFileSaveDialog_QueryInterface(pfsd, &IID_IFileDialogCustomize, (void**)&pfd);
127 todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
128 if(SUCCEEDED(hr)) IFileDialogCustomize_Release(pfd);
130 hr = IFileOpenDialog_QueryInterface(pfsd, &IID_IFileOpenDialog, (void**)&pfod);
131 ok(hr == E_NOINTERFACE, "got 0x%08x.\n", hr);
132 if(SUCCEEDED(hr)) IFileOpenDialog_Release(pfod);
134 hr = IFileSaveDialog_QueryInterface(pfsd, &IID_IFileDialogEvents, (void**)&pfd);
135 ok(hr == E_NOINTERFACE, "got 0x%08x.\n", hr);
136 if(SUCCEEDED(hr)) IFileDialogEvents_Release(pfd);
138 hr = IFileSaveDialog_QueryInterface(pfsd, &IID_IExplorerBrowser, (void**)&punk);
139 ok(hr == E_NOINTERFACE, "got 0x%08x.\n", hr);
140 if(SUCCEEDED(hr)) IUnknown_Release(punk);
142 hr = IFileSaveDialog_QueryInterface(pfsd, &IID_IExplorerBrowserEvents, (void**)&punk);
143 todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
144 if(SUCCEEDED(hr)) IUnknown_Release(punk);
146 hr = IFileSaveDialog_QueryInterface(pfsd, &IID_IShellBrowser, (void**)&punk);
147 ok(hr == E_NOINTERFACE, "got 0x%08x.\n", hr);
148 if(SUCCEEDED(hr)) IUnknown_Release(punk);
150 IFileSaveDialog_Release(pfsd);
151 return TRUE;
154 static void test_basics(void)
156 IFileOpenDialog *pfod;
157 IFileSaveDialog *pfsd;
158 IFileDialog2 *pfd2;
159 FILEOPENDIALOGOPTIONS fdoptions;
160 IShellFolder *psfdesktop;
161 IShellItem *psi, *psidesktop, *psi_original;
162 IShellItemArray *psia;
163 IPropertyStore *pps;
164 LPITEMIDLIST pidl;
165 WCHAR *filename;
166 UINT filetype;
167 HRESULT hr;
168 const WCHAR txt[] = {'t','x','t', 0};
169 const WCHAR null[] = {0};
170 const WCHAR fname1[] = {'f','n','a','m','e','1', 0};
171 const WCHAR fspec1[] = {'*','.','t','x','t',0};
172 const WCHAR fname2[] = {'f','n','a','m','e','2', 0};
173 const WCHAR fspec2[] = {'*','.','e','x','e',0};
174 COMDLG_FILTERSPEC filterspec[2] = {{fname1, fspec1}, {fname2, fspec2}};
176 /* This should work on every platform with IFileDialog */
177 SHGetDesktopFolder(&psfdesktop);
178 hr = pSHGetIDListFromObject((IUnknown*)psfdesktop, &pidl);
179 if(SUCCEEDED(hr))
181 hr = pSHCreateShellItem(NULL, NULL, pidl, &psidesktop);
182 ILFree(pidl);
184 IShellFolder_Release(psfdesktop);
185 if(FAILED(hr))
187 skip("Failed to get ShellItem from DesktopFolder, skipping tests.\n");
188 return;
192 /* Instantiate FileOpenDialog and FileSaveDialog */
193 hr = CoCreateInstance(&CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER,
194 &IID_IFileOpenDialog, (void**)&pfod);
195 ok(hr == S_OK, "got 0x%08x.\n", hr);
196 hr = CoCreateInstance(&CLSID_FileSaveDialog, NULL, CLSCTX_INPROC_SERVER,
197 &IID_IFileSaveDialog, (void**)&pfsd);
198 ok(hr == S_OK, "got 0x%08x.\n", hr);
200 /* ClearClientData */
201 todo_wine
203 hr = IFileOpenDialog_ClearClientData(pfod);
204 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
205 hr = IFileSaveDialog_ClearClientData(pfsd);
206 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
209 /* GetOptions */
210 hr = IFileOpenDialog_GetOptions(pfod, NULL);
211 ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
212 hr = IFileSaveDialog_GetOptions(pfsd, NULL);
213 ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
215 /* Check default options */
216 hr = IFileOpenDialog_GetOptions(pfod, &fdoptions);
217 ok(hr == S_OK, "got 0x%08x.\n", hr);
218 ok(fdoptions == (FOS_PATHMUSTEXIST | FOS_FILEMUSTEXIST | FOS_NOCHANGEDIR),
219 "Unexpected default options: 0x%08x\n", fdoptions);
220 hr = IFileSaveDialog_GetOptions(pfsd, &fdoptions);
221 ok(hr == S_OK, "got 0x%08x.\n", hr);
222 ok(fdoptions == (FOS_OVERWRITEPROMPT | FOS_NOREADONLYRETURN | FOS_PATHMUSTEXIST | FOS_NOCHANGEDIR),
223 "Unexpected default options: 0x%08x\n", fdoptions);
225 /* GetResult */
226 todo_wine
228 hr = IFileOpenDialog_GetResult(pfod, NULL);
229 ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
230 hr = IFileSaveDialog_GetResult(pfsd, NULL);
231 ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
234 psi = (void*)0xdeadbeef;
235 hr = IFileOpenDialog_GetResult(pfod, &psi);
236 todo_wine ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
237 ok(psi == (void*)0xdeadbeef, "got %p.\n", psi);
238 psi = (void*)0xdeadbeef;
239 hr = IFileSaveDialog_GetResult(pfsd, &psi);
240 todo_wine ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
241 ok(psi == (void*)0xdeadbeef, "got %p.\n", psi);
243 /* GetCurrentSelection */
244 if(0) {
245 /* Crashes on Vista/W2K8. Tests below passes on Windows 7 */
246 hr = IFileOpenDialog_GetCurrentSelection(pfod, NULL);
247 ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
248 hr = IFileSaveDialog_GetCurrentSelection(pfsd, NULL);
249 ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
250 hr = IFileOpenDialog_GetCurrentSelection(pfod, &psi);
251 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
252 hr = IFileSaveDialog_GetCurrentSelection(pfsd, &psi);
253 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
256 /* GetFileName */
257 todo_wine
259 hr = IFileOpenDialog_GetFileName(pfod, NULL);
260 ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
261 filename = (void*)0xdeadbeef;
262 hr = IFileOpenDialog_GetFileName(pfod, &filename);
263 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
264 ok(filename == NULL, "got %p\n", filename);
265 hr = IFileSaveDialog_GetFileName(pfsd, NULL);
266 ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
267 filename = (void*)0xdeadbeef;
268 hr = IFileSaveDialog_GetFileName(pfsd, &filename);
269 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
270 ok(filename == NULL, "got %p\n", filename);
273 /* GetFileTypeIndex */
274 hr = IFileOpenDialog_GetFileTypeIndex(pfod, NULL);
275 ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
276 filetype = 0x12345;
277 hr = IFileOpenDialog_GetFileTypeIndex(pfod, &filetype);
278 ok(hr == S_OK, "got 0x%08x.\n", hr);
279 ok(filetype == 0, "got %d.\n", filetype);
280 hr = IFileSaveDialog_GetFileTypeIndex(pfsd, NULL);
281 ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
282 filetype = 0x12345;
283 hr = IFileSaveDialog_GetFileTypeIndex(pfsd, &filetype);
284 ok(hr == S_OK, "got 0x%08x.\n", hr);
285 ok(filetype == 0, "got %d.\n", filetype);
287 /* SetFileTypes / SetFileTypeIndex */
288 hr = IFileOpenDialog_SetFileTypes(pfod, 0, NULL);
289 ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
290 hr = IFileOpenDialog_SetFileTypes(pfod, 0, filterspec);
291 ok(hr == S_OK, "got 0x%08x.\n", hr);
293 hr = IFileOpenDialog_SetFileTypeIndex(pfod, -1);
294 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
295 hr = IFileOpenDialog_SetFileTypeIndex(pfod, 0);
296 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
297 hr = IFileOpenDialog_SetFileTypeIndex(pfod, 1);
298 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
299 hr = IFileOpenDialog_SetFileTypes(pfod, 1, filterspec);
300 ok(hr == S_OK, "got 0x%08x.\n", hr);
301 hr = IFileOpenDialog_SetFileTypes(pfod, 0, filterspec);
302 ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
303 hr = IFileOpenDialog_SetFileTypeIndex(pfod, 0);
304 ok(hr == S_OK, "got 0x%08x.\n", hr);
305 hr = IFileOpenDialog_SetFileTypeIndex(pfod, 100);
306 ok(hr == S_OK, "got 0x%08x.\n", hr);
307 hr = IFileOpenDialog_SetFileTypes(pfod, 1, filterspec);
308 ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
309 hr = IFileOpenDialog_SetFileTypes(pfod, 1, &filterspec[1]);
310 ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
312 hr = IFileSaveDialog_SetFileTypeIndex(pfsd, -1);
313 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
314 hr = IFileSaveDialog_SetFileTypeIndex(pfsd, 0);
315 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
316 hr = IFileSaveDialog_SetFileTypeIndex(pfsd, 1);
317 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
318 hr = IFileSaveDialog_SetFileTypes(pfsd, 1, filterspec);
319 ok(hr == S_OK, "got 0x%08x.\n", hr);
320 hr = IFileSaveDialog_SetFileTypeIndex(pfsd, 0);
321 ok(hr == S_OK, "got 0x%08x.\n", hr);
322 hr = IFileSaveDialog_SetFileTypeIndex(pfsd, 100);
323 ok(hr == S_OK, "got 0x%08x.\n", hr);
324 hr = IFileSaveDialog_SetFileTypes(pfsd, 1, filterspec);
325 ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
326 hr = IFileSaveDialog_SetFileTypes(pfsd, 1, &filterspec[1]);
327 ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
329 /* SetFilter */
330 todo_wine
332 hr = IFileOpenDialog_SetFilter(pfod, NULL);
333 ok(hr == S_OK, "got 0x%08x.\n", hr);
334 hr = IFileSaveDialog_SetFilter(pfsd, NULL);
335 ok(hr == S_OK, "got 0x%08x.\n", hr);
338 /* SetFolder */
339 todo_wine
341 hr = IFileOpenDialog_SetFolder(pfod, NULL);
342 ok(hr == S_OK, "got 0x%08x.\n", hr);
343 hr = IFileSaveDialog_SetFolder(pfsd, NULL);
344 ok(hr == S_OK, "got 0x%08x.\n", hr);
347 /* SetDefaultExtension */
348 todo_wine
350 hr = IFileOpenDialog_SetDefaultExtension(pfod, NULL);
351 ok(hr == S_OK, "got 0x%08x.\n", hr);
352 hr = IFileOpenDialog_SetDefaultExtension(pfod, txt);
353 ok(hr == S_OK, "got 0x%08x.\n", hr);
354 hr = IFileOpenDialog_SetDefaultExtension(pfod, null);
355 ok(hr == S_OK, "got 0x%08x.\n", hr);
357 hr = IFileSaveDialog_SetDefaultExtension(pfsd, NULL);
358 ok(hr == S_OK, "got 0x%08x.\n", hr);
359 hr = IFileSaveDialog_SetDefaultExtension(pfsd, txt);
360 ok(hr == S_OK, "got 0x%08x.\n", hr);
361 hr = IFileSaveDialog_SetDefaultExtension(pfsd, null);
362 ok(hr == S_OK, "got 0x%08x.\n", hr);
365 /* SetDefaultFolder */
366 todo_wine
368 hr = IFileOpenDialog_SetDefaultFolder(pfod, NULL);
369 ok(hr == S_OK, "got 0x%08x\n", hr);
370 hr = IFileSaveDialog_SetDefaultFolder(pfsd, NULL);
371 ok(hr == S_OK, "got 0x%08x\n", hr);
373 hr = IFileOpenDialog_SetDefaultFolder(pfod, psidesktop);
374 ok(hr == S_OK, "got 0x%08x\n", hr);
375 hr = IFileSaveDialog_SetDefaultFolder(pfsd, psidesktop);
376 ok(hr == S_OK, "got 0x%08x\n", hr);
379 if(0)
381 /* Crashes under Windows 7 */
382 IFileOpenDialog_SetDefaultFolder(pfod, (void*)0x1234);
383 IFileSaveDialog_SetDefaultFolder(pfsd, (void*)0x1234);
386 /* GetFolder / SetFolder */
387 hr = IFileOpenDialog_GetFolder(pfod, NULL);
388 todo_wine ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
390 hr = IFileOpenDialog_GetFolder(pfod, &psi_original);
391 todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
392 if(SUCCEEDED(hr))
394 hr = IFileOpenDialog_SetFolder(pfod, psidesktop);
395 ok(hr == S_OK, "got 0x%08x.\n", hr);
396 hr = IFileOpenDialog_SetFolder(pfod, psi_original);
397 ok(hr == S_OK, "got 0x%08x.\n", hr);
398 IShellItem_Release(psi_original);
401 hr = IFileSaveDialog_GetFolder(pfsd, &psi_original);
402 todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
403 if(SUCCEEDED(hr))
405 hr = IFileSaveDialog_SetFolder(pfsd, psidesktop);
406 ok(hr == S_OK, "got 0x%08x.\n", hr);
407 hr = IFileSaveDialog_SetFolder(pfsd, psi_original);
408 ok(hr == S_OK, "got 0x%08x.\n", hr);
409 IShellItem_Release(psi_original);
412 /* AddPlace */
413 if(0)
415 /* Crashes under Windows 7 */
416 IFileOpenDialog_AddPlace(pfod, NULL, 0);
417 IFileSaveDialog_AddPlace(pfsd, NULL, 0);
420 todo_wine
422 hr = IFileOpenDialog_AddPlace(pfod, psidesktop, FDAP_TOP + 1);
423 ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
424 hr = IFileOpenDialog_AddPlace(pfod, psidesktop, FDAP_BOTTOM);
425 ok(hr == S_OK, "got 0x%08x\n", hr);
426 hr = IFileOpenDialog_AddPlace(pfod, psidesktop, FDAP_TOP);
427 ok(hr == S_OK, "got 0x%08x\n", hr);
429 hr = IFileSaveDialog_AddPlace(pfsd, psidesktop, FDAP_TOP + 1);
430 ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
431 hr = IFileSaveDialog_AddPlace(pfsd, psidesktop, FDAP_BOTTOM);
432 ok(hr == S_OK, "got 0x%08x\n", hr);
433 hr = IFileSaveDialog_AddPlace(pfsd, psidesktop, FDAP_TOP);
434 ok(hr == S_OK, "got 0x%08x\n", hr);
437 /* SetFileName */
438 todo_wine
440 hr = IFileOpenDialog_SetFileName(pfod, NULL);
441 ok(hr == S_OK, "got 0x%08x\n", hr);
442 hr = IFileOpenDialog_SetFileName(pfod, null);
443 ok(hr == S_OK, "got 0x%08x\n", hr);
444 hr = IFileOpenDialog_SetFileName(pfod, txt);
445 ok(hr == S_OK, "got 0x%08x\n", hr);
447 hr = IFileSaveDialog_SetFileName(pfsd, NULL);
448 ok(hr == S_OK, "got 0x%08x\n", hr);
449 hr = IFileSaveDialog_SetFileName(pfsd, null);
450 ok(hr == S_OK, "got 0x%08x\n", hr);
451 hr = IFileSaveDialog_SetFileName(pfsd, txt);
452 ok(hr == S_OK, "got 0x%08x\n", hr);
455 /* SetFileNameLabel */
456 todo_wine
458 hr = IFileOpenDialog_SetFileNameLabel(pfod, NULL);
459 ok(hr == S_OK, "got 0x%08x\n", hr);
460 hr = IFileOpenDialog_SetFileNameLabel(pfod, null);
461 ok(hr == S_OK, "got 0x%08x\n", hr);
462 hr = IFileOpenDialog_SetFileNameLabel(pfod, txt);
463 ok(hr == S_OK, "got 0x%08x\n", hr);
465 hr = IFileSaveDialog_SetFileNameLabel(pfsd, NULL);
466 ok(hr == S_OK, "got 0x%08x\n", hr);
467 hr = IFileSaveDialog_SetFileNameLabel(pfsd, null);
468 ok(hr == S_OK, "got 0x%08x\n", hr);
469 hr = IFileSaveDialog_SetFileNameLabel(pfsd, txt);
470 ok(hr == S_OK, "got 0x%08x\n", hr);
473 /* Close */
474 todo_wine
476 hr = IFileOpenDialog_Close(pfod, S_FALSE);
477 ok(hr == S_OK, "got 0x%08x\n", hr);
478 hr = IFileSaveDialog_Close(pfsd, S_FALSE);
479 ok(hr == S_OK, "got 0x%08x\n", hr);
482 /* SetOkButtonLabel */
483 todo_wine
485 hr = IFileOpenDialog_SetOkButtonLabel(pfod, NULL);
486 ok(hr == S_OK, "got 0x%08x\n", hr);
487 hr = IFileOpenDialog_SetOkButtonLabel(pfod, null);
488 ok(hr == S_OK, "got 0x%08x\n", hr);
489 hr = IFileOpenDialog_SetOkButtonLabel(pfod, txt);
490 ok(hr == S_OK, "got 0x%08x\n", hr);
491 hr = IFileSaveDialog_SetOkButtonLabel(pfsd, NULL);
492 ok(hr == S_OK, "got 0x%08x\n", hr);
493 hr = IFileSaveDialog_SetOkButtonLabel(pfsd, null);
494 ok(hr == S_OK, "got 0x%08x\n", hr);
495 hr = IFileSaveDialog_SetOkButtonLabel(pfsd, txt);
496 ok(hr == S_OK, "got 0x%08x\n", hr);
499 /* SetTitle */
500 todo_wine
502 hr = IFileOpenDialog_SetTitle(pfod, NULL);
503 ok(hr == S_OK, "got 0x%08x\n", hr);
504 hr = IFileOpenDialog_SetTitle(pfod, null);
505 ok(hr == S_OK, "got 0x%08x\n", hr);
506 hr = IFileOpenDialog_SetTitle(pfod, txt);
507 ok(hr == S_OK, "got 0x%08x\n", hr);
508 hr = IFileSaveDialog_SetTitle(pfsd, NULL);
509 ok(hr == S_OK, "got 0x%08x\n", hr);
510 hr = IFileSaveDialog_SetTitle(pfsd, null);
511 ok(hr == S_OK, "got 0x%08x\n", hr);
512 hr = IFileSaveDialog_SetTitle(pfsd, txt);
513 ok(hr == S_OK, "got 0x%08x\n", hr);
516 /** IFileOpenDialog specific **/
518 /* GetResults */
519 if(0)
521 /* Crashes under Windows 7 */
522 IFileOpenDialog_GetResults(pfod, NULL);
524 psia = (void*)0xdeadbeef;
525 hr = IFileOpenDialog_GetResults(pfod, &psia);
526 todo_wine ok(hr == E_FAIL, "got 0x%08x.\n", hr);
527 todo_wine ok(psia == NULL, "got %p.\n", psia);
529 /* GetSelectedItems */
530 if(0)
532 /* Crashes under W2K8 */
533 hr = IFileOpenDialog_GetSelectedItems(pfod, NULL);
534 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
535 psia = (void*)0xdeadbeef;
536 hr = IFileOpenDialog_GetSelectedItems(pfod, &psia);
537 ok(hr == E_FAIL, "got 0x%08x.\n", hr);
538 ok(psia == (void*)0xdeadbeef, "got %p.\n", psia);
541 /** IFileSaveDialog specific **/
543 /* ApplyProperties */
544 if(0)
546 /* Crashes under windows 7 */
547 IFileSaveDialog_ApplyProperties(pfsd, NULL, NULL, NULL, NULL);
548 IFileSaveDialog_ApplyProperties(pfsd, psidesktop, NULL, NULL, NULL);
551 /* GetProperties */
552 hr = IFileSaveDialog_GetProperties(pfsd, NULL);
553 todo_wine ok(hr == E_UNEXPECTED, "got 0x%08x\n", hr);
554 pps = (void*)0xdeadbeef;
555 hr = IFileSaveDialog_GetProperties(pfsd, &pps);
556 todo_wine ok(hr == E_UNEXPECTED, "got 0x%08x\n", hr);
557 ok(pps == (void*)0xdeadbeef, "got %p\n", pps);
559 /* SetProperties */
560 if(0)
562 /* Crashes under W2K8 */
563 hr = IFileSaveDialog_SetProperties(pfsd, NULL);
564 ok(hr == S_OK, "got 0x%08x\n", hr);
567 /* SetCollectedProperties */
568 todo_wine
570 hr = IFileSaveDialog_SetCollectedProperties(pfsd, NULL, TRUE);
571 ok(hr == S_OK, "got 0x%08x\n", hr);
572 hr = IFileSaveDialog_SetCollectedProperties(pfsd, NULL, FALSE);
573 ok(hr == S_OK, "got 0x%08x\n", hr);
576 /* SetSaveAsItem */
577 todo_wine
579 hr = IFileSaveDialog_SetSaveAsItem(pfsd, NULL);
580 ok(hr == S_OK, "got 0x%08x\n", hr);
581 hr = IFileSaveDialog_SetSaveAsItem(pfsd, psidesktop);
582 ok(hr == MK_E_NOOBJECT, "got 0x%08x\n", hr);
585 /** IFileDialog2 **/
587 hr = IFileOpenDialog_QueryInterface(pfod, &IID_IFileDialog2, (void**)&pfd2);
588 ok((hr == S_OK) || broken(hr == E_NOINTERFACE), "got 0x%08x\n", hr);
589 if(SUCCEEDED(hr))
591 /* SetCancelButtonLabel */
592 todo_wine
594 hr = IFileDialog2_SetOkButtonLabel(pfd2, NULL);
595 ok(hr == S_OK, "got 0x%08x\n", hr);
596 hr = IFileDialog2_SetOkButtonLabel(pfd2, null);
597 ok(hr == S_OK, "got 0x%08x\n", hr);
598 hr = IFileDialog2_SetOkButtonLabel(pfd2, txt);
599 ok(hr == S_OK, "got 0x%08x\n", hr);
602 /* SetNavigationRoot */
603 todo_wine
605 hr = IFileDialog2_SetNavigationRoot(pfd2, NULL);
606 ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
607 hr = IFileDialog2_SetNavigationRoot(pfd2, psidesktop);
608 ok(hr == S_OK, "got 0x%08x\n", hr);
611 IFileDialog2_Release(pfd2);
614 hr = IFileSaveDialog_QueryInterface(pfsd, &IID_IFileDialog2, (void**)&pfd2);
615 ok((hr == S_OK) || broken(hr == E_NOINTERFACE), "got 0x%08x\n", hr);
616 if(SUCCEEDED(hr))
618 /* SetCancelButtonLabel */
619 todo_wine
621 hr = IFileDialog2_SetOkButtonLabel(pfd2, NULL);
622 ok(hr == S_OK, "got 0x%08x\n", hr);
623 hr = IFileDialog2_SetOkButtonLabel(pfd2, null);
624 ok(hr == S_OK, "got 0x%08x\n", hr);
625 hr = IFileDialog2_SetOkButtonLabel(pfd2, txt);
626 ok(hr == S_OK, "got 0x%08x\n", hr);
629 /* SetNavigationRoot */
630 todo_wine
632 hr = IFileDialog2_SetNavigationRoot(pfd2, NULL);
633 ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
634 hr = IFileDialog2_SetNavigationRoot(pfd2, psidesktop);
635 ok(hr == S_OK, "got 0x%08x\n", hr);
638 IFileDialog2_Release(pfd2);
641 /* Cleanup */
642 IShellItem_Release(psidesktop);
643 IFileOpenDialog_Release(pfod);
644 IFileSaveDialog_Release(pfsd);
647 START_TEST(itemdlg)
649 OleInitialize(NULL);
650 init_function_pointers();
652 if(test_instantiation())
654 test_basics();
656 else
657 skip("Skipping all Item Dialog tests.\n");
659 OleUninitialize();