Jacek Caban : mshtml: Added onreadystatechange tests.

Alexandre Julliard julliard at winehq.org
Tue Dec 1 09:19:40 CST 2009


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Nov 30 18:03:02 2009 +0100

mshtml: Added onreadystatechange tests.

---

 dlls/mshtml/tests/events.c |  116 +++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 114 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/tests/events.c b/dlls/mshtml/tests/events.c
index 5371f76..46bbd4f 100644
--- a/dlls/mshtml/tests/events.c
+++ b/dlls/mshtml/tests/events.c
@@ -63,6 +63,9 @@ DEFINE_EXPECT(div_onclick);
 DEFINE_EXPECT(div_onclick_attached);
 DEFINE_EXPECT(timeout);
 DEFINE_EXPECT(doccp_onclick);
+DEFINE_EXPECT(iframe_onreadystatechange_loading);
+DEFINE_EXPECT(iframe_onreadystatechange_interactive);
+DEFINE_EXPECT(iframe_onreadystatechange_complete);
 
 static HWND container_hwnd = NULL;
 static IHTMLWindow2 *window;
@@ -87,6 +90,9 @@ static const char click_doc_str[] =
     "<div id=\"clickdiv\" style=\"text-align: center; background: red; font-size: 32\">click here</div>"
     "</body></html>";
 
