Module: wine Branch: master Commit: bb05803a2ac56c078393803503fc73400c51c9c1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=bb05803a2ac56c078393803503...
Author: Jacek Caban jacek@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); }