Jacek Caban : mshtml: Added IHTMLDOMNode::get_nodeValue implementation.

Alexandre Julliard julliard at winehq.org
Thu Jun 19 06:38:43 CDT 2008


Module: wine
Branch: master
Commit: 26e23bdd0718a42fd1df07c60a6d77418ed0dce2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=26e23bdd0718a42fd1df07c60a6d77418ed0dce2

Author: Jacek Caban <jacek at 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);
     }
 




More information about the wine-cvs mailing list