Module: wine Branch: master Commit: 26e23bdd0718a42fd1df07c60a6d77418ed0dce2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=26e23bdd0718a42fd1df07c60a...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Jun 18 17:06:00 2008 -0500
mshtml: Added IHTMLDOMNode::get_nodeValue implementation.
---
dlls/mshtml/htmlnode.c | 21 +++++++++++++++++++-- dlls/mshtml/tests/dom.c | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index f217893..f5c6771 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -467,8 +467,25 @@ static HRESULT WINAPI HTMLDOMNode_put_nodeValue(IHTMLDOMNode *iface, VARIANT v) static HRESULT WINAPI HTMLDOMNode_get_nodeValue(IHTMLDOMNode *iface, VARIANT *p) { HTMLDOMNode *This = HTMLDOMNODE_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + const PRUnichar *val; + nsAString val_str; + + TRACE("(%p)->(%p)\n", This, p); + + nsAString_Init(&val_str, NULL); + nsIDOMNode_GetNodeValue(This->nsnode, &val_str); + nsAString_GetData(&val_str, &val); + + if(*val) { + V_VT(p) = VT_BSTR; + V_BSTR(p) = SysAllocString(val); + }else { + V_VT(p) = VT_NULL; + } + + nsAString_Finish(&val_str); + + return S_OK; }
static HRESULT WINAPI HTMLDOMNode_get_firstChild(IHTMLDOMNode *iface, IHTMLDOMNode **p) diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index 45a5383..de48508 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -376,6 +376,17 @@ static IHTMLElement *_get_elem_iface(unsigned line, IUnknown *unk) return elem; }
+#define get_node_iface(u) _get_node_iface(__LINE__,u) +static IHTMLDOMNode *_get_node_iface(unsigned line, IUnknown *unk) +{ + IHTMLDOMNode *node; + HRESULT hres; + + hres = IUnknown_QueryInterface(unk, &IID_IHTMLDOMNode, (void**)&node); + ok_(__FILE__,line) (hres == S_OK, "Coule not get IHTMLDOMNode: %08x\n", hres); + return node; +} + #define test_node_name(u,n) _test_node_name(__LINE__,u,n) static void _test_node_name(unsigned line, IUnknown *unk, const char *exname) { @@ -908,6 +919,27 @@ static void _test_elem_put_id(unsigned line, IUnknown *unk, const char *new_id) _test_elem_id(line, unk, new_id); }
+#define test_node_get_value_str(u,e) _test_node_get_value_str(__LINE__,u,e) +static void _test_node_get_value_str(unsigned line, IUnknown *unk, const char *exval) +{ + IHTMLDOMNode *node = _get_node_iface(line, unk); + VARIANT var; + HRESULT hres; + + hres = IHTMLDOMNode_get_nodeValue(node, &var); + IHTMLDOMNode_Release(node); + ok_(__FILE__,line) (hres == S_OK, "get_nodeValue failed: %08x, expected VT_BSTR\n", hres); + + if(exval) { + ok_(__FILE__,line) (V_VT(&var) == VT_BSTR, "vt=%d\n", V_VT(&var)); + ok_(__FILE__,line) (!strcmp_wa(V_BSTR(&var), exval), "unexpected value %s\n", dbgstr_w(V_BSTR(&var))); + }else { + ok_(__FILE__,line) (V_VT(&var) == VT_NULL, "vt=%d, expected VT_NULL\n", V_VT(&var)); + } + + VariantClear(&var); +} + static void test_elem_col_item(IHTMLElementCollection *col, LPCWSTR n, const elem_type_t *elem_types, long len) { @@ -1673,6 +1705,8 @@ static void test_elems(IHTMLDocument2 *doc) test_elem_put_id((IUnknown*)elem, "newin"); test_input_get_disabled(input, VARIANT_FALSE);
+ test_node_get_value_str((IUnknown*)elem, NULL); + IHTMLInputElement_Release(input); IHTMLElement_Release(elem); } @@ -1692,6 +1726,8 @@ static void test_elems(IHTMLDocument2 *doc) type = get_node_type((IUnknown*)node); ok(type == 3, "type=%ld\n", type);
+ test_node_get_value_str((IUnknown*)node, "text test"); + IHTMLDOMNode_Release(node); }