Jacek Caban : mshtml: Added more IHTMLXMLHttpRequst::send tests.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Apr 7 11:42:52 CDT 2016


Module: wine
Branch: master
Commit: 8c00ee2ac69b44d082023d3af9e477a08ec60ccf
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8c00ee2ac69b44d082023d3af9e477a08ec60ccf

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Apr  7 15:33:44 2016 +0200

mshtml: Added more IHTMLXMLHttpRequst::send tests.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mshtml/tests/xmlhttprequest.c | 143 ++++++++++++++++++++++++++-----------
 1 file changed, 100 insertions(+), 43 deletions(-)

diff --git a/dlls/mshtml/tests/xmlhttprequest.c b/dlls/mshtml/tests/xmlhttprequest.c
index e1c2ef1..df5d644 100644
--- a/dlls/mshtml/tests/xmlhttprequest.c
+++ b/dlls/mshtml/tests/xmlhttprequest.c
@@ -573,6 +573,47 @@ static void test_responseXML(const char *expect_text)
     IDispatch_Release(disp);
 }
 
+#define xhr_open(a,b) _xhr_open(__LINE__,a,b)
+static HRESULT _xhr_open(unsigned line, const char *url_a, const char *method_a)
+{
+    BSTR method = a2bstr(method_a);
+    BSTR url = a2bstr(url_a);
+    VARIANT async, empty;
+    HRESULT hres;
+
+    V_VT(&async) = VT_BOOL;
+    V_BOOL(&async) = VARIANT_TRUE;
+    V_VT(&empty) = VT_EMPTY;
+
+    hres = IHTMLXMLHttpRequest_open(xhr, method, url, async, empty, empty);
+    ok_(__FILE__,line)(hres == S_OK, "open failed: %08x\n", hres);
+
+    SysFreeString(method);
+    SysFreeString(url);
+    return hres;
+}
+
+#define test_response_text(a) _test_response_text(__LINE__,a)
+static void _test_response_text(unsigned line, const char *expect_text)
+{
+    BSTR text = NULL;
+    HRESULT hres;
+
+    hres = IHTMLXMLHttpRequest_get_responseText(xhr, &text);
+    ok(hres == S_OK, "get_responseText failed: %08x\n", hres);
+    ok(text != NULL, "test == NULL\n");
+    if(expect_text) {
+        unsigned len;
+        /* Some recent version of IE strip trailing '\n' from post.php response, while others don't. */
+        len = SysStringLen(text);
+        if(text[len-1] == '\n')
+            text[len-1] = 0;
+        ok_(__FILE__,line)(!strcmp_wa(text, expect_text), "expect %s, got %s\n",
+                           expect_text, wine_dbgstr_w(text));
+    }
+    SysFreeString(text);
+}
+
 static void test_sync_xhr(IHTMLDocument2 *doc, const char *xml_url, const char *expect_text)
 {
     VARIANT vbool, vempty, var;
@@ -725,14 +766,7 @@ static void test_sync_xhr(IHTMLDocument2 *doc, const char *xml_url, const char *
     ok(hres == S_OK, "get_readyState failed: %08x\n", hres);
     ok(val == 4, "Expect DONE, got %d\n", val);
 
-    hres = IHTMLXMLHttpRequest_get_responseText(xhr, &text);
-    ok(hres == S_OK, "get_responseText failed: %08x\n", hres);
-    ok(text != NULL, "test == NULL\n");
-    if(expect_text)
-        ok(!strcmp_wa(text, expect_text), "expect %s, got %s\n",
-            expect_text, wine_dbgstr_w(text));
-    SysFreeString(text);
-
+    test_response_text(expect_text);
     test_responseXML(expect_text);
 
     IHTMLXMLHttpRequest_Release(xhr);
@@ -741,8 +775,7 @@ static void test_sync_xhr(IHTMLDocument2 *doc, const char *xml_url, const char *
 
 static void test_async_xhr(IHTMLDocument2 *doc, const char *xml_url, const char *expect_text)
 {
-    VARIANT vbool, vempty, var;
-    BSTR method, url;
+    VARIANT var, vempty;
     BSTR text;
     LONG val;
     HRESULT hres;
@@ -804,20 +837,10 @@ static void test_async_xhr(IHTMLDocument2 *doc, const char *xml_url, const char
     ok(hres == S_OK, "get_readyState failed: %08x\n", hres);
     ok(val == 0, "Expect UNSENT, got %d\n", val);
 
-    method = a2bstr("GET");
-    url = a2bstr(xml_url);
-    V_VT(&vbool) = VT_BOOL;
-    V_BOOL(&vbool) = VARIANT_TRUE;
-    V_VT(&vempty) = VT_EMPTY;
-
     SET_EXPECT(xmlhttprequest_onreadystatechange_opened);
-    hres = IHTMLXMLHttpRequest_open(xhr, method, url, vbool, vempty, vempty);
-    ok(hres == S_OK, "open failed: %08x\n", hres);
+    hres = xhr_open(xml_url, "GET");
     CHECK_CALLED(xmlhttprequest_onreadystatechange_opened);
 
-    SysFreeString(method);
-    SysFreeString(url);
-
     if(FAILED(hres)) {
         IHTMLXMLHttpRequest_Release(xhr);
         xhr = NULL;
@@ -855,6 +878,7 @@ static void test_async_xhr(IHTMLDocument2 *doc, const char *xml_url, const char
     SET_EXPECT(xmlhttprequest_onreadystatechange_loading);
     SET_EXPECT(xmlhttprequest_onreadystatechange_done);
     loading_cnt = 0;
+    V_VT(&vempty) = VT_EMPTY;
     hres = IHTMLXMLHttpRequest_send(xhr, vempty);
 
     ok(hres == S_OK, "send failed: %08x\n", hres);
@@ -900,15 +924,7 @@ static void test_async_xhr(IHTMLDocument2 *doc, const char *xml_url, const char
     ok(hres == S_OK, "get_readyState failed: %08x\n", hres);
     ok(val == 4, "Expect DONE, got %d\n", val);
 
-    text = NULL;
-    hres = IHTMLXMLHttpRequest_get_responseText(xhr, &text);
-    ok(hres == S_OK, "get_responseText failed: %08x\n", hres);
-    ok(text != NULL, "test == NULL\n");
-    if(expect_text)
-        ok(!strcmp_wa(text, expect_text), "expect %s, got %s\n",
-            expect_text, wine_dbgstr_w(text));
-    SysFreeString(text);
-
+    test_response_text(expect_text);
     test_responseXML(expect_text);
 
     IHTMLXMLHttpRequest_Release(xhr);
@@ -917,15 +933,10 @@ static void test_async_xhr(IHTMLDocument2 *doc, const char *xml_url, const char
 
 static void test_async_xhr_abort(IHTMLDocument2 *doc, const char *xml_url)
 {
-    VARIANT vbool, vempty, var;
-    BSTR method, url;
+    VARIANT vempty, var;
     LONG val;
     HRESULT hres;
 
-    method = a2bstr("GET");
-    url = a2bstr(xml_url);
-    V_VT(&vbool) = VT_BOOL;
-    V_BOOL(&vbool) = VARIANT_TRUE;
     V_VT(&vempty) = VT_EMPTY;
 
     trace("abort before send() is fired\n");
@@ -938,8 +949,7 @@ static void test_async_xhr_abort(IHTMLDocument2 *doc, const char *xml_url)
     hres = IHTMLXMLHttpRequest_put_onreadystatechange(xhr, var);
 
     SET_EXPECT(xmlhttprequest_onreadystatechange_opened);
-    hres = IHTMLXMLHttpRequest_open(xhr, method, url, vbool, vempty, vempty);
-    ok(hres == S_OK, "open failed: %08x\n", hres);
+    xhr_open(xml_url, "GET");
     CHECK_CALLED(xmlhttprequest_onreadystatechange_opened);
 
     hres = IHTMLXMLHttpRequest_abort(xhr);
@@ -963,8 +973,7 @@ static void test_async_xhr_abort(IHTMLDocument2 *doc, const char *xml_url)
     hres = IHTMLXMLHttpRequest_put_onreadystatechange(xhr, var);
 
     SET_EXPECT(xmlhttprequest_onreadystatechange_opened);
-    hres = IHTMLXMLHttpRequest_open(xhr, method, url, vbool, vempty, vempty);
-    ok(hres == S_OK, "open failed: %08x\n", hres);
+    xhr_open(xml_url, "GET");
     CHECK_CALLED(xmlhttprequest_onreadystatechange_opened);
 
     loading_cnt = 0;
@@ -992,9 +1001,56 @@ static void test_async_xhr_abort(IHTMLDocument2 *doc, const char *xml_url)
 
     IHTMLXMLHttpRequest_Release(xhr);
     xhr = NULL;
+}
 
-    SysFreeString(method);
-    SysFreeString(url);
+static void test_xhr_post(IHTMLDocument2 *doc)
+{
+    VARIANT v;
+    HRESULT hres;
+
+    trace("send string...\n");
+
+    create_xmlhttprequest(doc);
+    if(!xhr)
+        return;
+
+    V_VT(&v) = VT_DISPATCH;
+    V_DISPATCH(&v) = (IDispatch*)&xmlhttprequest_onreadystatechange_obj;
+    hres = IHTMLXMLHttpRequest_put_onreadystatechange(xhr, v);
+    ok(hres == S_OK, "put_onreadystatechange failed: %08x\n", hres);
+
+    SET_EXPECT(xmlhttprequest_onreadystatechange_opened);
+    xhr_open("http://test.winehq.org/tests/post.php", "POST");
+    CHECK_CALLED(xmlhttprequest_onreadystatechange_opened);
+
+    set_request_header(xhr, "Content-Type", "application/x-www-form-urlencoded");
+
+    V_VT(&v) = VT_BSTR;
+    V_BSTR(&v) = a2bstr("X=Testing");
+
+    loading_cnt = 0;
+    SET_EXPECT(xmlhttprequest_onreadystatechange_opened);
+    SET_EXPECT(xmlhttprequest_onreadystatechange_headers_received);
+    SET_EXPECT(xmlhttprequest_onreadystatechange_loading);
+    SET_EXPECT(xmlhttprequest_onreadystatechange_done);
+
+    hres = IHTMLXMLHttpRequest_send(xhr, v);
+    ok(hres == S_OK, "send failed: %08x\n", hres);
+    if(SUCCEEDED(hres))
+        pump_msgs(&called_xmlhttprequest_onreadystatechange_done);
+
+    todo_wine CHECK_CALLED(xmlhttprequest_onreadystatechange_opened);
+    CHECK_CALLED(xmlhttprequest_onreadystatechange_headers_received);
+    CHECK_CALLED(xmlhttprequest_onreadystatechange_loading);
+    CHECK_CALLED(xmlhttprequest_onreadystatechange_done);
+    ok(loading_cnt == 1, "loading_cnt = %d\n", loading_cnt);
+
+    SysFreeString(V_BSTR(&v));
+
+    test_response_text("X => Testing");
+
+    IHTMLXMLHttpRequest_Release(xhr);
+    xhr = NULL;
 }
 
 static IHTMLDocument2 *create_doc_from_url(const char *start_url)
@@ -1045,7 +1101,7 @@ START_TEST(xmlhttprequest)
     static const char start_url[] = "http://test.winehq.org/tests/hello.html";
     static const char xml_url[] = "http://test.winehq.org/tests/xmltest.xml";
     static const char large_page_url[] = "http://test.winehq.org/tests/data.php";
-    static const char expect_response_text[] = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<a>TEST</a>\n";
+    static const char expect_response_text[] = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<a>TEST</a>";
 
     CoInitialize(NULL);
 
@@ -1057,6 +1113,7 @@ START_TEST(xmlhttprequest)
         test_async_xhr(doc, xml_url, expect_response_text);
         test_async_xhr(doc, large_page_url, NULL);
         test_async_xhr_abort(doc, large_page_url);
+        test_xhr_post(doc);
         IHTMLDocument2_Release(doc);
     }
     SysFreeString(content_type);




More information about the wine-cvs mailing list