Module: wine Branch: master Commit: fe829db189843d2ad29907da6e8beab1aa20a85b URL: http://source.winehq.org/git/wine.git/?a=commit;h=fe829db189843d2ad29907da6e...
Author: Reece Dunn msclrhd@googlemail.com Date: Mon Mar 24 10:09:55 2008 +0000
shlwapi: Added SHCreateStreamOnFileW tests.
---
dlls/shlwapi/tests/istream.c | 95 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 95 insertions(+), 0 deletions(-)
diff --git a/dlls/shlwapi/tests/istream.c b/dlls/shlwapi/tests/istream.c index 1045c46..21d7c76 100644 --- a/dlls/shlwapi/tests/istream.c +++ b/dlls/shlwapi/tests/istream.c @@ -32,6 +32,7 @@ /* Function pointers for the SHCreateStreamOnFile functions */ static HMODULE hShlwapi; static HRESULT (WINAPI *pSHCreateStreamOnFileA)(LPCSTR file, DWORD mode, IStream **stream); +static HRESULT (WINAPI *pSHCreateStreamOnFileW)(LPCWSTR file, DWORD mode, IStream **stream);
static void test_SHCreateStreamOnFileA(DWORD mode) @@ -118,11 +119,97 @@ static void test_SHCreateStreamOnFileA(DWORD mode) }
+static void test_SHCreateStreamOnFileW(DWORD mode) +{ + IStream * stream; + HRESULT ret; + ULONG refcount; + static const WCHAR test_file[] = { 'c', ':', '\', 't', 'e', 's', 't', '.', 't', 'x', 't' }; + + printf("SHCreateStreamOnFileW: testing mode %d\n", mode); + + /* invalid arguments */ + + stream = NULL; + ret = (*pSHCreateStreamOnFileW)(NULL, mode, &stream); + ok(ret == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) || /* XP */ + ret == E_INVALIDARG /* Vista */, + "SHCreateStreamOnFileW: expected HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) or E_INVALIDARG, got 0x%08x\n", ret); + ok(stream == NULL, "SHCreateStreamOnFileW: expected a NULL IStream object, got %p\n", stream); + +#if 0 /* This test crashes on WinXP SP2 */ + ret = (*pSHCreateStreamOnFileW)(test_file, mode, NULL); + ok(ret == E_INVALIDARG, "SHCreateStreamOnFileW: expected E_INVALIDARG, got 0x%08x\n", ret); +#endif + + stream = NULL; + ret = (*pSHCreateStreamOnFileW)(test_file, mode | STGM_CONVERT, &stream); + ok(ret == E_INVALIDARG, "SHCreateStreamOnFileW: expected E_INVALIDARG, got 0x%08x\n", ret); + ok(stream == NULL, "SHCreateStreamOnFileW: expected a NULL IStream object, got %p\n", stream); + + stream = NULL; + ret = (*pSHCreateStreamOnFileW)(test_file, mode | STGM_DELETEONRELEASE, &stream); + ok(ret == E_INVALIDARG, "SHCreateStreamOnFileW: expected E_INVALIDARG, got 0x%08x\n", ret); + ok(stream == NULL, "SHCreateStreamOnFileW: expected a NULL IStream object, got %p\n", stream); + + /* file does not exist */ + + stream = NULL; + ret = (*pSHCreateStreamOnFileW)(test_file, mode | STGM_FAILIFTHERE, &stream); + todo_wine + ok(ret == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "SHCreateStreamOnFileW: expected HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), got 0x%08x\n", ret); + ok(stream == NULL, "SHCreateStreamOnFileW: expected a NULL IStream object, got %p\n", stream); + + stream = NULL; + ret = (*pSHCreateStreamOnFileW)(test_file, mode | STGM_CREATE, &stream); + todo_wine + ok(ret == S_OK, "SHCreateStreamOnFileW: expected S_OK, got 0x%08x\n", ret); + todo_wine + ok(stream != NULL, "SHCreateStreamOnFileW: expected a valid IStream object, got NULL\n"); + + if (stream) { + refcount = IStream_Release(stream); + ok(refcount == 0, "SHCreateStreamOnFileW: expected 0, got %d\n", refcount); + } + + /* NOTE: don't delete the file, as it will be used for the file exists tests. */ + + /* file exists */ + + stream = NULL; + ret = (*pSHCreateStreamOnFileW)(test_file, mode | STGM_FAILIFTHERE, &stream); + todo_wine + ok(ret == S_OK, "SHCreateStreamOnFileW: expected S_OK, got 0x%08x\n", ret); + todo_wine + ok(stream != NULL, "SHCreateStreamOnFileW: expected a valid IStream object, got NULL\n"); + + if (stream) { + refcount = IStream_Release(stream); + ok(refcount == 0, "SHCreateStreamOnFileW: expected 0, got %d\n", refcount); + } + + stream = NULL; + ret = (*pSHCreateStreamOnFileW)(test_file, mode | STGM_CREATE, &stream); + todo_wine + ok(ret == S_OK, "SHCreateStreamOnFileW: expected S_OK, got 0x%08x\n", ret); + todo_wine + ok(stream != NULL, "SHCreateStreamOnFileW: expected a valid IStream object, got NULL\n"); + + if (stream) { + refcount = IStream_Release(stream); + ok(refcount == 0, "SHCreateStreamOnFileW: expected 0, got %d\n", refcount); + + ok(DeleteFileW(test_file), "SHCreateStreamOnFileW: could not delete the test file, got error %d\n", GetLastError()); + } +} + + START_TEST(istream) { hShlwapi = GetModuleHandleA("shlwapi.dll");
pSHCreateStreamOnFileA = (void*)GetProcAddress(hShlwapi, "SHCreateStreamOnFileA"); + pSHCreateStreamOnFileW = (void*)GetProcAddress(hShlwapi, "SHCreateStreamOnFileW");
if (!pSHCreateStreamOnFileA) printf("SHCreateStreamOnFileA not found... skipping tests.\n"); @@ -131,4 +218,12 @@ START_TEST(istream) test_SHCreateStreamOnFileA(STGM_WRITE); test_SHCreateStreamOnFileA(STGM_READWRITE); } + + if (!pSHCreateStreamOnFileW) + printf("SHCreateStreamOnFileW not found... skipping tests.\n"); + else { + test_SHCreateStreamOnFileW(STGM_READ); + test_SHCreateStreamOnFileW(STGM_WRITE); + test_SHCreateStreamOnFileW(STGM_READWRITE); + } }