oleaut32/tests: add tests for OleLoadPictureFile(Ex) and OleLoadPicturePath (resend 2) [2/2]
Jeremy Drake
wine at jdrake.com
Wed Dec 17 01:59:24 CST 2008
Changed indenting to spaces. Fixed relative path test of
OleLoadPicturePath on 9x. Seems relative paths worked in 9x and started
returning errors in NT. Go figure...
---
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.5.6.4
More information about the wine-patches
mailing list