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
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
);
40 static BOOL
test_instantiation(void)
43 IFileOpenDialog
*pfod
;
44 IFileSaveDialog
*pfsd
;
45 IServiceProvider
*psp
;
49 /* Instantiate FileOpenDialog */
50 hr
= CoCreateInstance(&CLSID_FileOpenDialog
, NULL
, CLSCTX_INPROC_SERVER
,
51 &IID_IFileOpenDialog
, (void**)&pfod
);
54 skip("Could not instantiate the FileOpenDialog.\n");
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
);
75 IExplorerBrowser
*peb
;
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
);
117 skip("Could not instantiate the FileSaveDialog.\n");
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
);
154 static void test_basics(void)
156 IFileOpenDialog
*pfod
;
157 IFileSaveDialog
*pfsd
;
159 FILEOPENDIALOGOPTIONS fdoptions
;
160 IShellFolder
*psfdesktop
;
161 IShellItem
*psi
, *psidesktop
, *psi_original
;
162 IShellItemArray
*psia
;
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
);
181 hr
= pSHCreateShellItem(NULL
, NULL
, pidl
, &psidesktop
);
184 IShellFolder_Release(psfdesktop
);
187 skip("Failed to get ShellItem from DesktopFolder, skipping tests.\n");
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 */
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
);
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
);
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 */
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
);
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
);
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
);
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
);
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
);
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 */
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 */
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
);
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
);
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
);
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
);
415 /* Crashes under Windows 7 */
416 IFileOpenDialog_AddPlace(pfod
, NULL
, 0);
417 IFileSaveDialog_AddPlace(pfsd
, NULL
, 0);
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
);
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 */
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
);
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 */
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
);
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 **/
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 */
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 */
546 /* Crashes under windows 7 */
547 IFileSaveDialog_ApplyProperties(pfsd
, NULL
, NULL
, NULL
, NULL
);
548 IFileSaveDialog_ApplyProperties(pfsd
, psidesktop
, NULL
, NULL
, NULL
);
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
);
562 /* Crashes under W2K8 */
563 hr
= IFileSaveDialog_SetProperties(pfsd
, NULL
);
564 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
567 /* SetCollectedProperties */
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
);
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
);
587 hr
= IFileOpenDialog_QueryInterface(pfod
, &IID_IFileDialog2
, (void**)&pfd2
);
588 ok((hr
== S_OK
) || broken(hr
== E_NOINTERFACE
), "got 0x%08x\n", hr
);
591 /* SetCancelButtonLabel */
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 */
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
);
618 /* SetCancelButtonLabel */
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 */
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
);
642 IShellItem_Release(psidesktop
);
643 IFileOpenDialog_Release(pfod
);
644 IFileSaveDialog_Release(pfsd
);
650 init_function_pointers();
652 if(test_instantiation())
657 skip("Skipping all Item Dialog tests.\n");