Jacek Caban : mshtml: Added get_nodeType implementation.

Alexandre Julliard julliard at winehq.org
Thu Apr 24 15:56:46 CDT 2008


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Apr 24 18:26:18 2008 +0200

mshtml: Added get_nodeType implementation.

---

 dlls/mshtml/htmlnode.c  |   26 ++++++++++++++++++++++++--
 dlls/mshtml/tests/dom.c |   26 ++++++++++++++++++++++++++
 2 files changed, 50 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c
index ee0d727..7abf2ef 100644
--- a/dlls/mshtml/htmlnode.c
+++ b/dlls/mshtml/htmlnode.c
@@ -104,8 +104,30 @@ static HRESULT WINAPI HTMLDOMNode_Invoke(IHTMLDOMNode *iface, DISPID dispIdMembe
 static HRESULT WINAPI HTMLDOMNode_get_nodeType(IHTMLDOMNode *iface, long *p)
 {
     HTMLDOMNode *This = HTMLDOMNODE_THIS(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+    PRUint16 type = -1;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    nsIDOMNode_GetNodeType(This->nsnode, &type);
+
+    switch(type) {
+    case ELEMENT_NODE:
+        *p = 1;
+        break;
+    case TEXT_NODE:
+        *p = 3;
+        break;
+    default:
+        /*
+         * FIXME:
+         * According to MSDN only ELEMENT_NODE and TEXT_NODE are supported.
+         * It needs more tests.
+         */
+        FIXME("type %u\n", type);
+        *p = 0;
+    }
+
+    return S_OK;
 }
 
 static HRESULT WINAPI HTMLDOMNode_get_parentNode(IHTMLDOMNode *iface, IHTMLDOMNode **p)
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index f91da86..620ad97 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -763,6 +763,24 @@ static IHTMLDOMNode *_get_first_child(unsigned line, IUnknown *unk)
     return child;
 }
 
+#define get_node_type(n) _get_node_type(__LINE__,n)
+static long _get_node_type(unsigned line, IUnknown *unk)
+{
+    IHTMLDOMNode *node;
+    long type = -1;
+    HRESULT hres;
+
+    hres = IUnknown_QueryInterface(unk, &IID_IHTMLDOMNode, (void**)&node);
+    ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLDOMNode: %08x\n", hres);
+
+    hres = IHTMLDOMNode_get_nodeType(node, &type);
+    ok(hres == S_OK, "get_nodeType failed: %08x\n", hres);
+
+    IHTMLDOMNode_Release(node);
+
+    return type;
+}
+
 static void test_elem_col_item(IHTMLElementCollection *col, LPCWSTR n,
         const elem_type_t *elem_types, long len)
 {
@@ -1406,6 +1424,7 @@ static void test_elems(IHTMLDocument2 *doc)
     IHTMLElement *elem;
     IHTMLDOMNode *node, *node2;
     IDispatch *disp;
+    long type;
     HRESULT hres;
 
     static const WCHAR xW[] = {'x',0};
@@ -1484,6 +1503,9 @@ static void test_elems(IHTMLDocument2 *doc)
             IHTMLDOMNode_Release(node);
         }
 
+        type = get_node_type((IUnknown*)select);
+        ok(type == 1, "type=%ld\n", type);
+
         IHTMLSelectElement_Release(select);
         IHTMLElement_Release(elem);
     }
@@ -1512,9 +1534,13 @@ static void test_elems(IHTMLDocument2 *doc)
     if(node) {
         test_ifaces((IUnknown*)node, text_iids);
         test_disp((IUnknown*)node, &DIID_DispHTMLDOMTextNode);
+
         node2 = get_first_child((IUnknown*)node);
         ok(!node2, "node2 != NULL\n");
 
+        type = get_node_type((IUnknown*)node);
+        ok(type == 3, "type=%ld\n", type);
+
         IHTMLDOMNode_Release(node);
     }
 




More information about the wine-cvs mailing list