[1/2] winhttp/tests: Add more IWinHttpRequest_Invoke tests.
Dmitry Timoshkov
dmitry at baikal.ru
Wed Sep 2 00:44:50 CDT 2015
---
dlls/winhttp/tests/winhttp.c | 203 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 201 insertions(+), 2 deletions(-)
diff --git a/dlls/winhttp/tests/winhttp.c b/dlls/winhttp/tests/winhttp.c
index c3a3f11..05993f0 100644
--- a/dlls/winhttp/tests/winhttp.c
+++ b/dlls/winhttp/tests/winhttp.c
@@ -2,6 +2,7 @@
* WinHTTP - tests
*
* Copyright 2008 Google (Zac Brown)
+ * Copyright 2015 Dmitry Timoshkov
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -3542,6 +3543,27 @@ static void test_IWinHttpRequest(void)
CoUninitialize();
}
+static void request_get_property(IWinHttpRequest *request, int property, VARIANT *ret)
+{
+ DISPPARAMS params;
+ VARIANT arg;
+ HRESULT hr;
+
+ memset(¶ms, 0, sizeof(params));
+ params.cNamedArgs = 0;
+ params.rgdispidNamedArgs = NULL;
+ params.cArgs = 1;
+ params.rgvarg = &arg;
+ VariantInit(&arg);
+ V_VT(&arg) = VT_I4;
+ V_I4(&arg) = property;
+ VariantInit(ret);
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_NULL, 0,
+ DISPATCH_PROPERTYGET, ¶ms, ret, NULL, NULL);
+todo_wine
+ ok(hr == S_OK, "error %#x\n", hr);
+}
+
static void test_IWinHttpRequest_Invoke(void)
{
static const WCHAR utf8W[] = {'U','T','F','-','8',0};
@@ -3582,6 +3604,72 @@ static void test_IWinHttpRequest_Invoke(void)
ok(hr == S_OK, "error %#x\n", hr);
ok(id == DISPID_HTTPREQUEST_OPTION, "expected DISPID_HTTPREQUEST_OPTION, got %u\n", id);
+ request_get_property(request, WinHttpRequestOption_URLCodePage, &ret);
+todo_wine
+ ok(V_VT(&ret) == VT_I4, "expected VT_I4, got %d\n", V_VT(&ret));
+todo_wine
+ ok(V_I4(&ret) == CP_UTF8, "expected CP_UTF8, got %d\n", V_I4(&ret));
+
+ memset(¶ms, 0, sizeof(params));
+ params.cArgs = 2;
+ params.cNamedArgs = 0;
+ params.rgvarg = arg;
+ V_VT(&arg[0]) = VT_I4;
+ V_I4(&arg[0]) = 1252;
+ V_VT(&arg[1]) = VT_R8;
+ V_R8(&arg[1]) = 2.0; /* WinHttpRequestOption_URLCodePage */
+ VariantInit(&ret);
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_NULL, 0,
+ DISPATCH_METHOD, ¶ms, NULL, NULL, &err);
+todo_wine
+ ok(hr == S_OK, "error %#x\n", hr);
+
+ request_get_property(request, WinHttpRequestOption_URLCodePage, &ret);
+todo_wine
+ ok(V_VT(&ret) == VT_I4, "expected VT_I4, got %d\n", V_VT(&ret));
+todo_wine
+ ok(V_I4(&ret) == CP_UTF8, "expected CP_UTF8, got %d\n", V_I4(&ret));
+
+ memset(¶ms, 0, sizeof(params));
+ params.cArgs = 2;
+ params.cNamedArgs = 0;
+ params.rgvarg = arg;
+ V_VT(&arg[0]) = VT_I4;
+ V_I4(&arg[0]) = 1252;
+ V_VT(&arg[1]) = VT_R8;
+ V_R8(&arg[1]) = 2.0; /* WinHttpRequestOption_URLCodePage */
+ VariantInit(&ret);
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_NULL, 0,
+ DISPATCH_METHOD | DISPATCH_PROPERTYPUT, ¶ms, NULL, NULL, &err);
+todo_wine
+ ok(hr == S_OK, "error %#x\n", hr);
+
+ request_get_property(request, WinHttpRequestOption_URLCodePage, &ret);
+todo_wine
+ ok(V_VT(&ret) == VT_I4, "expected VT_I4, got %d\n", V_VT(&ret));
+todo_wine
+ ok(V_I4(&ret) == CP_UTF8, "expected CP_UTF8, got %d\n", V_I4(&ret));
+
+ memset(¶ms, 0, sizeof(params));
+ params.cArgs = 2;
+ params.cNamedArgs = 0;
+ params.rgvarg = arg;
+ V_VT(&arg[0]) = VT_I4;
+ V_I4(&arg[0]) = 1252;
+ V_VT(&arg[1]) = VT_R8;
+ V_R8(&arg[1]) = 2.0; /* WinHttpRequestOption_URLCodePage */
+ VariantInit(&ret);
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_NULL, 0,
+ DISPATCH_PROPERTYPUT, ¶ms, NULL, NULL, &err);
+todo_wine
+ ok(hr == S_OK, "error %#x\n", hr);
+
+ request_get_property(request, WinHttpRequestOption_URLCodePage, &ret);
+todo_wine
+ ok(V_VT(&ret) == VT_I4, "expected VT_I4, got %d\n", V_VT(&ret));
+todo_wine
+ ok(V_I4(&ret) == 1252, "expected 1252, got %d\n", V_I4(&ret));
+
memset(¶ms, 0, sizeof(params));
params.cArgs = 2;
params.cNamedArgs = 0;
@@ -3590,17 +3678,128 @@ static void test_IWinHttpRequest_Invoke(void)
utf8 = SysAllocString(utf8W);
V_BSTR(&arg[0]) = utf8;
V_VT(&arg[1]) = VT_R8;
- V_R8(&arg[1]) = 2.0;
- VariantInit(&ret);
+ V_R8(&arg[1]) = 2.0; /* WinHttpRequestOption_URLCodePage */
hr = IWinHttpRequest_Invoke(request, id, &IID_NULL, 0, DISPATCH_METHOD, ¶ms, NULL, NULL, &err);
todo_wine
ok(hr == S_OK, "error %#x\n", hr);
+ request_get_property(request, WinHttpRequestOption_URLCodePage, &ret);
+todo_wine
+ ok(V_VT(&ret) == VT_I4, "expected VT_I4, got %d\n", V_VT(&ret));
+todo_wine
+ ok(V_I4(&ret) == 1252, "expected 1252, got %d\n", V_I4(&ret));
+
VariantInit(&ret);
hr = IWinHttpRequest_Invoke(request, id, &IID_NULL, 0, DISPATCH_METHOD, ¶ms, &ret, NULL, &err);
todo_wine
ok(hr == S_OK, "error %#x\n", hr);
+ request_get_property(request, WinHttpRequestOption_URLCodePage, &ret);
+todo_wine
+ ok(V_VT(&ret) == VT_I4, "expected VT_I4, got %d\n", V_VT(&ret));
+todo_wine
+ ok(V_I4(&ret) == 1252, "expected 1252, got %d\n", V_I4(&ret));
+
+ VariantInit(&ret);
+ hr = IWinHttpRequest_Invoke(request, id, &IID_NULL, 0, DISPATCH_PROPERTYPUT, ¶ms, &ret, NULL, &err);
+todo_wine
+ ok(hr == S_OK, "error %#x\n", hr);
+
+ request_get_property(request, WinHttpRequestOption_URLCodePage, &ret);
+todo_wine
+ ok(V_VT(&ret) == VT_I4, "expected VT_I4, got %d\n", V_VT(&ret));
+todo_wine
+ ok(V_I4(&ret) == CP_UTF8, "expected CP_UTF8, got %d\n", V_I4(&ret));
+
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_NULL, 0, DISPATCH_PROPERTYPUT, ¶ms, NULL, NULL, NULL);
+todo_wine
+ ok(hr == S_OK, "error %#x\n", hr);
+
+ hr = IWinHttpRequest_Invoke(request, 255, &IID_NULL, 0, DISPATCH_PROPERTYPUT, ¶ms, NULL, NULL, NULL);
+ ok(hr == DISP_E_MEMBERNOTFOUND, "error %#x\n", hr);
+
+ VariantInit(&ret);
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_IUnknown, 0, DISPATCH_PROPERTYPUT, ¶ms, &ret, NULL, &err);
+todo_wine
+ ok(hr == DISP_E_UNKNOWNINTERFACE, "error %#x\n", hr);
+
+ VariantInit(&ret);
+if (0) /* crashes */
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_NULL, 0, DISPATCH_PROPERTYPUT, NULL, &ret, NULL, &err);
+
+ params.cArgs = 1;
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_NULL, 0, DISPATCH_PROPERTYPUT, ¶ms, &ret, NULL, &err);
+todo_wine
+ ok(hr == DISP_E_TYPEMISMATCH, "error %#x\n", hr);
+
+ VariantInit(&arg[2]);
+ params.cArgs = 3;
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_NULL, 0, DISPATCH_PROPERTYPUT, ¶ms, &ret, NULL, &err);
+todo_wine
+ ok(hr == S_OK, "error %#x\n", hr);
+
+ VariantInit(&arg[0]);
+ VariantInit(&arg[1]);
+ VariantInit(&arg[2]);
+
+ params.cArgs = 1;
+ V_VT(&arg[0]) = VT_I4;
+ V_I4(&arg[0]) = WinHttpRequestOption_URLCodePage;
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_NULL, 0, DISPATCH_PROPERTYGET, ¶ms, NULL, NULL, NULL);
+todo_wine
+ ok(hr == S_OK, "error %#x\n", hr);
+
+ V_VT(&ret) = 0xdead;
+ V_I4(&ret) = 0xbeef;
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_NULL, 0, DISPATCH_METHOD|DISPATCH_PROPERTYGET, ¶ms, &ret, NULL, NULL);
+todo_wine
+ ok(hr == S_OK, "error %#x\n", hr);
+todo_wine
+ ok(V_VT(&ret) == VT_I4, "expected VT_I4, got %d\n", V_VT(&ret));
+todo_wine
+ ok(V_I4(&ret) == CP_UTF8, "expected CP_UTF8, got %d\n", V_I4(&ret));
+
+ V_VT(&ret) = 0xdead;
+ V_I4(&ret) = 0xbeef;
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_NULL, 0, DISPATCH_METHOD, ¶ms, &ret, NULL, NULL);
+todo_wine
+ ok(hr == S_OK, "error %#x\n", hr);
+todo_wine
+ ok(V_VT(&ret) == VT_I4, "expected VT_I4, got %d\n", V_VT(&ret));
+todo_wine
+ ok(V_I4(&ret) == CP_UTF8, "expected CP_UTF8, got %d\n", V_I4(&ret));
+
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_NULL, 0, DISPATCH_METHOD|DISPATCH_PROPERTYGET, ¶ms, NULL, NULL, NULL);
+todo_wine
+ ok(hr == S_OK, "error %#x\n", hr);
+
+ V_VT(&ret) = 0xdead;
+ V_I4(&ret) = 0xbeef;
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_NULL, 0, 0, ¶ms, &ret, NULL, NULL);
+todo_wine
+ ok(hr == S_OK, "error %#x\n", hr);
+todo_wine
+ ok(V_VT(&ret) == VT_EMPTY, "expected VT_EMPTY, got %d\n", V_VT(&ret));
+ ok(V_I4(&ret) == 0xbeef || V_I4(&ret) == 0 /* Win8 */, "expected 0xdead, got %d\n", V_I4(&ret));
+
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_NULL, 0, 0, ¶ms, NULL, NULL, NULL);
+todo_wine
+ ok(hr == S_OK, "error %#x\n", hr);
+
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_IUnknown, 0, DISPATCH_PROPERTYGET, ¶ms, NULL, NULL, NULL);
+todo_wine
+ ok(hr == DISP_E_UNKNOWNINTERFACE, "error %#x\n", hr);
+
+ params.cArgs = 2;
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_NULL, 0, DISPATCH_PROPERTYGET, ¶ms, NULL, NULL, NULL);
+todo_wine
+ ok(hr == S_OK, "error %#x\n", hr);
+
+ params.cArgs = 0;
+ hr = IWinHttpRequest_Invoke(request, DISPID_HTTPREQUEST_OPTION, &IID_NULL, 0, DISPATCH_PROPERTYGET, ¶ms, NULL, NULL, NULL);
+todo_wine
+ ok(hr == DISP_E_PARAMNOTFOUND, "error %#x\n", hr);
+
SysFreeString(utf8);
IWinHttpRequest_Release(request);
--
2.4.8
More information about the wine-patches
mailing list