oleaut32/tests: add tests for OleLoadPictureFile(Ex) and OleLoadPicturePath (resend) [2/2]

Jeremy Drake wine at jdrake.com
Tue Jan 6 01:02:20 CST 2009


---
 dlls/oleaut32/tests/olepicture.c |  321 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 321 insertions(+), 0 deletions(-)

diff --git a/dlls/oleaut32/tests/olepicture.c b/dlls/oleaut32/tests/olepicture.c
index 2b5b8bb..9edf01e 100644
--- a/dlls/oleaut32/tests/olepicture.c
+++ b/dlls/oleaut32/tests/olepicture.c
@@ -489,6 +489,325 @@ static void test_OleCreatePictureIndirect(void)
     IPicture_Release(pict);
 }

+static void test_VerifyPictureType(IDispatch *pdisp, short expectedtype, int caller_line)
+{
+    IPicture *pict;
+    HRESULT hr;
+    short type;
+    pict = (void*)0xdeadbeef;
+    hr = IDispatch_QueryInterface(pdisp, &IID_IPicture, (LPVOID*)&pict);
+    ok(hr == S_OK, "hr %08x\n", hr);
+    ok(pict != (void*)0xdeadbeef && pict != NULL, "pict ptr, caller line %d\n", caller_line);
+
+    if (SUCCEEDED(hr))
+    {
+        type = 0xdead;
+        hr = IPicture_get_Type(pict, &type);
+        ok(hr == S_OK, "hr %08x, caller line %d\n", hr, caller_line);
+        ok(type == expectedtype, "type %hd, expected %hd, caller line %d\n", type, expectedtype, caller_line);
+
+        IPicture_Release(pict);
+    }
+}
+
+static const WCHAR nopath[] = { '\\', 'n', 'o', 'p', 'a', 't', 'h', 0 };
+static void test_OleLoadPictureFile(void)
+{
+    IDispatch *disp;
+    HRESULT hr;
+    char filename[MAX_PATH];
+    VARIANT varFilename;
+    HANDLE file;
+    DWORD written;
+    DWORD widestringlen;
+    BSTR tmp = NULL, tmp2 = NULL;
+
+    GetTempFileNameA(".", "gif", 0, filename);
+    file = CreateFileA(filename, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
+    ok(file != INVALID_HANDLE_VALUE, "file creation error %u\n", GetLastError());
+    if (file == INVALID_HANDLE_VALUE) return;
+    WriteFile(file, gif4pixel, sizeof(gif4pixel), &written, NULL);
+    ok(written == sizeof(gif4pixel), "write\n");
+
+    VariantInit(&varFilename);
+    V_VT(&varFilename) = VT_ERROR;
+    V_ERROR(&varFilename) = DISP_E_PARAMNOTFOUND;
+
+    todo_wine
+    {
+        disp = (void*)0xdeadbeef;
+        hr = OleLoadPictureFileEx(varFilename, 2, 2, LP_DEFAULT, &disp);
+        ok(hr == S_OK, "hr %08x\n", hr);
+        ok(disp != (void*)0xdeadbeef, "dispatch ptr\n");
+
+        if (disp != (void*)0xdeadbeef)
+        {
+            test_VerifyPictureType(disp, PICTYPE_NONE, __LINE__);
+            IDispatch_Release(disp);
+        }
+    }
+
+
+    widestringlen = MultiByteToWideChar(CP_ACP, 0, filename, -1, NULL, 0);
+    ok(widestringlen != 0, "determining wide string length error %u\n", GetLastError());
+    if (widestringlen == 0) return;
+    V_VT(&varFilename) = VT_BSTR;
+    V_BSTR(&varFilename) = SysAllocStringLen(NULL, widestringlen - 1);
+    ok(MultiByteToWideChar(CP_ACP, 0, filename, -1, V_BSTR(&varFilename), widestringlen),
+       "filename to wide string conversion error %u\n", GetLastError());
+
+    disp = (void*)0xdeadbeef;
+    todo_wine
+    {
+        hr = OleLoadPictureFile(varFilename, &disp);
+        ok(hr == CTL_E_PERMISSIONDENIED, "hr %08x\n", hr);
+    }
+    ok(disp == (void*)0xdeadbeef, "dispatch ptr\n");
+
+    CloseHandle(file);
+
+    disp = (void*)0xdeadbeef;
+    todo_wine
+    {
+        hr = OleLoadPictureFileEx(varFilename, 2, 2, LP_DEFAULT, &disp);
+        ok(hr == S_OK, "hr %08x\n", hr);
+        ok(disp != (void*)0xdeadbeef && disp != NULL, "dispatch ptr\n");
+
+        if (SUCCEEDED(hr))
+        {
+            test_VerifyPictureType(disp, PICTYPE_BITMAP, __LINE__);
+            IDispatch_Release(disp);
+        }
+    }
+
+    todo_wine
+    {
+        disp = (void*)0xdeadbeef;
+        hr = OleLoadPictureFile(varFilename, &disp);
+        ok(hr == S_OK, "hr %08x\n", hr);
+        ok(disp != (void*)0xdeadbeef && disp != NULL, "dispatch ptr\n");
+
+        if (SUCCEEDED(hr))
+        {
+            test_VerifyPictureType(disp, PICTYPE_BITMAP, __LINE__);
+            IDispatch_Release(disp);
+        }
+    }
+
+    ok(MoveFileA(filename, "33"), "move file\n");
+
+    file = CreateFileA(filename, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
+    ok(file != INVALID_HANDLE_VALUE, "file creation error %u\n", GetLastError());
+    if (file != INVALID_HANDLE_VALUE)
+    {
+        WriteFile(file, "this is not a valid picture", 28, &written, NULL);
+        ok(written == 28, "write\n");
+        CloseHandle(file);
+
+        disp = (void*)0xdeadbeef;
+        todo_wine
+        {
+            hr = OleLoadPictureFile(varFilename, &disp);
+            ok(hr == CTL_E_INVALIDPICTURE, "hr %08x\n", hr);
+            ok(disp == NULL, "dispatch ptr\n"); /* XXX this one is not unmodified!! */
+        }
+        DeleteFileA(filename);
+    }
+
+    tmp = SysAllocString(nopath);
+    ok(tmp != NULL, "SysAllocString\n");
+    if (tmp != NULL)
+    {
+        hr = VarBstrCat(V_BSTR(&varFilename), tmp, &tmp2);
+        if (SUCCEEDED(hr))
+        {
+            SysFreeString(V_BSTR(&varFilename));
+            V_BSTR(&varFilename) = tmp2;
+
+            disp = (void*)0xdeadbeef;
+            todo_wine
+            {
+                hr = OleLoadPictureFile(varFilename, &disp);
+                ok(hr == CTL_E_PATHNOTFOUND, "hr %08x\n", hr);
+            }
+            ok(disp == (void*)0xdeadbeef, "dispatch ptr\n");
+        }
+
+        SysFreeString(tmp);
+    }
+
+    VariantClear(&varFilename);
+    VariantInit(&varFilename);
+    V_VT(&varFilename) = VT_I4;
+    V_I4(&varFilename) = 33;
+
+    todo_wine
+    {
+        disp = (void*)0xdeadbeef;
+        hr = OleLoadPictureFile(varFilename, &disp);
+        ok(hr == S_OK, "hr %08x\n", hr);
+        ok(disp != (void*)0xdeadbeef && disp != NULL, "dispatch ptr\n");
+
+        if (SUCCEEDED(hr))
+        {
+            test_VerifyPictureType(disp, PICTYPE_BITMAP, __LINE__);
+            IDispatch_Release(disp);
+        }
+    }
+    ok(V_VT(&varFilename) == VT_I4 && V_I4(&varFilename) == 33, "variant unmodified\n");
+
+    DeleteFileA("33");
+
+    VariantClear(&varFilename);
+}
+
+static void test_OleLoadPicturePath(void)
+{
+    static const WCHAR fileproto[] = { 'f','i','l','e',':','/','/',0 };
+    IDispatch *disp;
+    HRESULT hr;
+    char filename[MAX_PATH];
+    char absfile[MAX_PATH];
+    HANDLE file;
+    DWORD written;
+    DWORD widestringlen;
+    BSTR bstrname = NULL;
+    BSTR tmp = NULL, tmp2 = NULL;
+
+    GetTempFileNameA(".", "gif", 0, filename);
+    GetFullPathNameA(filename, MAX_PATH, absfile, NULL);
+    file = CreateFileA(filename, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
+    ok(file != INVALID_HANDLE_VALUE, "file creation error %u\n", GetLastError());
+    if (file == INVALID_HANDLE_VALUE) return;
+    WriteFile(file, gif4pixel, sizeof(gif4pixel), &written, NULL);
+    ok(written == sizeof(gif4pixel), "write\n");
+
+    widestringlen = MultiByteToWideChar(CP_ACP, 0, absfile, -1, NULL, 0);
+    ok(widestringlen != 0, "determining wide string length error %u\n", GetLastError());
+    if (widestringlen == 0) return;
+    bstrname = SysAllocStringLen(NULL, widestringlen - 1);
+    ok(MultiByteToWideChar(CP_ACP, 0, absfile, -1, bstrname, widestringlen),
+       "filename to wide string conversion error %u\n", GetLastError());
+
+    disp = (void*)0xdeadbeef;
+    hr = OleLoadPicturePath(bstrname, NULL, 0, 0, &IID_IDispatch, (LPVOID*)&disp);
+    if (hr == E_UNEXPECTED)
+    {
+        /* E_UNEXPECTED is returned from OleLoadPicturePath on win95 without IE installed */
+        win_skip("OleLoadPicturePath seems to not work on this platform.  No IE?\n");
+        CloseHandle(file);
+        DeleteFileA(filename);
+        return;
+    }
+    ok(hr == INET_E_DATA_NOT_AVAILABLE /*>=XP*/ ||
+       hr == E_FAIL /*<=2k*/, "hr %08x\n", hr);
+    todo_wine ok(disp == NULL, "dispatch ptr\n");
+
+    CloseHandle(file);
+
+    disp = (void*)0xdeadbeef;
+    todo_wine
+    {
+        hr = OleLoadPicturePath(bstrname, NULL, 0, 0, &IID_IDispatch, (LPVOID*)&disp);
+        ok(hr == S_OK, "hr %08x\n", hr);
+        ok(disp != NULL && disp != (void*)0xdeadbeef, "dispatch ptr\n");
+
+        if (SUCCEEDED(hr))
+        {
+            test_VerifyPictureType(disp, PICTYPE_BITMAP, __LINE__);
+            IDispatch_Release(disp);
+        }
+    }
+
+    disp = (void*)0xdeadbeef;
+    todo_wine
+    {
+        tmp = SysAllocString(fileproto);
+        hr = VarBstrCat(tmp, bstrname, &tmp2);
+        SysFreeString(tmp);
+        tmp = NULL;
+
+
+        hr = OleLoadPicturePath(tmp2, NULL, 0, 0, &IID_IDispatch, (LPVOID*)&disp);
+        ok(hr == S_OK, "hr %08x\n", hr);
+        ok(disp != NULL && disp != (void*)0xdeadbeef, "dispatch ptr\n");
+
+        if (SUCCEEDED(hr))
+        {
+            test_VerifyPictureType(disp, PICTYPE_BITMAP, __LINE__);
+            IDispatch_Release(disp);
+        }
+        SysFreeString(tmp2);
+        tmp2 = NULL;
+    }
+
+
+    widestringlen = MultiByteToWideChar(CP_ACP, 0, filename, -1, NULL, 0);
+    ok(widestringlen != 0, "determining wide string length error %u\n", GetLastError());
+    if (widestringlen == 0) return;
+    tmp = SysAllocStringLen(NULL, widestringlen - 1);
+    ok(MultiByteToWideChar(CP_ACP, 0, filename, -1, tmp, widestringlen),
+       "filename to wide string conversion error %u\n", GetLastError());
+
+    disp = (void*)0xdeadbeef;
+
+    todo_wine
+    {
+        hr = OleLoadPicturePath(tmp, NULL, 0, 0, &IID_IDispatch, (LPVOID*)&disp);
+        ok(hr == INET_E_UNKNOWN_PROTOCOL /*>= XP*/ ||
+           hr == E_FAIL /*NT <= 2k*/ ||
+           hr == S_OK /*9x*/, "hr %08x\n", hr);
+        if (SUCCEEDED(hr))
+        {
+            ok(disp != NULL && disp != (void*)0xdeadbeef, "dispatch ptr\n");
+            test_VerifyPictureType(disp, PICTYPE_BITMAP, __LINE__);
+            IDispatch_Release(disp);
+        }
+        else
+        {
+            ok(disp == NULL, "dispatch ptr\n");
+        }
+        SysFreeString(tmp);
+        tmp = NULL;
+    }
+
+    file = CreateFileA(filename, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
+    ok(file != INVALID_HANDLE_VALUE, "file creation error %u\n", GetLastError());
+    if (file != INVALID_HANDLE_VALUE)
+    {
+        WriteFile(file, "this is not a valid picture", 28, &written, NULL);
+        ok(written == 28, "write\n");
+        CloseHandle(file);
+
+        disp = (void*)0xdeadbeef;
+        todo_wine
+        {
+            hr = OleLoadPicturePath(bstrname, NULL, 0, 0, &IID_IDispatch, (LPVOID*)&disp);
+            ok(hr == E_FAIL, "hr %08x\n", hr);
+            ok(disp == NULL, "dispatch ptr\n");
+        }
+    }
+
+    DeleteFileA(filename);
+
+    tmp = SysAllocString(nopath);
+    hr = VarBstrCat(bstrname, tmp, &tmp2);
+    SysFreeString(bstrname);
+    bstrname = tmp2;
+
+    disp = (void*)0xdeadbeef;
+    todo_wine
+    {
+        hr = OleLoadPicturePath(bstrname, NULL, 0, 0, &IID_IDispatch, (LPVOID*)&disp);
+        ok(hr == INET_E_RESOURCE_NOT_FOUND /*>=XP*/ ||
+           hr == E_FAIL /*<=2k*/, "hr %08x\n", hr);
+        ok(disp == NULL, "dispatch ptr\n");
+    }
+
+    SysFreeString(tmp);
+    SysFreeString(bstrname);
+}
+
 static void test_apm()
 {
     OLE_HANDLE handle;
@@ -671,6 +990,8 @@ START_TEST(olepicture)

 	test_Invoke();
         test_OleCreatePictureIndirect();
+        test_OleLoadPictureFile();
+        test_OleLoadPicturePath();
         test_Render();
 }

-- 
1.6.0.6



More information about the wine-patches mailing list