Reece Dunn : shlwapi: Added SHCreateStreamOnFileW tests.
Alexandre Julliard
julliard at winehq.org
Tue Mar 25 06:57:58 CDT 2008
Module: wine
Branch: master
Commit: fe829db189843d2ad29907da6e8beab1aa20a85b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=fe829db189843d2ad29907da6e8beab1aa20a85b
Author: Reece Dunn <msclrhd at 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);
+ }
}
More information about the wine-cvs
mailing list