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