From c8c00d6f4ab7adf8ca64723125c25250e2888198 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Mon, 27 Jan 2020 15:40:22 +0100 Subject: [PATCH] scrrun: Add MoveFile implementation. Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- dlls/scrrun/filesystem.c | 7 ++-- dlls/scrrun/tests/filesystem.c | 62 ++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 4 deletions(-) diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c index 5893435af7f..d537239b3a1 100644 --- a/dlls/scrrun/filesystem.c +++ b/dlls/scrrun/filesystem.c @@ -3638,12 +3638,11 @@ static HRESULT WINAPI filesys_DeleteFolder(IFileSystem3 *iface, BSTR FolderSpec, return delete_folder(FolderSpec, SysStringLen(FolderSpec), Force); } -static HRESULT WINAPI filesys_MoveFile(IFileSystem3 *iface, BSTR Source, - BSTR Destination) +static HRESULT WINAPI filesys_MoveFile(IFileSystem3 *iface, BSTR source, BSTR destination) { - FIXME("%p %s %s\n", iface, debugstr_w(Source), debugstr_w(Destination)); + TRACE("%p %s %s\n", iface, debugstr_w(source), debugstr_w(destination)); - return E_NOTIMPL; + return MoveFileW(source, destination) ? S_OK : create_error(GetLastError()); } static HRESULT WINAPI filesys_MoveFolder(IFileSystem3 *iface,BSTR Source, diff --git a/dlls/scrrun/tests/filesystem.c b/dlls/scrrun/tests/filesystem.c index 68ac70ce3a3..c96f704ca78 100644 --- a/dlls/scrrun/tests/filesystem.c +++ b/dlls/scrrun/tests/filesystem.c @@ -2467,6 +2467,67 @@ static void test_GetSpecialFolder(void) IFolder_Release(folder); } +static void test_MoveFile(void) +{ + ITextStream *stream; + BSTR str, src, dst; + HRESULT hr; + + str = SysAllocString(L"test.txt"); + hr = IFileSystem3_CreateTextFile(fs3, str, VARIANT_FALSE, VARIANT_FALSE, &stream); + ok(hr == S_OK, "got 0x%08x\n", hr); + SysFreeString(str); + + str = SysAllocString(L"test"); + hr = ITextStream_Write(stream, str); + ok(hr == S_OK, "Write failed: %08x\n", hr); + SysFreeString(str); + + ITextStream_Release(stream); + + str = SysAllocString(L"test2.txt"); + hr = IFileSystem3_CreateTextFile(fs3, str, VARIANT_FALSE, VARIANT_FALSE, &stream); + ok(hr == S_OK, "got 0x%08x\n", hr); + SysFreeString(str); + ITextStream_Release(stream); + + src = SysAllocString(L"test.txt"); + dst = SysAllocString(L"test3.txt"); + hr = IFileSystem3_MoveFile(fs3, src, dst); + ok(hr == S_OK, "got 0x%08x\n", hr); + SysFreeString(src); + SysFreeString(dst); + + str = SysAllocString(L"test.txt"); + hr = IFileSystem3_DeleteFile(fs3, str, VARIANT_TRUE); + ok(hr == CTL_E_FILENOTFOUND, "DeleteFile returned %x, expected CTL_E_FILENOTFOUND\n", hr); + SysFreeString(str); + + src = SysAllocString(L"test3.txt"); + dst = SysAllocString(L"test2.txt"); /* already exists */ + hr = IFileSystem3_MoveFile(fs3, src, dst); + ok(hr == CTL_E_FILEALREADYEXISTS, "got 0x%08x, expected CTL_E_FILEALREADYEXISTS\n", hr); + SysFreeString(src); + SysFreeString(dst); + + src = SysAllocString(L"nonexistent.txt"); + dst = SysAllocString(L"test4.txt"); + hr = IFileSystem3_MoveFile(fs3, src, dst); + ok(hr == CTL_E_FILENOTFOUND, "got 0x%08x, expected CTL_E_FILENOTFOUND\n", hr); + SysFreeString(src); + SysFreeString(dst); + + str = SysAllocString(L"test3.txt"); + hr = IFileSystem3_DeleteFile(fs3, str, VARIANT_TRUE); + ok(hr == S_OK, "got 0x%08x\n", hr); + SysFreeString(str); + + str = SysAllocString(L"test2.txt"); + hr = IFileSystem3_DeleteFile(fs3, str, VARIANT_TRUE); + ok(hr == S_OK, "got 0x%08x\n", hr); + SysFreeString(str); +} + START_TEST(filesystem) { HRESULT hr; @@ -2506,6 +2567,7 @@ START_TEST(filesystem) test_SerialNumber(); test_GetExtensionName(); test_GetSpecialFolder(); + test_MoveFile(); IFileSystem3_Release(fs3);