[1/2] comdlg32: Add test for IFileDialogEvents::OnOverwrite.
Vincent Povirk
madewokherd at gmail.com
Fri Aug 14 12:53:49 CDT 2015
-------------- next part --------------
From 6a320407fd12dea37c9cf89007ff6ab1fcae7806 Mon Sep 17 00:00:00 2001
From: Vincent Povirk <vincent at codeweavers.com>
Date: Thu, 13 Aug 2015 15:12:25 -0500
Subject: [PATCH 1/3] comdlg32: Add test for IFileDialogEvents::OnOverwrite.
---
dlls/comdlg32/tests/itemdlg.c | 162 ++++++++++++++++++++++++++++++++++++++++++
include/shobjidl.idl | 2 +-
2 files changed, 163 insertions(+), 1 deletion(-)
diff --git a/dlls/comdlg32/tests/itemdlg.c b/dlls/comdlg32/tests/itemdlg.c
index ddf21f6..b7238bb 100644
--- a/dlls/comdlg32/tests/itemdlg.c
+++ b/dlls/comdlg32/tests/itemdlg.c
@@ -288,6 +288,9 @@ static HRESULT WINAPI IFileDialogEvents_fnOnOverwrite(IFileDialogEvents *iface,
{
IFileDialogEventsImpl *This = impl_from_IFileDialogEvents(iface);
This->OnOverwrite++;
+ ok(*pResponse == FDEOR_DEFAULT, "overwrite response %u\n", *pResponse);
+ *pResponse = FDEOR_ACCEPT;
+ ok(!This->OnFileOk, "OnFileOk already called %u times\n", This->OnFileOk);
return S_OK;
}
@@ -2261,6 +2264,164 @@ if (0)
IFileDialog_Release(fd);
}
+static void test_overwrite(void)
+{
+ static const WCHAR filename_winetest[] = {'w','i','n','e','t','e','s','t','.','o','v','w',0};
+ IFileDialogEventsImpl *pfdeimpl;
+ IFileDialogEvents *pfde;
+ IFileDialog *fd;
+ DWORD cookie;
+ LPWSTR filename;
+ IShellItem *psi_current;
+ WCHAR buf[MAX_PATH];
+ HRESULT hr;
+
+ GetCurrentDirectoryW(MAX_PATH, buf);
+ ok(!!pSHCreateItemFromParsingName, "SHCreateItemFromParsingName is missing.\n");
+ hr = pSHCreateItemFromParsingName(buf, NULL, &IID_IShellItem, (void**)&psi_current);
+ ok(hr == S_OK, "Got 0x%08x\n", hr);
+
+ touch_file(filename_winetest);
+
+ /* FOS_OVERWRITEPROMPT has no effect on open dialog */
+ hr = CoCreateInstance(&CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IFileDialog, (void**)&fd);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ hr = IFileDialog_SetOptions(fd, FOS_OVERWRITEPROMPT | FOS_NOCHANGEDIR);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ hr = IFileDialog_SetFolder(fd, psi_current);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ pfde = IFileDialogEvents_Constructor();
+ pfdeimpl = impl_from_IFileDialogEvents(pfde);
+ pfdeimpl->set_filename = filename_winetest;
+ hr = IFileDialog_Advise(fd, pfde, &cookie);
+ ok(hr == S_OK, "Advise failed: Got 0x%08x\n", hr);
+
+ hr = IFileDialog_Show(fd, NULL);
+ ok(hr == S_OK, "Show failed: Got 0x%08x\n", hr);
+
+ ok(!pfdeimpl->OnOverwrite, "got %u overwrite events\n", pfdeimpl->OnOverwrite);
+ ok(pfdeimpl->OnFileOk == 1, "got %u ok events\n", pfdeimpl->OnFileOk);
+
+ hr = IFileDialog_GetFileName(fd, &filename);
+ ok(hr == S_OK, "GetFileName failed: Got 0x%08x\n", hr);
+ ok(!lstrcmpW(filename, filename_winetest), "Got %s\n", wine_dbgstr_w(filename));
+ CoTaskMemFree(filename);
+
+ hr = IFileDialog_Unadvise(fd, cookie);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ IFileDialog_Release(fd);
+
+ IFileDialogEvents_Release(pfde);
+
+ /* Save dialog doesn't check for overwrite without FOS_OVERWRITEPROMPT set */
+ hr = CoCreateInstance(&CLSID_FileSaveDialog, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IFileDialog, (void**)&fd);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ hr = IFileDialog_SetOptions(fd, FOS_NOREADONLYRETURN | FOS_PATHMUSTEXIST | FOS_NOCHANGEDIR);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ hr = IFileDialog_SetFolder(fd, psi_current);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ pfde = IFileDialogEvents_Constructor();
+ pfdeimpl = impl_from_IFileDialogEvents(pfde);
+ pfdeimpl->set_filename = filename_winetest;
+ hr = IFileDialog_Advise(fd, pfde, &cookie);
+ ok(hr == S_OK, "Advise failed: Got 0x%08x\n", hr);
+
+ hr = IFileDialog_Show(fd, NULL);
+ ok(hr == S_OK, "Show failed: Got 0x%08x\n", hr);
+
+ ok(!pfdeimpl->OnOverwrite, "got %u overwrite events\n", pfdeimpl->OnOverwrite);
+ ok(pfdeimpl->OnFileOk == 1, "got %u ok events\n", pfdeimpl->OnFileOk);
+
+ hr = IFileDialog_GetFileName(fd, &filename);
+ ok(hr == S_OK, "GetFileName failed: Got 0x%08x\n", hr);
+ ok(!lstrcmpW(filename, filename_winetest), "Got %s\n", wine_dbgstr_w(filename));
+ CoTaskMemFree(filename);
+
+ hr = IFileDialog_Unadvise(fd, cookie);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ IFileDialog_Release(fd);
+
+ IFileDialogEvents_Release(pfde);
+
+ /* Save dialog with FOS_OVERWRITEPROMPT set */
+ hr = CoCreateInstance(&CLSID_FileSaveDialog, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IFileDialog, (void**)&fd);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ hr = IFileDialog_SetFolder(fd, psi_current);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ pfde = IFileDialogEvents_Constructor();
+ pfdeimpl = impl_from_IFileDialogEvents(pfde);
+ pfdeimpl->set_filename = filename_winetest;
+ hr = IFileDialog_Advise(fd, pfde, &cookie);
+ ok(hr == S_OK, "Advise failed: Got 0x%08x\n", hr);
+
+ hr = IFileDialog_Show(fd, NULL);
+ ok(hr == S_OK, "Show failed: Got 0x%08x\n", hr);
+
+ todo_wine ok(pfdeimpl->OnOverwrite == 1, "got %u overwrite events\n", pfdeimpl->OnOverwrite);
+ ok(pfdeimpl->OnFileOk == 1, "got %u ok events\n", pfdeimpl->OnFileOk);
+
+ hr = IFileDialog_GetFileName(fd, &filename);
+ ok(hr == S_OK, "GetFileName failed: Got 0x%08x\n", hr);
+ ok(!lstrcmpW(filename, filename_winetest), "Got %s\n", wine_dbgstr_w(filename));
+ CoTaskMemFree(filename);
+
+ hr = IFileDialog_Unadvise(fd, cookie);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ IFileDialog_Release(fd);
+
+ IFileDialogEvents_Release(pfde);
+
+ DeleteFileW(filename_winetest);
+
+ /* Save dialog with FOS_OVERWRITEPROMPT set but without existing file */
+ hr = CoCreateInstance(&CLSID_FileSaveDialog, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IFileDialog, (void**)&fd);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ hr = IFileDialog_SetFolder(fd, psi_current);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ pfde = IFileDialogEvents_Constructor();
+ pfdeimpl = impl_from_IFileDialogEvents(pfde);
+ pfdeimpl->set_filename = filename_winetest;
+ hr = IFileDialog_Advise(fd, pfde, &cookie);
+ ok(hr == S_OK, "Advise failed: Got 0x%08x\n", hr);
+
+ hr = IFileDialog_Show(fd, NULL);
+ ok(hr == S_OK, "Show failed: Got 0x%08x\n", hr);
+
+ ok(!pfdeimpl->OnOverwrite, "got %u overwrite events\n", pfdeimpl->OnOverwrite);
+ ok(pfdeimpl->OnFileOk == 1, "got %u ok events\n", pfdeimpl->OnFileOk);
+
+ hr = IFileDialog_GetFileName(fd, &filename);
+ ok(hr == S_OK, "GetFileName failed: Got 0x%08x\n", hr);
+ ok(!lstrcmpW(filename, filename_winetest), "Got %s\n", wine_dbgstr_w(filename));
+ CoTaskMemFree(filename);
+
+ hr = IFileDialog_Unadvise(fd, cookie);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ IFileDialog_Release(fd);
+
+ IFileDialogEvents_Release(pfde);
+
+ IShellItem_Release(psi_current);
+}
+
START_TEST(itemdlg)
{
OleInitialize(NULL);
@@ -2274,6 +2435,7 @@ START_TEST(itemdlg)
test_filename();
test_customize();
test_persistent_state();
+ test_overwrite();
}
else
skip("Skipping all Item Dialog tests.\n");
diff --git a/include/shobjidl.idl b/include/shobjidl.idl
index b021178..1cc6132 100644
--- a/include/shobjidl.idl
+++ b/include/shobjidl.idl
@@ -2716,7 +2716,7 @@ interface IFileDialog;
typedef [v1_enum] enum FDE_OVERWRITE_RESPONSE
{
FDEOR_DEFAULT = 0,
- FDEOR_ACCCEP = 1,
+ FDEOR_ACCEPT = 1,
FDEOR_REFUSE = 2
} FDE_OVERWRITE_RESPONSE;
--
2.1.4
More information about the wine-patches
mailing list