From 6bf5ffbc3b26cb521b57b656c6b6f375cbab6c0d Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Thu, 24 Apr 2008 18:24:59 +0200 Subject: [PATCH] mshtml: Added get_firstChild implementation. --- dlls/mshtml/htmlnode.c | 15 +++++++++++++-- dlls/mshtml/tests/dom.c | 25 +++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index 9ee4513e859..b315e9d59c7 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -246,8 +246,19 @@ static HRESULT WINAPI HTMLDOMNode_get_nodeValue(IHTMLDOMNode *iface, VARIANT *p) static HRESULT WINAPI HTMLDOMNode_get_firstChild(IHTMLDOMNode *iface, IHTMLDOMNode **p) { HTMLDOMNode *This = HTMLDOMNODE_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + nsIDOMNode *nschild = NULL; + + TRACE("(%p)->(%p)\n", This, p); + + nsIDOMNode_GetFirstChild(This->nsnode, &nschild); + if(nschild) { + *p = HTMLDOMNODE(get_node(This->doc, nschild, TRUE)); + IHTMLDOMNode_AddRef(*p); + }else { + *p = NULL; + } + + return S_OK; } static HRESULT WINAPI HTMLDOMNode_get_lastChild(IHTMLDOMNode *iface, IHTMLDOMNode **p) diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index 83dc38f5be7..1ad24dcee9e 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -738,6 +738,23 @@ static void _test_elem_collection(unsigned line, IHTMLElementCollection *col, ok_(__FILE__,line) (disp == NULL, "disp != NULL\n"); } +#define get_first_child(n) _get_first_child(__LINE__,n) +static IHTMLDOMNode *_get_first_child(unsigned line, IUnknown *unk) +{ + IHTMLDOMNode *node, *child = NULL; + HRESULT hres; + + hres = IUnknown_QueryInterface(unk, &IID_IHTMLDOMNode, (void**)&node); + ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLDOMNode: %08x\n", hres); + if(FAILED(hres)) + return NULL; + + hres = IHTMLDOMNode_get_firstChild(node, &child); + ok_(__FILE__,line) (hres == S_OK, "get_firstChild failed: %08x\n", hres); + + return child; +} + static void test_elem_col_item(IHTMLElementCollection *col, LPCWSTR n, const elem_type_t *elem_types, long len) { @@ -1379,6 +1396,7 @@ static void test_elems(IHTMLDocument2 *doc) { IHTMLElementCollection *col; IHTMLElement *elem; + IHTMLDOMNode *node; IDispatch *disp; HRESULT hres; @@ -1451,6 +1469,13 @@ static void test_elems(IHTMLDocument2 *doc) test_select_elem(select); + node = get_first_child((IUnknown*)select); + ok(node != NULL, "node == NULL\n"); + if(node) { + test_elem_type((IUnknown*)node, ET_OPTION); + IHTMLDOMNode_Release(node); + } + IHTMLSelectElement_Release(select); IHTMLElement_Release(elem); }