Jacek Caban : mshtml: Added IHTMLDOMAttribute::get_nodeValue implementation .
Alexandre Julliard
julliard at winehq.org
Fri Feb 25 11:19:46 CST 2011
Module: wine
Branch: master
Commit: 47ebbbd44753de727b0ae2d5f9d9759b792ac886
URL: http://source.winehq.org/git/wine.git/?a=commit;h=47ebbbd44753de727b0ae2d5f9d9759b792ac886
Author: Jacek Caban <jacek at 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);
}
More information about the wine-cvs
mailing list