Jacek Caban : mshtml: Added IHTMLDOMNode::get_parentNode implementation.

Alexandre Julliard julliard at winehq.org
Thu Jun 26 06:48:12 CDT 2008


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Jun 25 19:28:37 2008 -0500

mshtml: Added IHTMLDOMNode::get_parentNode implementation.

---

 dlls/mshtml/htmlnode.c  |   23 +++++++++++++++++++++--
 dlls/mshtml/tests/dom.c |   30 ++++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c
index d46d75c..b802e90 100644
--- a/dlls/mshtml/htmlnode.c
+++ b/dlls/mshtml/htmlnode.c
@@ -386,8 +386,27 @@ static HRESULT WINAPI HTMLDOMNode_get_nodeType(IHTMLDOMNode *iface, long *p)
 static HRESULT WINAPI HTMLDOMNode_get_parentNode(IHTMLDOMNode *iface, IHTMLDOMNode **p)
 {
     HTMLDOMNode *This = HTMLDOMNODE_THIS(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+    HTMLDOMNode *node;
+    nsIDOMNode *nsnode;
+    nsresult nsres;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    nsres = nsIDOMNode_GetParentNode(This->nsnode, &nsnode);
+    if(NS_FAILED(nsres)) {
+        ERR("GetParentNode failed: %08x\n", nsres);
+        return E_FAIL;
+    }
+
+    if(!nsnode) {
+        *p = NULL;
+        return S_OK;
+    }
+
+    node = get_node(This->doc, nsnode, TRUE);
+    *p = HTMLDOMNODE(node);
+    IHTMLDOMNode_AddRef(*p);
+    return S_OK;
 }
 
 static HRESULT WINAPI HTMLDOMNode_hasChildNodes(IHTMLDOMNode *iface, VARIANT_BOOL *fChildren)
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index a1b2e66..0748c89 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -900,6 +900,20 @@ static void _test_node_has_child(unsigned line, IUnknown *unk, VARIANT_BOOL exb)
     IHTMLDOMNode_Release(node);
 }
 
+#define test_node_get_parent(u) _test_node_get_parent(__LINE__,u)
+static IHTMLDOMNode *_test_node_get_parent(unsigned line, IUnknown *unk)
+{
+    IHTMLDOMNode *node = _get_node_iface(line, unk);
+    IHTMLDOMNode *parent;
+    HRESULT hres;
+
+    hres = IHTMLDOMNode_get_parentNode(node, &parent);
+    IHTMLDOMNode_Release(node);
+    ok_(__FILE__,line) (hres == S_OK, "get_parentNode failed: %08x\n", hres);
+
+    return parent;
+}
+
 #define get_node_type(n) _get_node_type(__LINE__,n)
 static long _get_node_type(unsigned line, IUnknown *unk)
 {
@@ -2042,6 +2056,22 @@ static void test_elems(IHTMLDocument2 *doc)
         test_elem_set_class((IUnknown*)elem, NULL);
         test_elem_tabindex((IUnknown*)elem, 0);
         test_elem_set_tabindex((IUnknown*)elem, 1);
+
+        node = test_node_get_parent((IUnknown*)elem);
+        ok(node != NULL, "node == NULL\n");
+        test_node_name((IUnknown*)node, "BODY");
+        node2 = test_node_get_parent((IUnknown*)node);
+        IHTMLDOMNode_Release(node);
+        ok(node2 != NULL, "node == NULL\n");
+        test_node_name((IUnknown*)node2, "HTML");
+        node = test_node_get_parent((IUnknown*)node2);
+        IHTMLDOMNode_Release(node2);
+        ok(node != NULL, "node == NULL\n");
+        test_node_name((IUnknown*)node, "#document");
+        node2 = test_node_get_parent((IUnknown*)node);
+        IHTMLDOMNode_Release(node);
+        ok(node2 == NULL, "node != NULL\n");
+
         IHTMLElement_Release(elem);
     }
 




More information about the wine-cvs mailing list