dlls/oleaut32: add tests for OleLoadPictureFile, OleLoadPictureFileEx, and OleLoadPicturePath
Jeremy Drake
wine at jdrake.com
Wed Nov 19 01:04:37 CST 2008
I actually did this in 2 git commits, but I decided to include both in the
same email because the second requires the first to build.
Add stubs for OleLoadPictureFile and OleLoadPictureFileEx, which log FIXME
with their params and return E_NOTIMPL.
Add tests for OleLoadPictureFile, OleLoadPicutreFileEx, and
OleLoadPicturePath. Most are todo_wine. Tested and passed on win95 (both
with and without IE), win98se, win2k, winxp, and winvista.
---
dlls/oleaut32/oleaut32.spec | 4 ++--
dlls/oleaut32/olepicture.c | 18 ++++++++++++++++++
2 files changed, 20 insertions(+), 2 deletions(-)
---
dlls/oleaut32/tests/olepicture.c | 280 ++++++++++++++++++++++++++++++++++++++
1 files changed, 280 insertions(+), 0 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..1760a23 100644
--- a/dlls/oleaut32/olepicture.c
+++ b/dlls/oleaut32/olepicture.c
@@ -2695,6 +2695,24 @@ 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)
+{
+ FIXME("(VARIANT(%hd), %d, %d, %d, %p): not implemented\n", V_VT(&varFilename), xSizeDesired, ySizeDesired, dwFlags, ppdispPicture);
+ return E_NOTIMPL;
+}
+
+/***********************************************************************
+ * OleLoadPictureFile (OLEAUT32.422)
+ */
+HRESULT WINAPI OleLoadPictureFile(VARIANT varFilename, IDispatch ** ppdispPicture)
+{
+ FIXME("(VARIANT(%hd), %p): not implemented\n", V_VT(&varFilename), 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 3a2a216..86c3512 100644
--- a/dlls/oleaut32/tests/olepicture.c
+++ b/dlls/oleaut32/tests/olepicture.c
@@ -489,6 +489,284 @@ 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 ptr, caller line %d\n", caller_line);
+
+ if (pict != (void*)0xdeadbeef)
+ {
+ 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 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\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 = (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\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 = (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, "dispatch ptr\n");
+
+ if (disp != (void*)0xdeadbeef)
+ {
+ 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, "dispatch ptr\n");
+
+ if (disp != (void*)0xdeadbeef)
+ {
+ 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\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 = (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((LPCWSTR)L"\\nopath");
+ ok(tmp != NULL, "SysAllocString\n");
+ if (tmp != NULL)
+ {
+ tmp2 = (void*)0xdeadbeef;
+ hr = VarBstrCat(V_BSTR(&varFilename), tmp, &tmp2);
+ ok(hr == S_OK, "hr %08x\n", hr);
+ ok(tmp2 != (void*)0xdeadbeef, "VarBstrCat\n");
+ if (tmp2 != (void*)0xdeadbeef)
+ {
+ 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, "dispatch ptr\n");
+
+ if (disp != (void*)0xdeadbeef)
+ {
+ 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)
+{
+ 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\n");
+ 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\n");
+ if (widestringlen == 0) return;
+ bstrname = SysAllocStringLen(NULL, widestringlen - 1);
+ ok(bstrname != NULL, "string allocation\n");
+ if (bstrname == NULL) return;
+ ok(MultiByteToWideChar(CP_ACP, 0, absfile, -1, bstrname, widestringlen), "filename to wide string conversion\n");
+
+ disp = (void*)0xdeadbeef;
+ hr = OleLoadPicturePath(bstrname, NULL, 0, 0, &IID_IDispatch, (LPVOID*)&disp);
+ if (hr == E_UNEXPECTED)
+ {
+ 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 (disp != NULL && disp != (void*)0xdeadbeef)
+ {
+ test_VerifyPictureType(disp, PICTYPE_BITMAP, __LINE__);
+ IDispatch_Release(disp);
+ }
+ }
+
+ 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 = (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((LPCWSTR)L"\\nopath");
+ ok(tmp != NULL, "SysAllocString\n");
+ if (tmp != NULL)
+ {
+ tmp2 = (void*)0xdeadbeef;
+ hr = VarBstrCat(bstrname, tmp, &tmp2);
+ ok(hr == S_OK, "hr %08x\n", hr);
+ ok(tmp2 != (void*)0xdeadbeef, "VarBstrCat\n");
+ if (tmp2 != (void*)0xdeadbeef)
+ {
+ 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;
@@ -608,6 +886,8 @@ START_TEST(olepicture)
test_Invoke();
test_OleCreatePictureIndirect();
+ test_OleLoadPictureFile();
+ test_OleLoadPicturePath();
}
--
1.5.6.4
More information about the wine-patches
mailing list