dlls/oleaut32: add tests for OleLoadPictureFile(Ex)

Jeremy Drake wine at jdrake.com
Tue Nov 18 01:48:40 CST 2008


Date: Mon, 17 Nov 2008 23:46:34 -0800
Subject: add tests for behavior of OleLoadPictureFile(Ex) on Windows, and actually define OleLoadPictureFile and OleLoadPictureFileEx (returning E_NOTIMPL right now) so these tests can build

I ended up having to add OleLoadPicutreFile and OleLoadPictureFileEx to
the .spec and .c files as actual functions (for now just returning
E_NOTIMPL) in order to get the test to even compile.

---
 dlls/oleaut32/oleaut32.spec      |    4 +-
 dlls/oleaut32/olepicture.c       |   16 +++
 dlls/oleaut32/tests/olepicture.c |  201 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 219 insertions(+), 2 deletions(-)

diff --git a/dlls/oleaut32/oleaut32.spec b/dlls/oleaut32/oleaut32.spec
index 7b764ef..b6c21a4 100644
--- a/dlls/oleaut32/oleaut32.spec
+++ b/dlls/oleaut32/oleaut32.spec
@@ -378,7 +378,7 @@
 398 stub UserMSG_free_inst
 399 stub UserMSG_free_local
 401 stdcall OleLoadPictureEx(ptr long long long long long long ptr)
-402 stub OleLoadPictureFileEx
+402 stdcall OleLoadPictureFileEx(ptr long long long ptr)
 411 stdcall SafeArrayCreateVector(long long long)
 412 stdcall SafeArrayCopyData(ptr ptr)
 413 stdcall VectorFromBstr(ptr ptr)
@@ -390,7 +390,7 @@
 419 stdcall OleCreatePictureIndirect(ptr ptr long ptr)
 420 stdcall OleCreateFontIndirect(ptr ptr ptr)
 421 stdcall OleTranslateColor(long long long)
-422 stub OleLoadPictureFile
+422 stdcall OleLoadPictureFile(ptr ptr)
 423 stub OleSavePictureFile
 424 stdcall OleLoadPicturePath(wstr ptr long long ptr ptr)
 425 stdcall VarUI4FromI8(double ptr)
diff --git a/dlls/oleaut32/olepicture.c b/dlls/oleaut32/olepicture.c
index 498ee53..939a30d 100644
--- a/dlls/oleaut32/olepicture.c
+++ b/dlls/oleaut32/olepicture.c
@@ -2695,6 +2695,22 @@ HRESULT WINAPI OleLoadPictureEx( LPSTREAM lpstream, LONG lSize, BOOL fRunmode,
 }

 /***********************************************************************
+ * OleLoadPictureFileEx (OLEAUT32.402)
+ */
+HRESULT WINAPI OleLoadPictureFileEx(VARIANT varFilename, DWORD xSizeDesired, DWORD ySizeDesired, DWORD dwFlags, IDispatch **ppdispPicture)
+{
+    return E_NOTIMPL;
+}
+
+/***********************************************************************
+ * OleLoadPictureFile (OLEAUT32.422)
+ */
+HRESULT WINAPI OleLoadPictureFile(VARIANT varFilename, IDispatch ** ppdispPicture)
+{
+    return E_NOTIMPL;
+}
+
+/***********************************************************************
  * OleLoadPicturePath (OLEAUT32.424)
  */
 HRESULT WINAPI OleLoadPicturePath( LPOLESTR szURLorPath, LPUNKNOWN punkCaller,
diff --git a/dlls/oleaut32/tests/olepicture.c b/dlls/oleaut32/tests/olepicture.c
index 3f44696..a9a310e 100644
--- a/dlls/oleaut32/tests/olepicture.c
+++ b/dlls/oleaut32/tests/olepicture.c
@@ -489,6 +489,206 @@ static void test_OleCreatePictureIndirect(void)
     IPicture_Release(pict);
 }

