Jacek Caban : mshtml: Added more attribute object tests.

Alexandre Julliard julliard at winehq.org
Thu Mar 3 11:46:21 CST 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Mar  2 23:10:11 2011 +0100

mshtml: Added more attribute object tests.

---

 dlls/mshtml/tests/dom.c |   82 +++++++++++++++++++++++++++++++---------------
 1 files changed, 55 insertions(+), 27 deletions(-)

diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index 88d8790..ec6c7e8 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -56,7 +56,7 @@ static const char elem_test_str[] =
     "</body></html>";
 static const char elem_test2_str[] =
     "<html><head><title>test</title><style>.body { margin-right: 0px; }</style>"
-    "<body><div id=\"divid\" emptyattr=""></div></body>"
+    "<body><div id=\"divid\" emptyattr=\"\" onclick=\"parseInt();\"></div></body>"
     "</html>";
 
 static const char indent_test_str[] =
@@ -462,6 +462,17 @@ static IHTMLDocument2 *create_document(void)
     return doc;
 }
 
+#define get_dispex_iface(u) _get_dispex_iface(__LINE__,u)
+static IDispatchEx *_get_dispex_iface(unsigned line, IUnknown *unk)
+{
+    IDispatchEx *dispex;
+    HRESULT hres;
+
+    hres = IUnknown_QueryInterface(unk, &IID_IDispatchEx, (void**)&dispex);
+    ok_(__FILE__,line) (hres == S_OK, "Could not get IDispatchEx: %08x\n", hres);
+    return dispex;
+}
+
 #define test_ifaces(i,ids) _test_ifaces(__LINE__,i,ids)
 static void _test_ifaces(unsigned line, IUnknown *iface, REFIID *iids)
 {
@@ -492,17 +503,12 @@ static void _test_no_iface(unsigned line, IUnknown *iface, REFIID iid)
 #define test_get_dispid(u,id) _test_get_dispid(__LINE__,u,id)
 static BOOL _test_get_dispid(unsigned line, IUnknown *unk, IID *iid)
 {
-    IDispatchEx *dispex;
+    IDispatchEx *dispex = _get_dispex_iface(line, unk);
     ITypeInfo *typeinfo;
     BOOL ret = FALSE;
     UINT ticnt;
     HRESULT hres;
 
-    hres = IUnknown_QueryInterface(unk, &IID_IDispatchEx, (void**)&dispex);
-    ok_(__FILE__,line) (hres == S_OK, "Could not get IDispatchEx: %08x\n", hres);
-    if(FAILED(hres))
-        return FALSE;
-
     ticnt = 0xdeadbeef;
     hres = IDispatchEx_GetTypeInfoCount(dispex, &ticnt);
     ok_(__FILE__,line) (hres == S_OK, "GetTypeInfoCount failed: %08x\n", hres);
@@ -532,17 +538,12 @@ static BOOL _test_get_dispid(unsigned line, IUnknown *unk, IID *iid)
 #define test_disp_value(u) _test_disp_value(__LINE__,u,v)
 static void _test_disp_value(unsigned line, IUnknown *unk, const char *val)
 {
+    IDispatchEx *dispex = _get_dispex_iface(line, unk);
     DISPPARAMS dp  = {NULL,NULL,0,0};
-    IDispatchEx *dispex;
     EXCEPINFO ei;
     VARIANT var;
     HRESULT hres;
 
-    hres = IUnknown_QueryInterface(unk, &IID_IDispatchEx, (void**)&dispex);
-    ok_(__FILE__,line)(hres == S_OK, "Could not get IDispatchEx interface: %08x\n", hres);
-    if(FAILED(hres))
-        return;
-
     hres = IDispatchEx_InvokeEx(dispex, DISPID_VALUE, 0, DISPATCH_PROPERTYGET, &dp, &var, &ei, NULL);
     IDispatchEx_Release(dispex);
     ok_(__FILE__,line)(hres == S_OK, "InvokeEx(DISPID_VALUE) returned: %08x\n", hres);
@@ -577,6 +578,27 @@ static void _test_disp2(unsigned line, IUnknown *unk, const IID *diid, const IID
         _test_disp_value(line, unk, val);
 }
 
+#define set_dispex_value(a,b,c) _set_dispex_value(__LINE__,a,b,c)
+static void _set_dispex_value(unsigned line, IUnknown *unk, const char *name, VARIANT *val)
+{
+    IDispatchEx *dispex = _get_dispex_iface(line, unk);
+    DISPPARAMS dp = {val, NULL, 1, 0};
+    EXCEPINFO ei;
+    DISPID id;
+    BSTR str;
+    HRESULT hres;
+
+    str = a2bstr(name);
+    hres = IDispatchEx_GetDispID(dispex, str, fdexNameEnsure|fdexNameCaseInsensitive, &id);
+    SysFreeString(str);
+    ok_(__FILE__,line)(hres == S_OK, "GetDispID failed: %08x\n", hres);
+
+    memset(&ei, 0, sizeof(ei));
+    hres = IDispatchEx_InvokeEx(dispex, id, LOCALE_NEUTRAL, INVOKE_PROPERTYPUT, &dp, NULL, &ei, NULL);
+    ok_(__FILE__,line)(hres == S_OK, "InvokeEx failed: %08x\n", hres);
+
+}
+
 #define get_elem_iface(u) _get_elem_iface(__LINE__,u)
 static IHTMLElement *_get_elem_iface(unsigned line, IUnknown *unk)
 {
@@ -2897,21 +2919,14 @@ static IHTMLDOMAttribute *_get_elem_attr_node(unsigned line, IUnknown *unk, cons
     return attr;
 }
 
-#define test_attr_node_value(a,b) _test_attr_node_value(__LINE__,a,b)
-static void _test_attr_node_value(unsigned line, IHTMLDOMAttribute *attr, const char *exval)
+#define get_attr_node_value(a,b,c) _get_attr_node_value(__LINE__,a,b,c)
+static void _get_attr_node_value(unsigned line, IHTMLDOMAttribute *attr, VARIANT *v, VARTYPE vt)
 {
-    VARIANT var;
     HRESULT hres;
 
-    hres = IHTMLDOMAttribute_get_nodeValue(attr, &var);
+    hres = IHTMLDOMAttribute_get_nodeValue(attr, v);
     ok_(__FILE__,line) (hres == S_OK, "get_nodeValue failed: %08x, expected VT_BSTR\n", hres);
-    ok_(__FILE__,line) (V_VT(&var) == VT_BSTR, "vt=%d\n", V_VT(&var));
-    if(exval)
-        ok_(__FILE__,line) (!strcmp_wa(V_BSTR(&var), exval), "unexpected value %s\n", wine_dbgstr_w(V_BSTR(&var)));
-    else
-        ok_(__FILE__,line) (!V_BSTR(&var), "nodeValue = %s, expected NULL\n", wine_dbgstr_w(V_BSTR(&var)));
-
-    VariantClear(&var);
+    ok_(__FILE__,line) (V_VT(v) == vt, "vt=%d, expected %d\n", V_VT(v), vt);
 }
 
 #define get_window_doc(e) _get_window_doc(__LINE__,e)
@@ -6802,6 +6817,7 @@ static void test_elems(IHTMLDocument2 *doc)
 static void test_attr(IHTMLElement *elem)
 {
     IHTMLDOMAttribute *attr, *attr2;
+    VARIANT v;
 
     get_elem_attr_node((IUnknown*)elem, "noattr", FALSE);
 
@@ -6815,12 +6831,24 @@ static void test_attr(IHTMLElement *elem)
     ok(iface_cmp((IUnknown*)attr, (IUnknown*)attr2), "attr != attr2\n");
     IHTMLDOMAttribute_Release(attr2);
 
-    test_attr_node_value(attr, "divid");
+    get_attr_node_value(attr, &v, VT_BSTR);
+    ok(!strcmp_wa(V_BSTR(&v), "divid"), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
+    VariantClear(&v);
 
     IHTMLDOMAttribute_Release(attr);
 
     attr = get_elem_attr_node((IUnknown*)elem, "emptyattr", TRUE);
-    test_attr_node_value(attr, NULL);
+    get_attr_node_value(attr, &v, VT_BSTR);
+    ok(!V_BSTR(&v), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
+    VariantClear(&v);
+    IHTMLDOMAttribute_Release(attr);
+
+    V_VT(&v) = VT_I4;
+    V_I4(&v) = 100;
+    set_dispex_value((IUnknown*)elem, "dispprop", &v);
+    attr = get_elem_attr_node((IUnknown*)elem, "dispprop", TRUE);
+    get_attr_node_value(attr, &v, VT_I4);
+    ok(V_I4(&v) == 100, "V_I4(v) = %d\n", V_I4(&v));
     IHTMLDOMAttribute_Release(attr);
 }
 
@@ -7529,10 +7557,10 @@ START_TEST(dom)
     run_domtest(range_test2_str, test_txtrange2);
     if (winetest_interactive || ! is_ie_hardened()) {
         run_domtest(elem_test_str, test_elems);
+        run_domtest(elem_test2_str, test_elems2);
     }else {
         skip("IE running in Enhanced Security Configuration\n");
     }
-    run_domtest(elem_test2_str, test_elems2);
     run_domtest(doc_blank, test_create_elems);
     run_domtest(doc_blank, test_defaults);
     run_domtest(doc_blank, test_null_write);




More information about the wine-cvs mailing list