+static const char readystate_doc_str[] =
+    "<<html><body><iframe id=\"iframe\"></iframe></body></html>";
+
 static const char *debugstr_guid(REFIID riid)
 {
     static char buf[50];
@@ -336,8 +342,8 @@ static void _test_attached_event_args(unsigned line, DISPID id, WORD wFlags, DIS
     IHTMLEventObj_Release(event);
 }
 
-#define test_event_src(t) _test_event_src(__LINE__,t)
-static void _test_event_src(unsigned line, const char *src_tag)
+#define get_event_src(t) _get_event_src(__LINE__)
+static IHTMLElement *_get_event_src(unsigned line)
 {
     IHTMLEventObj *event = _get_event_obj(line);
     IHTMLElement *src_elem = NULL;
@@ -347,6 +353,14 @@ static void _test_event_src(unsigned line, const char *src_tag)
     IHTMLEventObj_Release(event);
     ok_(__FILE__,line) (hres == S_OK, "get_srcElement failed: %08x\n", hres);
 
+    return src_elem;
+}
+
+#define test_event_src(t) _test_event_src(__LINE__,t)
+static void _test_event_src(unsigned line, const char *src_tag)
+{
+    IHTMLElement *src_elem = _get_event_src(line);
+
     if(src_tag) {
         ok_(__FILE__,line) (src_elem != NULL, "src_elem = NULL\n");
         _test_elem_tag(line, (IUnknown*)src_elem, src_tag);
@@ -833,6 +847,54 @@ static HRESULT WINAPI body_onclick(IDispatchEx *iface, DISPID id, LCID lcid, WOR
 
 EVENT_HANDLER_FUNC_OBJ(body_onclick);
 
+static HRESULT WINAPI iframe_onreadystatechange(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
+        VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
+{
+    IHTMLFrameBase2 *iframe;
+    IHTMLElement2 *elem2;
+    IHTMLElement *elem;
+    VARIANT v;
+    BSTR str;
+    HRESULT hres;
+
+    test_event_args(&DIID_DispHTMLIFrame, id, wFlags, pdp, pvarRes, pei, pspCaller);
+    test_event_src("IFRAME");
+
+    elem = get_event_src();
+    elem2 = get_elem2_iface((IUnknown*)elem);
+    IHTMLElement_Release(elem);
+
+    V_VT(&v) = VT_EMPTY;
+    hres = IHTMLElement2_get_readyState(elem2, &v);
+    ok(hres == S_OK, "get_readyState failed: %08x\n", hres);
+    ok(V_VT(&v) == VT_BSTR, "V_VT(readyState) = %d\n", V_VT(&v));
+
+    hres = IHTMLElement2_QueryInterface(elem2, &IID_IHTMLFrameBase2, (void**)&iframe);
+    IHTMLElement2_Release(elem2);
+    ok(hres == S_OK, "Could not get IHTMLFrameBase2 iface: %08x\n", hres);
+
+    str = NULL;
+    hres = IHTMLFrameBase2_get_readyState(iframe, &str);
+    IHTMLFrameBase2_Release(iframe);
+    ok(hres == S_OK, "get_readyState failed: %08x\n", hres);
+    ok(str != NULL, "readyState == NULL\n");
+    ok(!lstrcmpW(str, V_BSTR(&v)), "ready states differ\n");
+    VariantClear(&v);
+
+    if(!strcmp_wa(str, "loading"))
+        CHECK_EXPECT(iframe_onreadystatechange_loading);
+    else if(!strcmp_wa(str, "interactive"))
+        CHECK_EXPECT(iframe_onreadystatechange_interactive);
+    else if(!strcmp_wa(str, "complete"))
+        CHECK_EXPECT(iframe_onreadystatechange_complete);
+    else
+        ok(0, "unexpected state %s\n", wine_dbgstr_w(str));
+
+    return S_OK;
+}
+
+EVENT_HANDLER_FUNC_OBJ(iframe_onreadystatechange);
+
 static HRESULT WINAPI nocall(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
         VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
 {
@@ -1119,6 +1181,55 @@ static void test_onclick(IHTMLDocument2 *doc)
     IHTMLElement_Release(body);
 }
 
+static void test_onreadystatechange(IHTMLDocument2 *doc)
+{
+    IHTMLFrameBase *iframe;
+    IHTMLElement2 *elem2;
+    IHTMLElement *elem;
+    VARIANT v;
+    BSTR str;
+    HRESULT hres;
+
+    elem = get_elem_id(doc, "iframe");
+    elem2 = get_elem2_iface((IUnknown*)elem);
+    IHTMLElement_Release(elem);
+
+    V_VT(&v) = VT_EMPTY;
+    hres = IHTMLElement2_get_onreadystatechange(elem2, &v);
+    ok(hres == S_OK, "get_onreadystatechange failed: %08x\n", hres);
+    ok(V_VT(&v) == VT_NULL, "V_VT(onreadystatechange) = %d\n", V_VT(&v));
+
+    V_VT(&v) = VT_DISPATCH;
+    V_DISPATCH(&v) = (IDispatch*)&iframe_onreadystatechange_obj;
+    hres = IHTMLElement2_put_onreadystatechange(elem2, v);
+    ok(hres == S_OK, "put_onreadystatechange failed: %08x\n", hres);
+
+    V_VT(&v) = VT_EMPTY;
+    hres = IHTMLElement2_get_onreadystatechange(elem2, &v);
+    ok(hres == S_OK, "get_onreadystatechange failed: %08x\n", hres);
+    ok(V_VT(&v) == VT_DISPATCH, "V_VT(onreadystatechange) = %d\n", V_VT(&v));
+    ok(V_DISPATCH(&v) == (IDispatch*)&iframe_onreadystatechange_obj, "unexpected onreadystatechange value\n");
+
+    hres = IHTMLElement2_QueryInterface(elem2, &IID_IHTMLFrameBase, (void**)&iframe);
+    IHTMLElement2_Release(elem2);
+    ok(hres == S_OK, "Could not get IHTMLFrameBase iface: %08x\n", hres);
+
+    hres = IHTMLFrameBase_put_src(iframe, (str = a2bstr("about:blank")));
+    SysFreeString(str);
+    ok(hres == S_OK, "put_src failed: %08x\n", hres);
+
+    SET_EXPECT(iframe_onreadystatechange_loading);
+    SET_EXPECT(iframe_onreadystatechange_interactive);
+    SET_EXPECT(iframe_onreadystatechange_complete);
+    pump_msgs(&called_iframe_onreadystatechange_complete);
+    todo_wine
+    CHECK_CALLED(iframe_onreadystatechange_loading);
+    CHECK_CALLED(iframe_onreadystatechange_interactive);
+    CHECK_CALLED(iframe_onreadystatechange_complete);
+
+    IHTMLFrameBase_Release(iframe);
+}
+
 static void test_timeout(IHTMLDocument2 *doc)
 {
     IHTMLWindow3 *win3;
@@ -1746,6 +1857,7 @@ START_TEST(events)
 
     run_test(empty_doc_str, test_timeout);
     run_test(click_doc_str, test_onclick);
+    run_test(readystate_doc_str, test_onreadystatechange);
 
     DestroyWindow(container_hwnd);
     CoUninitialize();




More information about the wine-cvs mailing list