Jacek Caban : mshtml: Added attribute object tests.

Alexandre Julliard julliard at winehq.org
Thu Feb 24 11:43:26 CST 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Feb 24 13:04:29 2011 +0100

mshtml: Added attribute object tests.

---

 dlls/mshtml/tests/dom.c |   74 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 73 insertions(+), 1 deletions(-)

diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index d6dfff9..296de73 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -1,5 +1,5 @@
 /*
- * Copyright 2007-2008 Jacek Caban for CodeWeavers
+ * Copyright 2007-2011 Jacek Caban for CodeWeavers
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -225,6 +225,12 @@ static const IID * const text_iids[] = {
     NULL
 };
 
+static const IID * const attr_iids[] = {
+    &IID_IHTMLDOMAttribute,
+    &IID_IDispatchEx,
+    NULL
+};
+
 static const IID * const location_iids[] = {
     &IID_IDispatch,
     &IID_IHTMLLocation,
@@ -468,6 +474,18 @@ static void _test_ifaces(unsigned line, IUnknown *iface, REFIID *iids)
     }
 }
 
+#define test_no_iface(a,b) _test_no_iface(__LINE__,a,b)
+static void _test_no_iface(unsigned line, IUnknown *iface, REFIID iid)
+{
+    IUnknown *unk;
+    HRESULT hres;
+
+    unk = (void*)0xdeadbeef;
+    hres = IUnknown_QueryInterface(iface, iid, (void**)&unk);
+    ok_(__FILE__,line)(hres == E_NOINTERFACE, "hres = %08x, expected E_NOINTERFACE\n", hres);
+    ok_(__FILE__,line)(!unk, "unk = %p\n", unk);
+}
+
 #define test_get_dispid(u,id) _test_get_dispid(__LINE__,u,id)
 static BOOL _test_get_dispid(unsigned line, IUnknown *unk, IID *iid)
 {
@@ -589,6 +607,17 @@ static IHTMLElement3 *_get_elem3_iface(unsigned line, IUnknown *unk)
     return elem;
 }
 
+#define get_elem4_iface(u) _get_elem4_iface(__LINE__,u)
+static IHTMLElement4 *_get_elem4_iface(unsigned line, IUnknown *unk)
+{
+    IHTMLElement4 *elem;
+    HRESULT hres;
+
+    hres = IUnknown_QueryInterface(unk, &IID_IHTMLElement4, (void**)&elem);
+    ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLElement4: %08x\n", hres);
+    return elem;
+}
+
 #define get_node_iface(u) _get_node_iface(__LINE__,u)
 static IHTMLDOMNode *_get_node_iface(unsigned line, IUnknown *unk)
 {
@@ -2795,6 +2824,27 @@ static IHTMLDocument2 *_get_elem_doc(unsigned line, IUnknown *unk)
     return doc;
 }
 
+#define get_elem_attr_node(a,b,c) _get_elem_attr_node(__LINE__,a,b,c)
+static IHTMLDOMAttribute *_get_elem_attr_node(unsigned line, IUnknown *unk, const char *attr_name, BOOL expect_success)
+{
+    IHTMLElement4 *elem = _get_elem4_iface(line, unk);
+    BSTR str = a2bstr(attr_name);
+    IHTMLDOMAttribute *attr;
+    HRESULT hres;
+
+    attr = (void*)0xdeadbeef;
+    hres = IHTMLElement4_getAttributeNode(elem, str, &attr);
+    ok_(__FILE__,line)(hres == S_OK, "getAttributeNode failed: %08x\n", hres);
+    if(expect_success)
+        ok_(__FILE__,line)(attr != NULL, "attr = NULL\n");
+    else
+        ok_(__FILE__,line)(!attr, "attr = %p\n", attr);
+
+    IHTMLElement4_Release(elem);
+    SysFreeString(str);
+    return attr;
+}
+
 #define get_window_doc(e) _get_window_doc(__LINE__,e)
 static IHTMLDocument2 *_get_window_doc(unsigned line, IHTMLWindow2 *window)
 {
@@ -6584,6 +6634,26 @@ static void test_elems(IHTMLDocument2 *doc)
     IHTMLWindow2_Release(window);
 }
 
+static void test_attr(IHTMLElement *elem)
+{
+    IHTMLDOMAttribute *attr, *attr2;
+
+    get_elem_attr_node((IUnknown*)elem, "noattr", FALSE);
+
+    attr = get_elem_attr_node((IUnknown*)elem, "id", TRUE);
+
+    test_disp((IUnknown*)attr, &DIID_DispHTMLDOMAttribute, "[object]");
+    test_ifaces((IUnknown*)attr, attr_iids);
+    test_no_iface((IUnknown*)attr, &IID_IHTMLDOMNode);
+
+    attr2 = get_elem_attr_node((IUnknown*)elem, "id", TRUE);
+    todo_wine
+    ok(iface_cmp((IUnknown*)attr, (IUnknown*)attr2), "attr != attr2\n");
+    IHTMLDOMAttribute_Release(attr2);
+
+    IHTMLDOMAttribute_Release(attr);
+}
+
 static void test_elems2(IHTMLDocument2 *doc)
 {
     IHTMLElement *elem, *elem2, *div;
@@ -6642,6 +6712,8 @@ static void test_elems2(IHTMLDocument2 *doc)
         IHTMLElement_Release(elem);
     }
 
+    test_attr(div);
+
     IHTMLElement_Release(div);
 }
 




More information about the wine-cvs mailing list