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