oleaut32/tests: add tests for OleLoadPictureFile(Ex) and OleLoadPicurePath (resend) [3/3]

Paul Vriens paul.vriens.wine at gmail.com
Tue Dec 16 02:22:35 CST 2008


Jeremy Drake wrote:
> This integrates the scenarios that I wasn't testing from  Nikolay Sivov's
> patch to the tests of 12/7.  Also works around some issues I was running
> into trying to write wide strings as L"foo".
> 
> ---
>  dlls/oleaut32/tests/olepicture.c |  311 ++++++++++++++++++++++++++++++++++++++
>  1 files changed, 311 insertions(+), 0 deletions(-)
> 
> diff --git a/dlls/oleaut32/tests/olepicture.c b/dlls/oleaut32/tests/olepicture.c
> index 2b5b8bb..2929bd7 100644
> --- a/dlls/oleaut32/tests/olepicture.c
> +++ b/dlls/oleaut32/tests/olepicture.c
> @@ -489,6 +489,315 @@ 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 /*<= 2k*/, "hr %08x\n", hr);
> +		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 +980,8 @@ START_TEST(olepicture)
> 
>  	test_Invoke();
>          test_OleCreatePictureIndirect();
> +	test_OleLoadPictureFile();
> +	test_OleLoadPicturePath();
>          test_Render();
>  }
> 
Hi Jeremy,

Could you please use spaces instead of tabs. I know that this file already has 
some tabs but please don't add more.

-- 
Cheers,

Paul.



More information about the wine-devel mailing list