/* * 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 #include #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); } /* Test getting the progress of a file*/ static void test_GetProgress_PreTransfer(void) { HRESULT hres; BG_FILE_PROGRESS progress; hres = IBackgroundCopyFile_GetProgress(test_file, &progress); ok(hres == S_OK, "GetProgress failed: %08x\n", hres); if(hres != S_OK) { skip("Unable to get progress of test_file.\n"); return; } ok(progress.BytesTotal == BG_SIZE_UNKNOWN, "Got incorrect total size: %x%08x\n", (DWORD)(progress.BytesTotal >> 32), (DWORD)progress.BytesTotal); ok(progress.BytesTransferred == 0, "Got incorrect number of transferred bytes: %x%08x\n", (DWORD)(progress.BytesTransferred >> 32), (DWORD)progress.BytesTransferred); ok(progress.Completed == FALSE, "Got incorret completion status\n"); } typedef void (*test_t)(void); START_TEST(file) { static const test_t tests[] = { test_GetRemoteName, test_GetLocalName, test_GetProgress_PreTransfer, 0 }; const test_t *test; CoInitialize(NULL); for (test = tests; *test; ++test) { /* Keep state separate between tests. */ if (!setup()) { skip("Unable to setup test\n"); break; } (*test)(); teardown(); } CoUninitialize(); }