Module: wine Branch: master Commit: 47ebbbd44753de727b0ae2d5f9d9759b792ac886 URL: http://source.winehq.org/git/wine.git/?a=commit;h=47ebbbd44753de727b0ae2d5f9...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Feb 25 14:10:54 2011 +0100
mshtml: Added IHTMLDOMAttribute::get_nodeValue implementation.
---
dlls/mshtml/htmlattr.c | 23 +++++++++++++++++++++-- dlls/mshtml/tests/dom.c | 25 ++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/htmlattr.c b/dlls/mshtml/htmlattr.c index 3d6de22..9fef7d8 100644 --- a/dlls/mshtml/htmlattr.c +++ b/dlls/mshtml/htmlattr.c @@ -134,8 +134,27 @@ static HRESULT WINAPI HTMLDOMAttribute_put_nodeName(IHTMLDOMAttribute *iface, VA static HRESULT WINAPI HTMLDOMAttribute_get_nodeValue(IHTMLDOMAttribute *iface, VARIANT *p) { HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + const PRUnichar *val; + nsAString val_str; + HRESULT hres = S_OK; + + TRACE("(%p)->(%p)\n", This, p); + + nsAString_Init(&val_str, NULL); + nsIDOMAttr_GetNodeValue(This->nsattr, &val_str); + nsAString_GetData(&val_str, &val); + + V_VT(p) = VT_BSTR; + if(*val) { + V_BSTR(p) = SysAllocString(val); + if(!V_BSTR(p)) + hres = E_OUTOFMEMORY; + }else { + V_BSTR(p) = NULL; + } + + nsAString_Finish(&val_str); + return hres; }
static HRESULT WINAPI HTMLDOMAttribute_get_specified(IHTMLDOMAttribute *iface, VARIANT_BOOL *p) diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index 296de73..b4e1619 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -56,7 +56,7 @@ static const char elem_test_str[] = "</body></html>"; static const char elem_test2_str[] = "<html><head><title>test</title><style>.body { margin-right: 0px; }</style>" - "<body><div id="divid"></div></body>" + "<body><div id="divid" emptyattr=""></div></body>" "</html>";
static const char indent_test_str[] = @@ -2845,6 +2845,23 @@ static IHTMLDOMAttribute *_get_elem_attr_node(unsigned line, IUnknown *unk, cons return attr; }
+#define test_attr_node_value(a,b) _test_attr_node_value(__LINE__,a,b) +static void _test_attr_node_value(unsigned line, IHTMLDOMAttribute *attr, const char *exval) +{ + VARIANT var; + HRESULT hres; + + hres = IHTMLDOMAttribute_get_nodeValue(attr, &var); + ok_(__FILE__,line) (hres == S_OK, "get_nodeValue failed: %08x, expected VT_BSTR\n", hres); + ok_(__FILE__,line) (V_VT(&var) == VT_BSTR, "vt=%d\n", V_VT(&var)); + if(exval) + ok_(__FILE__,line) (!strcmp_wa(V_BSTR(&var), exval), "unexpected value %s\n", wine_dbgstr_w(V_BSTR(&var))); + else + ok_(__FILE__,line) (!V_BSTR(&var), "nodeValue = %s, expected NULL\n", wine_dbgstr_w(V_BSTR(&var))); + + VariantClear(&var); +} + #define get_window_doc(e) _get_window_doc(__LINE__,e) static IHTMLDocument2 *_get_window_doc(unsigned line, IHTMLWindow2 *window) { @@ -6651,6 +6668,12 @@ static void test_attr(IHTMLElement *elem) ok(iface_cmp((IUnknown*)attr, (IUnknown*)attr2), "attr != attr2\n"); IHTMLDOMAttribute_Release(attr2);
+ test_attr_node_value(attr, "divid"); + + IHTMLDOMAttribute_Release(attr); + + attr = get_elem_attr_node((IUnknown*)elem, "emptyattr", TRUE); + test_attr_node_value(attr, NULL); IHTMLDOMAttribute_Release(attr); }