[PATCH 2/6] comdlg32/tests: Add initial tests for the Item Dialog. (resend)
David Hedberg
david.hedberg at gmail.com
Tue Mar 29 14:13:19 CDT 2011
---
dlls/comdlg32/tests/Makefile.in | 3 +-
dlls/comdlg32/tests/filedlg.c | 1 -
dlls/comdlg32/tests/itemdlg.c | 672 +++++++++++++++++++++++++++++++++++++++
3 files changed, 674 insertions(+), 2 deletions(-)
create mode 100644 dlls/comdlg32/tests/itemdlg.c
diff --git a/dlls/comdlg32/tests/Makefile.in b/dlls/comdlg32/tests/Makefile.in
index 8cc48e9..da9f699 100644
--- a/dlls/comdlg32/tests/Makefile.in
+++ b/dlls/comdlg32/tests/Makefile.in
@@ -1,10 +1,11 @@
TESTDLL = comdlg32.dll
-IMPORTS = comdlg32 winspool user32 gdi32
+IMPORTS = uuid shell32 ole32 comdlg32 winspool user32 gdi32
C_SRCS = \
filedlg.c \
finddlg.c \
fontdlg.c \
+ itemdlg.c \
printdlg.c
RC_SRCS = rsrc.rc
diff --git a/dlls/comdlg32/tests/filedlg.c b/dlls/comdlg32/tests/filedlg.c
index 7f5d175..0704ce6 100644
--- a/dlls/comdlg32/tests/filedlg.c
+++ b/dlls/comdlg32/tests/filedlg.c
@@ -22,7 +22,6 @@
#include <windows.h>
#include <wine/test.h>
-#include "initguid.h"
#include "shlguid.h"
#define COBJMACROS
#include "shobjidl.h"
diff --git a/dlls/comdlg32/tests/itemdlg.c b/dlls/comdlg32/tests/itemdlg.c
new file mode 100644
index 0000000..c345498
--- /dev/null
+++ b/dlls/comdlg32/tests/itemdlg.c
@@ -0,0 +1,672 @@
+/*
+ * Unit tests for the Common Item Dialog
+ *
+ * Copyright 2010,2011 David Hedberg
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+#define COBJMACROS
+
+#include "shlobj.h"
+#include "wine/test.h"
+
+static HRESULT (WINAPI *pSHCreateShellItem)(LPCITEMIDLIST,IShellFolder*,LPCITEMIDLIST,IShellItem**);
+static HRESULT (WINAPI *pSHGetIDListFromObject)(IUnknown*, PIDLIST_ABSOLUTE*);
+
+static void init_function_pointers(void)
+{
+ HMODULE hmod = GetModuleHandleA("shell32.dll");
+
+#define MAKEFUNC(f) (p##f = (void*)GetProcAddress(hmod, #f))
+ MAKEFUNC(SHCreateShellItem);
+ MAKEFUNC(SHGetIDListFromObject);
+#undef MAKEFUNC
+}
+
+static BOOL test_instantiation(void)
+{
+ IFileDialog *pfd;
+ IFileOpenDialog *pfod;
+ IFileSaveDialog *pfsd;
+ IServiceProvider *psp;
+ IUnknown *punk;
+ HRESULT hr;
+
+ /* Instantiate FileOpenDialog */
+ hr = CoCreateInstance(&CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IFileOpenDialog, (void**)&pfod);
+ if(FAILED(hr))
+ {
+ skip("Could not instantiate the FileOpenDialog.\n");
+ return FALSE;
+ }
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ hr = IFileOpenDialog_QueryInterface(pfod, &IID_IFileDialog, (void**)&pfd);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IFileDialog_Release(pfd);
+
+ hr = IFileOpenDialog_QueryInterface(pfod, &IID_IFileDialogCustomize, (void**)&pfd);
+ todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IFileDialog_Release(pfd);
+
+ hr = IFileOpenDialog_QueryInterface(pfod, &IID_IFileSaveDialog, (void**)&pfsd);
+ ok(hr == E_NOINTERFACE, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IFileOpenDialog_Release(pfsd);
+
+ hr = IFileOpenDialog_QueryInterface(pfod, &IID_IServiceProvider, (void**)&psp);
+ todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr))
+ {
+ IExplorerBrowser *peb;
+ IShellBrowser *psb;
+
+ hr = IServiceProvider_QueryService(psp, &SID_STopLevelBrowser, &IID_IExplorerBrowser, (void**)&peb);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IExplorerBrowser_Release(peb);
+ hr = IServiceProvider_QueryService(psp, &SID_STopLevelBrowser, &IID_IShellBrowser, (void**)&psb);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IShellBrowser_Release(psb);
+ hr = IServiceProvider_QueryService(psp, &SID_STopLevelBrowser, &IID_ICommDlgBrowser, (void**)&punk);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IUnknown_Release(punk);
+ hr = IServiceProvider_QueryService(psp, &SID_STopLevelBrowser, &IID_ICommDlgBrowser, (void**)&punk);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IUnknown_Release(punk);
+
+ IServiceProvider_Release(psp);
+ }
+
+ hr = IFileOpenDialog_QueryInterface(pfod, &IID_IFileDialogEvents, (void**)&pfd);
+ ok(hr == E_NOINTERFACE, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IFileDialogEvents_Release(pfd);
+
+ hr = IFileOpenDialog_QueryInterface(pfod, &IID_IExplorerBrowser, (void**)&punk);
+ ok(hr == E_NOINTERFACE, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IUnknown_Release(punk);
+
+ hr = IFileOpenDialog_QueryInterface(pfod, &IID_IExplorerBrowserEvents, (void**)&punk);
+ todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IUnknown_Release(punk);
+
+ hr = IFileOpenDialog_QueryInterface(pfod, &IID_IShellBrowser, (void**)&punk);
+ ok(hr == E_NOINTERFACE, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IUnknown_Release(punk);
+
+ IFileOpenDialog_Release(pfod);
+
+ /* Instantiate FileSaveDialog */
+ hr = CoCreateInstance(&CLSID_FileSaveDialog, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IFileSaveDialog, (void**)&pfsd);
+ if(FAILED(hr))
+ {
+ skip("Could not instantiate the FileSaveDialog.\n");
+ return FALSE;
+ }
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ hr = IFileSaveDialog_QueryInterface(pfsd, &IID_IFileDialog, (void**)&pfd);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IFileDialog_Release(pfd);
+
+ hr = IFileSaveDialog_QueryInterface(pfsd, &IID_IFileDialogCustomize, (void**)&pfd);
+ todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IFileDialogCustomize_Release(pfd);
+
+ hr = IFileOpenDialog_QueryInterface(pfsd, &IID_IFileOpenDialog, (void**)&pfod);
+ ok(hr == E_NOINTERFACE, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IFileOpenDialog_Release(pfod);
+
+ hr = IFileSaveDialog_QueryInterface(pfsd, &IID_IFileDialogEvents, (void**)&pfd);
+ ok(hr == E_NOINTERFACE, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IFileDialogEvents_Release(pfd);
+
+ hr = IFileSaveDialog_QueryInterface(pfsd, &IID_IExplorerBrowser, (void**)&punk);
+ ok(hr == E_NOINTERFACE, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IUnknown_Release(punk);
+
+ hr = IFileSaveDialog_QueryInterface(pfsd, &IID_IExplorerBrowserEvents, (void**)&punk);
+ todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IUnknown_Release(punk);
+
+ hr = IFileSaveDialog_QueryInterface(pfsd, &IID_IShellBrowser, (void**)&punk);
+ ok(hr == E_NOINTERFACE, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr)) IUnknown_Release(punk);
+
+ IFileSaveDialog_Release(pfsd);
+ return TRUE;
+}
+
+static void test_basics(void)
+{
+ IFileOpenDialog *pfod;
+ IFileSaveDialog *pfsd;
+ IFileDialog2 *pfd2;
+ FILEOPENDIALOGOPTIONS fdoptions;
+ IShellFolder *psfdesktop;
+ IShellItem *psi, *psidesktop, *psi_original;
+ IShellItemArray *psia;
+ IPropertyStore *pps;
+ LPITEMIDLIST pidl;
+ WCHAR *filename;
+ UINT filetype;
+ HRESULT hr;
+ const WCHAR txt[] = {'t','x','t', 0};
+ const WCHAR null[] = {0};
+ const WCHAR fname1[] = {'f','n','a','m','e','1', 0};
+ const WCHAR fspec1[] = {'*','.','t','x','t',0};
+ const WCHAR fname2[] = {'f','n','a','m','e','2', 0};
+ const WCHAR fspec2[] = {'*','.','e','x','e',0};
+ COMDLG_FILTERSPEC filterspec[2] = {{fname1, fspec1}, {fname2, fspec2}};
+
+ /* This should work on every platform with IFileDialog */
+ SHGetDesktopFolder(&psfdesktop);
+ hr = pSHGetIDListFromObject((IUnknown*)psfdesktop, &pidl);
+ if(SUCCEEDED(hr))
+ {
+ hr = pSHCreateShellItem(NULL, NULL, pidl, &psidesktop);
+ ILFree(pidl);
+ }
+ IShellFolder_Release(psfdesktop);
+ if(FAILED(hr))
+ {
+ skip("Failed to get ShellItem from DesktopFolder, skipping tests.\n");
+ return;
+ }
+
+
+ /* Instantiate FileOpenDialog and FileSaveDialog */
+ hr = CoCreateInstance(&CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IFileOpenDialog, (void**)&pfod);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ hr = CoCreateInstance(&CLSID_FileSaveDialog, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IFileSaveDialog, (void**)&pfsd);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ /* ClearClientData */
+ todo_wine
+ {
+ hr = IFileOpenDialog_ClearClientData(pfod);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ hr = IFileSaveDialog_ClearClientData(pfsd);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ }
+
+ /* GetOptions */
+ todo_wine
+ {
+ hr = IFileOpenDialog_GetOptions(pfod, NULL);
+ ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
+ hr = IFileSaveDialog_GetOptions(pfsd, NULL);
+ ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
+ }
+
+ /* Check default options */
+ todo_wine
+ {
+ hr = IFileOpenDialog_GetOptions(pfod, &fdoptions);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ ok(fdoptions == (FOS_PATHMUSTEXIST | FOS_FILEMUSTEXIST | FOS_NOCHANGEDIR),
+ "Unexpected default options: 0x%08x\n", fdoptions);
+ hr = IFileSaveDialog_GetOptions(pfsd, &fdoptions);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ ok(fdoptions == (FOS_OVERWRITEPROMPT | FOS_NOREADONLYRETURN | FOS_PATHMUSTEXIST | FOS_NOCHANGEDIR),
+ "Unexpected default options: 0x%08x\n", fdoptions);
+ }
+
+ /* GetResult */
+ todo_wine
+ {
+ hr = IFileOpenDialog_GetResult(pfod, NULL);
+ ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
+ hr = IFileSaveDialog_GetResult(pfsd, NULL);
+ ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
+ }
+
+ psi = (void*)0xdeadbeef;
+ hr = IFileOpenDialog_GetResult(pfod, &psi);
+ todo_wine ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
+ ok(psi == (void*)0xdeadbeef, "got %p.\n", psi);
+ psi = (void*)0xdeadbeef;
+ hr = IFileSaveDialog_GetResult(pfsd, &psi);
+ todo_wine ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
+ ok(psi == (void*)0xdeadbeef, "got %p.\n", psi);
+
+ /* GetCurrentSelection */
+ if(0) {
+ /* Crashes on Vista/W2K8. Tests below passes on Windows 7 */
+ hr = IFileOpenDialog_GetCurrentSelection(pfod, NULL);
+ ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
+ hr = IFileSaveDialog_GetCurrentSelection(pfsd, NULL);
+ ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
+ hr = IFileOpenDialog_GetCurrentSelection(pfod, &psi);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ hr = IFileSaveDialog_GetCurrentSelection(pfsd, &psi);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ }
+
+ /* GetFileName */
+ todo_wine
+ {
+ hr = IFileOpenDialog_GetFileName(pfod, NULL);
+ ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
+ filename = (void*)0xdeadbeef;
+ hr = IFileOpenDialog_GetFileName(pfod, &filename);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ ok(filename == NULL, "got %p\n", filename);
+ hr = IFileSaveDialog_GetFileName(pfsd, NULL);
+ ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
+ filename = (void*)0xdeadbeef;
+ hr = IFileSaveDialog_GetFileName(pfsd, &filename);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ ok(filename == NULL, "got %p\n", filename);
+ }
+
+ /* GetFileTypeIndex */
+ todo_wine
+ {
+ hr = IFileOpenDialog_GetFileTypeIndex(pfod, NULL);
+ ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
+ filetype = 0x12345;
+ hr = IFileOpenDialog_GetFileTypeIndex(pfod, &filetype);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ ok(filetype == 0, "got %d.\n", filetype);
+ hr = IFileSaveDialog_GetFileTypeIndex(pfsd, NULL);
+ ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
+ filetype = 0x12345;
+ hr = IFileSaveDialog_GetFileTypeIndex(pfsd, &filetype);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ ok(filetype == 0, "got %d.\n", filetype);
+ }
+
+ /* SetFileTypes / SetFileTypeIndex */
+ todo_wine
+ {
+ hr = IFileOpenDialog_SetFileTypes(pfod, 0, NULL);
+ ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
+ hr = IFileOpenDialog_SetFileTypes(pfod, 0, filterspec);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ hr = IFileOpenDialog_SetFileTypeIndex(pfod, -1);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ hr = IFileOpenDialog_SetFileTypeIndex(pfod, 0);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ hr = IFileOpenDialog_SetFileTypeIndex(pfod, 1);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ hr = IFileOpenDialog_SetFileTypes(pfod, 1, filterspec);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ hr = IFileOpenDialog_SetFileTypes(pfod, 0, filterspec);
+ ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
+ hr = IFileOpenDialog_SetFileTypeIndex(pfod, 0);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ hr = IFileOpenDialog_SetFileTypeIndex(pfod, 100);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ hr = IFileOpenDialog_SetFileTypes(pfod, 1, filterspec);
+ ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
+ hr = IFileOpenDialog_SetFileTypes(pfod, 1, &filterspec[1]);
+ ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
+
+ hr = IFileSaveDialog_SetFileTypeIndex(pfsd, -1);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ hr = IFileSaveDialog_SetFileTypeIndex(pfsd, 0);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ hr = IFileSaveDialog_SetFileTypeIndex(pfsd, 1);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ hr = IFileSaveDialog_SetFileTypes(pfsd, 1, filterspec);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ hr = IFileSaveDialog_SetFileTypeIndex(pfsd, 0);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ hr = IFileSaveDialog_SetFileTypeIndex(pfsd, 100);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ hr = IFileSaveDialog_SetFileTypes(pfsd, 1, filterspec);
+ ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
+ hr = IFileSaveDialog_SetFileTypes(pfsd, 1, &filterspec[1]);
+ ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
+ }
+
+ /* SetFilter */
+ todo_wine
+ {
+ hr = IFileOpenDialog_SetFilter(pfod, NULL);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ hr = IFileSaveDialog_SetFilter(pfsd, NULL);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ }
+
+ /* SetFolder */
+ todo_wine
+ {
+ hr = IFileOpenDialog_SetFolder(pfod, NULL);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ hr = IFileSaveDialog_SetFolder(pfsd, NULL);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ }
+
+ /* SetDefaultExtension */
+ todo_wine
+ {
+ hr = IFileOpenDialog_SetDefaultExtension(pfod, NULL);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ hr = IFileOpenDialog_SetDefaultExtension(pfod, txt);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ hr = IFileOpenDialog_SetDefaultExtension(pfod, null);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ hr = IFileSaveDialog_SetDefaultExtension(pfsd, NULL);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ hr = IFileSaveDialog_SetDefaultExtension(pfsd, txt);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ hr = IFileSaveDialog_SetDefaultExtension(pfsd, null);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ }
+
+ /* SetDefaultFolder */
+ todo_wine
+ {
+ hr = IFileOpenDialog_SetDefaultFolder(pfod, NULL);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileSaveDialog_SetDefaultFolder(pfsd, NULL);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IFileOpenDialog_SetDefaultFolder(pfod, psidesktop);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileSaveDialog_SetDefaultFolder(pfsd, psidesktop);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ }
+
+ if(0)
+ {
+ /* Crashes under Windows 7 */
+ IFileOpenDialog_SetDefaultFolder(pfod, (void*)0x1234);
+ IFileSaveDialog_SetDefaultFolder(pfsd, (void*)0x1234);
+ }
+
+ /* GetFolder / SetFolder */
+ hr = IFileOpenDialog_GetFolder(pfod, NULL);
+ todo_wine ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
+
+ hr = IFileOpenDialog_GetFolder(pfod, &psi_original);
+ todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr))
+ {
+ hr = IFileOpenDialog_SetFolder(pfod, psidesktop);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ hr = IFileOpenDialog_SetFolder(pfod, psi_original);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ IShellItem_Release(psi_original);
+ }
+
+ hr = IFileSaveDialog_GetFolder(pfsd, &psi_original);
+ todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr))
+ {
+ hr = IFileSaveDialog_SetFolder(pfsd, psidesktop);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ hr = IFileSaveDialog_SetFolder(pfsd, psi_original);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ IShellItem_Release(psi_original);
+ }
+
+ /* AddPlace */
+ if(0)
+ {
+ /* Crashes under Windows 7 */
+ IFileOpenDialog_AddPlace(pfod, NULL, 0);
+ IFileSaveDialog_AddPlace(pfsd, NULL, 0);
+ }
+
+ todo_wine
+ {
+ hr = IFileOpenDialog_AddPlace(pfod, psidesktop, FDAP_TOP + 1);
+ ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
+ hr = IFileOpenDialog_AddPlace(pfod, psidesktop, FDAP_BOTTOM);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileOpenDialog_AddPlace(pfod, psidesktop, FDAP_TOP);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IFileSaveDialog_AddPlace(pfsd, psidesktop, FDAP_TOP + 1);
+ ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
+ hr = IFileSaveDialog_AddPlace(pfsd, psidesktop, FDAP_BOTTOM);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileSaveDialog_AddPlace(pfsd, psidesktop, FDAP_TOP);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ }
+
+ /* SetFileName */
+ todo_wine
+ {
+ hr = IFileOpenDialog_SetFileName(pfod, NULL);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileOpenDialog_SetFileName(pfod, null);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileOpenDialog_SetFileName(pfod, txt);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IFileSaveDialog_SetFileName(pfsd, NULL);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileSaveDialog_SetFileName(pfsd, null);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileSaveDialog_SetFileName(pfsd, txt);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ }
+
+ /* SetFileNameLabel */
+ todo_wine
+ {
+ hr = IFileOpenDialog_SetFileNameLabel(pfod, NULL);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileOpenDialog_SetFileNameLabel(pfod, null);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileOpenDialog_SetFileNameLabel(pfod, txt);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IFileSaveDialog_SetFileNameLabel(pfsd, NULL);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileSaveDialog_SetFileNameLabel(pfsd, null);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileSaveDialog_SetFileNameLabel(pfsd, txt);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ }
+
+ /* Close */
+ todo_wine
+ {
+ hr = IFileOpenDialog_Close(pfod, S_FALSE);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileSaveDialog_Close(pfsd, S_FALSE);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ }
+
+ /* SetOkButtonLabel */
+ todo_wine
+ {
+ hr = IFileOpenDialog_SetOkButtonLabel(pfod, NULL);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileOpenDialog_SetOkButtonLabel(pfod, null);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileOpenDialog_SetOkButtonLabel(pfod, txt);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileSaveDialog_SetOkButtonLabel(pfsd, NULL);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileSaveDialog_SetOkButtonLabel(pfsd, null);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileSaveDialog_SetOkButtonLabel(pfsd, txt);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ }
+
+ /* SetTitle */
+ todo_wine
+ {
+ hr = IFileOpenDialog_SetTitle(pfod, NULL);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileOpenDialog_SetTitle(pfod, null);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileOpenDialog_SetTitle(pfod, txt);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileSaveDialog_SetTitle(pfsd, NULL);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileSaveDialog_SetTitle(pfsd, null);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileSaveDialog_SetTitle(pfsd, txt);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ }
+
+ /** IFileOpenDialog specific **/
+
+ /* GetResults */
+ if(0)
+ {
+ /* Crashes under Windows 7 */
+ IFileOpenDialog_GetResults(pfod, NULL);
+ }
+ psia = (void*)0xdeadbeef;
+ hr = IFileOpenDialog_GetResults(pfod, &psia);
+ todo_wine ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ todo_wine ok(psia == NULL, "got %p.\n", psia);
+
+ /* GetSelectedItems */
+ if(0)
+ {
+ /* Crashes under W2K8 */
+ hr = IFileOpenDialog_GetSelectedItems(pfod, NULL);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ psia = (void*)0xdeadbeef;
+ hr = IFileOpenDialog_GetSelectedItems(pfod, &psia);
+ ok(hr == E_FAIL, "got 0x%08x.\n", hr);
+ ok(psia == (void*)0xdeadbeef, "got %p.\n", psia);
+ }
+
+ /** IFileSaveDialog specific **/
+
+ /* ApplyProperties */
+ if(0)
+ {
+ /* Crashes under windows 7 */
+ IFileSaveDialog_ApplyProperties(pfsd, NULL, NULL, NULL, NULL);
+ IFileSaveDialog_ApplyProperties(pfsd, psidesktop, NULL, NULL, NULL);
+ }
+
+ /* GetProperties */
+ hr = IFileSaveDialog_GetProperties(pfsd, NULL);
+ todo_wine ok(hr == E_UNEXPECTED, "got 0x%08x\n", hr);
+ pps = (void*)0xdeadbeef;
+ hr = IFileSaveDialog_GetProperties(pfsd, &pps);
+ todo_wine ok(hr == E_UNEXPECTED, "got 0x%08x\n", hr);
+ ok(pps == (void*)0xdeadbeef, "got %p\n", pps);
+
+ /* SetProperties */
+ if(0)
+ {
+ /* Crashes under W2K8 */
+ hr = IFileSaveDialog_SetProperties(pfsd, NULL);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ }
+
+ /* SetCollectedProperties */
+ todo_wine
+ {
+ hr = IFileSaveDialog_SetCollectedProperties(pfsd, NULL, TRUE);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileSaveDialog_SetCollectedProperties(pfsd, NULL, FALSE);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ }
+
+ /* SetSaveAsItem */
+ todo_wine
+ {
+ hr = IFileSaveDialog_SetSaveAsItem(pfsd, NULL);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileSaveDialog_SetSaveAsItem(pfsd, psidesktop);
+ ok(hr == MK_E_NOOBJECT, "got 0x%08x\n", hr);
+ }
+
+ /** IFileDialog2 **/
+
+ hr = IFileOpenDialog_QueryInterface(pfod, &IID_IFileDialog2, (void**)&pfd2);
+ ok((hr == S_OK) || broken(hr == E_NOINTERFACE), "got 0x%08x\n", hr);
+ if(SUCCEEDED(hr))
+ {
+ /* SetCancelButtonLabel */
+ todo_wine
+ {
+ hr = IFileDialog2_SetOkButtonLabel(pfd2, NULL);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileDialog2_SetOkButtonLabel(pfd2, null);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileDialog2_SetOkButtonLabel(pfd2, txt);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ }
+
+ /* SetNavigationRoot */
+ todo_wine
+ {
+ hr = IFileDialog2_SetNavigationRoot(pfd2, NULL);
+ ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
+ hr = IFileDialog2_SetNavigationRoot(pfd2, psidesktop);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ }
+
+ IFileDialog2_Release(pfd2);
+ }
+
+ hr = IFileSaveDialog_QueryInterface(pfsd, &IID_IFileDialog2, (void**)&pfd2);
+ ok((hr == S_OK) || broken(hr == E_NOINTERFACE), "got 0x%08x\n", hr);
+ if(SUCCEEDED(hr))
+ {
+ /* SetCancelButtonLabel */
+ todo_wine
+ {
+ hr = IFileDialog2_SetOkButtonLabel(pfd2, NULL);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileDialog2_SetOkButtonLabel(pfd2, null);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IFileDialog2_SetOkButtonLabel(pfd2, txt);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ }
+
+ /* SetNavigationRoot */
+ todo_wine
+ {
+ hr = IFileDialog2_SetNavigationRoot(pfd2, NULL);
+ ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
+ hr = IFileDialog2_SetNavigationRoot(pfd2, psidesktop);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ }
+
+ IFileDialog2_Release(pfd2);
+ }
+
+ /* Cleanup */
+ IShellItem_Release(psidesktop);
+ IFileOpenDialog_Release(pfod);
+ IFileSaveDialog_Release(pfsd);
+}
+
+START_TEST(itemdlg)
+{
+ OleInitialize(NULL);
+ init_function_pointers();
+
+ if(test_instantiation())
+ {
+ test_basics();
+ }
+ else
+ skip("Skipping all Item Dialog tests.\n");
+
+ OleUninitialize();
+}
--
1.7.4.1
More information about the wine-patches
mailing list