+static void test_OleLoadPictureFile(void)
+{
+    IPicture *pict;
+    IDispatch *disp;
+    HRESULT hr;
+    char filename[MAX_PATH];
+    VARIANT varFilename;
+    HANDLE file;
+    DWORD written;
+    short type;
+    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\n");
+    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 = NULL;
+        hr = OleLoadPictureFileEx(varFilename, 2, 2, LP_DEFAULT, &disp);
+        ok(hr == S_OK, "hr %08x\n", hr);
+        ok(disp != NULL, "dispatch ptr\n");
+
+        if (disp != NULL)
+        {
+            pict = NULL;
+            hr = IDispatch_QueryInterface(disp, &IID_IPicture, (LPVOID*)&pict);
+            ok(hr == S_OK, "hr %08x\n", hr);
+            ok(pict != NULL, "pict ptr\n");
+
+            if (pict != NULL)
+            {
+                hr = IPicture_get_Type(pict, &type);
+                ok(hr == S_OK, "hr %08x\n", hr);
+                ok(type == PICTYPE_NONE, "type %d\n", type);
+
+                IPicture_Release(pict);
+            }
+            IDispatch_Release(disp);
+        }
+    }
+
+    disp = NULL;
+
+    widestringlen = MultiByteToWideChar(CP_ACP, 0, filename, -1, NULL, 0);
+    ok(widestringlen != 0, "determining wide string length\n");
+    if (widestringlen == 0) return;
+    V_VT(&varFilename) = VT_BSTR;
+    V_BSTR(&varFilename) = SysAllocStringLen(NULL, widestringlen - 1);
+    ok(V_BSTR(&varFilename) != NULL, "string allocation\n");
+    if (V_BSTR(&varFilename) == NULL) return;
+    ok(MultiByteToWideChar(CP_ACP, 0, filename, -1, V_BSTR(&varFilename), widestringlen), "filename to wide string conversion\n");
+
+    disp = NULL;
+    todo_wine
+    {
+        hr = OleLoadPictureFile(varFilename, &disp);
+        ok(hr == CTL_E_PERMISSIONDENIED, "hr %08x\n", hr);
+    }
+    ok(disp == NULL, "dispatch ptr\n");
+
+    CloseHandle(file);
+
+    todo_wine
+    {
+        hr = OleLoadPictureFileEx(varFilename, 2, 2, LP_DEFAULT, &disp);
+        ok(hr == S_OK, "hr %08x\n", hr);
+        ok(disp != NULL, "dispatch ptr\n");
+
+        if (disp != NULL)
+        {
+            pict = NULL;
+            hr = IDispatch_QueryInterface(disp, &IID_IPicture, (LPVOID*)&pict);
+            ok(hr == S_OK, "hr %08x\n", hr);
+            ok(pict != NULL, "pict ptr\n");
+
+            if (pict != NULL)
+            {
+                hr = IPicture_get_Type(pict, &type);
+                ok(hr == S_OK, "hr %08x\n", hr);
+                ok(type == PICTYPE_BITMAP, "type %d\n", type);
+
+                IPicture_Release(pict);
+            }
+            IDispatch_Release(disp);
+        }
+    }
+
+    todo_wine
+    {
+        hr = OleLoadPictureFile(varFilename, &disp);
+        ok(hr == S_OK, "hr %08x\n", hr);
+        ok(disp != NULL, "dispatch ptr\n");
+
+        if (disp != NULL)
+        {
+            hr = IDispatch_QueryInterface(disp, &IID_IPicture, (LPVOID*)&pict);
+            ok(hr == S_OK, "hr %08x\n", hr);
+            ok(pict != NULL, "pict ptr\n");
+
+            if (pict != NULL)
+            {
+                hr = IPicture_get_Type(pict, &type);
+                ok(hr == S_OK, "hr %08x\n", hr);
+                ok(type == PICTYPE_BITMAP, "type %d\n", type);
+
+                IPicture_Release(pict);
+            }
+            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\n");
+    if (file != INVALID_HANDLE_VALUE)
+    {
+        WriteFile(file, "this is not a valid picture", 28, &written, NULL);
+        ok(written == 28, "write\n");
+        CloseHandle(file);
+
+        disp = NULL;
+        todo_wine
+        {
+            hr = OleLoadPictureFile(varFilename, &disp);
+            ok(hr == CTL_E_INVALIDPICTURE, "hr %08x\n", hr);
+        }
+        ok(disp == NULL, "dispatch ptr\n");
+        DeleteFileA(filename);
+    }
+
+    tmp = SysAllocString((LPCWSTR)L"\\nopath");
+    ok(tmp != NULL, "SysAllocString\n");
+    if (tmp != NULL)
+    {
+        hr = VarBstrCat(V_BSTR(&varFilename), tmp, &tmp2);
+        ok(hr == S_OK, "hr %08x\n", hr);
+        ok(tmp2 != NULL, "VarBstrCat\n");
+        if (tmp2 != NULL)
+        {
+            SysFreeString(V_BSTR(&varFilename));
+            V_BSTR(&varFilename) = tmp2;
+
+            disp = NULL;
+            todo_wine
+            {
+                hr = OleLoadPictureFile(varFilename, &disp);
+                ok(hr == CTL_E_PATHNOTFOUND, "hr %08x\n", hr);
+            }
+            ok(disp == NULL, "dispatch ptr\n");
+        }
+
+        SysFreeString(tmp);
+    }
+
+    VariantClear(&varFilename);
+    VariantInit(&varFilename);
+    V_VT(&varFilename) = VT_I4;
+    V_I4(&varFilename) = 33;
+
+    todo_wine
+    {
+        disp = NULL;
+        hr = OleLoadPictureFile(varFilename, &disp);
+        ok(hr == S_OK, "hr %08x\n", hr);
+        ok(disp != NULL, "dispatch ptr\n");
+
+        if (disp != NULL)
+        {
+            pict = NULL;
+            hr = IDispatch_QueryInterface(disp, &IID_IPicture, (LPVOID*)&pict);
+            ok(hr == S_OK, "hr %08x\n", hr);
+            ok(pict != NULL, "pict ptr\n");
+
+            if (pict != NULL)
+            {
+                hr = IPicture_get_Type(pict, &type);
+                ok(hr == S_OK, "hr %08x\n", hr);
+                ok(type == PICTYPE_BITMAP, "type %d\n", type);
+
+                IPicture_Release(pict);
+            }
+            IDispatch_Release(disp);
+        }
+    }
+
+    DeleteFileA("33");
+
+    VariantClear(&varFilename);
+}
+
 static void test_apm()
 {
     OLE_HANDLE handle;
@@ -614,6 +814,7 @@ START_TEST(olepicture)

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


-- 
1.5.6.4


-- 
In 1914, the first crossword puzzle was printed in a newspaper.  The
creator received $4000 down ... and $3000 across.



More information about the wine-patches mailing list