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