diff --git a/dlls/msxml3/tests/httpreq.c b/dlls/msxml3/tests/httpreq.c
index 4f51ef9faf0..5149222c7fb 100644
--- a/dlls/msxml3/tests/httpreq.c
+++ b/dlls/msxml3/tests/httpreq.c
@@ -50,6 +50,9 @@ static void _expect_ref(IUnknown* obj, ULONG ref, int line)
ok_(__FILE__, line)(rc == ref, "expected refcount %d, got %d\n", ref, rc);
}
+static const char xmltestA[] = "http://test.winehq.org/tests/xmltest.xml";
+static const CHAR xmltestbodyA[] = "\nTEST\n";
+
DEFINE_GUID(SID_SContainerDispatch, 0xb722be00, 0x4e68, 0x101b, 0xa2, 0xbc, 0x00, 0xaa, 0x00, 0x40, 0x47, 0x70);
DEFINE_GUID(SID_UnknownSID, 0x75dd09cb, 0x6c40, 0x11d5, 0x85, 0x43, 0x00, 0xc0, 0x4f, 0xa0, 0xfb, 0xa3);
@@ -91,6 +94,13 @@ DEFINE_EXPECT(collection_get_length);
static int g_unexpectedcall, g_expectedcall;
+static int strcmp_wa(const WCHAR *strw, const char *stra)
+{
+ WCHAR buf[512];
+ MultiByteToWideChar(CP_ACP, 0, stra, -1, buf, sizeof(buf)/sizeof(WCHAR));
+ return lstrcmpW(strw, buf);
+}
+
static BSTR alloc_str_from_narrow(const char *str)
{
int len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
@@ -1431,14 +1441,26 @@ static void _test_open(unsigned line, IXMLHttpRequest *xhr, const char *method,
ok_(__FILE__,line)(hr == exhres, "open(%s %s) failed: %08x, expected %08x\n", method, url, hr, exhres);
}
+#define test_server_open(a,b,c,d) _test_server_open(__LINE__,a,b,c,d)
+static void _test_server_open(unsigned line, IServerXMLHTTPRequest *xhr, const char *method, const char *url, HRESULT exhres)
+{
+ VARIANT empty, vfalse;
+ HRESULT hr;
+
+ V_VT(&empty) = VT_EMPTY;
+ V_VT(&vfalse) = VT_BOOL;
+ V_BOOL(&vfalse) = VARIANT_FALSE;
+
+ hr = IServerXMLHTTPRequest_open(xhr, _bstr_(method), _bstr_(url), vfalse, empty, empty);
+ ok_(__FILE__,line)(hr == exhres, "open(%s %s) failed: %08x, expected %08x\n", method, url, hr, exhres);
+}
+
static void test_XMLHTTP(void)
{
static const char bodyA[] = "mode=Test";
static const char urlA[] = "http://test.winehq.org/tests/post.php";
- static const char xmltestA[] = "http://test.winehq.org/tests/xmltest.xml";
static const char referertesturl[] = "http://test.winehq.org/tests/referer.php";
static const WCHAR wszExpectedResponse[] = {'F','A','I','L','E','D',0};
- static const CHAR xmltestbodyA[] = "\nTEST\n";
static const WCHAR norefererW[] = {'n','o',' ','r','e','f','e','r','e','r',' ','s','e','t',0};
IXMLHttpRequest *xhr;
@@ -1768,6 +1790,38 @@ static void test_XMLHTTP(void)
free_bstrs();
}
+static void test_server_xhr(void)
+{
+ IServerXMLHTTPRequest *xhr;
+ BSTR response;
+ VARIANT body;
+ HRESULT hr;
+
+ /* GET request */
+ xhr = create_server_xhr();
+
+ test_server_open(xhr, "GET", xmltestA, S_OK);
+
+ V_VT(&body) = VT_EMPTY;
+
+ hr = IServerXMLHTTPRequest_send(xhr, body);
+ if (hr == INET_E_RESOURCE_NOT_FOUND)
+ {
+ skip("No connection could be made with test.winehq.org\n");
+ IServerXMLHTTPRequest_Release(xhr);
+ return;
+ }
+ ok(hr == S_OK, "send failed: %08x\n", hr);
+
+ hr = IServerXMLHTTPRequest_get_responseText(xhr, &response);
+ ok(hr == S_OK, "get_responseText failed: %08x\n", hr);
+ ok(!strcmp_wa(response, xmltestbodyA), "got %s\n", wine_dbgstr_w(response));
+ SysFreeString(response);
+
+ IServerXMLHTTPRequest_Release(xhr);
+ free_bstrs();
+}
+
static void test_safe_httpreq(void)
{
IXMLHttpRequest *xhr;
@@ -1847,6 +1901,7 @@ START_TEST(httpreq)
IXMLHttpRequest_Release(xhr);
test_XMLHTTP();
+ test_server_xhr();
test_safe_httpreq();
test_supporterrorinfo();