[3/5] qmgr: Implement GetLocalName and GetRemoteName for IBackgroundCopyFile.
Dan Hipschman
dsh at linux.ucla.edu
Thu Feb 28 20:59:26 CST 2008
Implement IBackgroundCopyFile_GetRemoteName and
IBackgroundCopyFile_GetLocalName.
From: Roy Shea <roy at cs.hmc.edu>
Date: Thu Dec 20 18:38:31 CST 2007
---
dlls/qmgr/file.c | 24 +++++-
dlls/qmgr/tests/Makefile.in | 1 +
dlls/qmgr/tests/file.c | 172 +++++++++++++++++++++++++++++++++++++++++++
3 files changed, 192 insertions(+), 5 deletions(-)
create mode 100644 dlls/qmgr/tests/file.c
diff --git a/dlls/qmgr/file.c b/dlls/qmgr/file.c
index 60958f5..ad5546f 100644
--- a/dlls/qmgr/file.c
+++ b/dlls/qmgr/file.c
@@ -68,21 +68,35 @@ static ULONG WINAPI BITS_IBackgroundCopyFile_Release(
return ref;
}
-/*** IBackgroundCopyFile methods ***/
+/* Get the remote name of a background copy file */
static HRESULT WINAPI BITS_IBackgroundCopyFile_GetRemoteName(
IBackgroundCopyFile* iface,
LPWSTR *pVal)
{
- FIXME("Not implemented\n");
- return E_NOTIMPL;
+ BackgroundCopyFileImpl *This = (BackgroundCopyFileImpl *) iface;
+ int n = (lstrlenW(This->info.RemoteName) + 1) * sizeof(WCHAR);
+
+ *pVal = CoTaskMemAlloc(n);
+ if (!*pVal)
+ return E_OUTOFMEMORY;
+
+ memcpy(*pVal, This->info.RemoteName, n);
+ return S_OK;
}
static HRESULT WINAPI BITS_IBackgroundCopyFile_GetLocalName(
IBackgroundCopyFile* iface,
LPWSTR *pVal)
{
- FIXME("Not implemented\n");
- return E_NOTIMPL;
+ BackgroundCopyFileImpl *This = (BackgroundCopyFileImpl *) iface;
+ int n = (lstrlenW(This->info.LocalName) + 1) * sizeof(WCHAR);
+
+ *pVal = CoTaskMemAlloc(n);
+ if (!*pVal)
+ return E_OUTOFMEMORY;
+
+ memcpy(*pVal, This->info.LocalName, n);
+ return S_OK;
}
static HRESULT WINAPI BITS_IBackgroundCopyFile_GetProgress(
diff --git a/dlls/qmgr/tests/Makefile.in b/dlls/qmgr/tests/Makefile.in
index b70f662..840676d 100644
--- a/dlls/qmgr/tests/Makefile.in
+++ b/dlls/qmgr/tests/Makefile.in
@@ -7,6 +7,7 @@ IMPORTS = ole32 shlwapi user32 kernel32
CTESTS = \
enum_files.c \
+ file.c \
job.c \
qmgr.c
diff --git a/dlls/qmgr/tests/file.c b/dlls/qmgr/tests/file.c
new file mode 100644
index 0000000..b1fb954
--- /dev/null
+++ b/dlls/qmgr/tests/file.c
@@ -0,0 +1,172 @@
+/*
+ * Unit test suite for Background Copy File Interface
+ *
+ * Copyright 2007 Google (Roy Shea)
+ *
+ * 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
+ */
+
+#include <stdio.h>
+
+#include <shlwapi.h>
+
+#define COBJMACROS
+
+#include "wine/test.h"
+#include "bits.h"
+
+/* Globals used by many tests */
+#define NUM_FILES 1
+static const WCHAR test_remoteName[] = {'r','e','m','o','t','e', 0};
+static const WCHAR test_localName[] = {'l','o','c','a','l', 0};
+static WCHAR test_localFile[MAX_PATH];
+static WCHAR test_remoteUrl[MAX_PATH];
+static const ULONG test_fileCount = NUM_FILES;
+static const WCHAR test_displayName[] = {'T','e','s','t', 0};
+static IBackgroundCopyJob *test_job;
+static IBackgroundCopyManager *test_manager;
+static IEnumBackgroundCopyFiles *test_enumFiles;
+static IBackgroundCopyFile *test_file;
+
+/* Helper function to add a file to a job. The helper function takes base
+ file name and creates properly formed path and URL strings for creation of
+ the file. */
+static HRESULT addFileHelper(IBackgroundCopyJob* job,
+ const WCHAR *localName, const WCHAR *remoteName)
+{
+ DWORD urlSize;
+
+ GetCurrentDirectoryW(MAX_PATH, test_localFile);
+ PathAppendW(test_localFile, localName);
+ GetCurrentDirectoryW(MAX_PATH, test_remoteUrl);
+ PathAppendW(test_remoteUrl, remoteName);
+ urlSize = MAX_PATH;
+ UrlCreateFromPathW(test_remoteUrl, test_remoteUrl, &urlSize, 0);
+ UrlUnescapeW(test_remoteUrl, NULL, &urlSize, URL_UNESCAPE_INPLACE);
+ return IBackgroundCopyJob_AddFile(test_job, test_remoteUrl, test_localFile);
+}
+
+/* Generic test setup */
+static BOOL setup(void)
+{
+ HRESULT hres;
+ GUID test_jobId;
+
+ test_manager = NULL;
+ test_job = NULL;
+ memset(&test_jobId, 0, sizeof test_jobId);
+
+ hres = CoCreateInstance(&CLSID_BackgroundCopyManager, NULL,
+ CLSCTX_LOCAL_SERVER, &IID_IBackgroundCopyManager,
+ (void **) &test_manager);
+ if(hres != S_OK)
+ return FALSE;
+
+ hres = IBackgroundCopyManager_CreateJob(test_manager, test_displayName,
+ BG_JOB_TYPE_DOWNLOAD, &test_jobId, &test_job);
+ if(hres != S_OK)
+ {
+ IBackgroundCopyManager_Release(test_manager);
+ return FALSE;
+ }
+
+ if (addFileHelper(test_job, test_localName, test_remoteName) != S_OK
+ || IBackgroundCopyJob_EnumFiles(test_job, &test_enumFiles) != S_OK)
+ {
+ IBackgroundCopyJob_Release(test_job);
+ IBackgroundCopyManager_Release(test_manager);
+ return FALSE;
+ }
+
+ hres = IEnumBackgroundCopyFiles_Next(test_enumFiles, 1, &test_file, NULL);
+ if(hres != S_OK)
+ {
+ IEnumBackgroundCopyFiles_Release(test_enumFiles);
+ IBackgroundCopyJob_Release(test_job);
+ IBackgroundCopyManager_Release(test_manager);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/* Generic test cleanup */
+static void teardown(void)
+{
+ IBackgroundCopyFile_Release(test_file);
+ IEnumBackgroundCopyFiles_Release(test_enumFiles);
+ IBackgroundCopyJob_Release(test_job);
+ IBackgroundCopyManager_Release(test_manager);
+}
+
+/* Test that the remote name is properly set */
+static void test_GetRemoteName(void)
+{
+ HRESULT hres;
+ LPWSTR name;
+
+ hres = IBackgroundCopyFile_GetRemoteName(test_file, &name);
+ ok(hres == S_OK, "GetRemoteName failed: %08x\n", hres);
+ if(hres != S_OK)
+ {
+ skip("Unable to get remote name of test_file.\n");
+ return;
+ }
+ ok(lstrcmpW(name, test_remoteUrl) == 0, "Got incorrect remote name\n");
+ CoTaskMemFree(name);
+}
+
+/* Test that the local name is properly set */
+static void test_GetLocalName(void)
+{
+ HRESULT hres;
+ LPWSTR name;
+
+ hres = IBackgroundCopyFile_GetLocalName(test_file, &name);
+ ok(hres == S_OK, "GetLocalName failed: %08x\n", hres);
+ if(hres != S_OK)
+ {
+ skip("Unable to get local name of test_file.\n");
+ return;
+ }
+ ok(lstrcmpW(name, test_localFile) == 0, "Got incorrect local name\n");
+ CoTaskMemFree(name);
+}
+
+typedef void (*test_t)(void);
+
+START_TEST(file)
+{
+ static const test_t tests[] = {
+ test_GetRemoteName,
+ test_GetLocalName,
+ 0
+ };
+ const test_t *test;
+
+ CoInitialize(NULL);
+ for (test = tests; *test; ++test)
+ {
+ /* Keep state seperate between tests. */
+ if (!setup())
+ {
+ skip("Unable to setup test\n");
+ break;
+ }
+ (*test)();
+ teardown();
+ }
+ CoUninitialize();
+}
More information about the wine-patches
mailing list