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

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


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Jun 18 17:06:34 2008 -0500

mshtml: Added IHTMLDOMNode::put_nodeValue implementation.

---

 dlls/mshtml/htmlnode.c  |   21 ++++++++++++++++++-
 dlls/mshtml/tests/dom.c |   50 +++++++++++++++++++++++++---------------------
 2 files changed, 47 insertions(+), 24 deletions(-)

diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c
index f5c6771..2f37c54 100644
--- a/dlls/mshtml/htmlnode.c
+++ b/dlls/mshtml/htmlnode.c
@@ -460,7 +460,26 @@ static HRESULT WINAPI HTMLDOMNode_get_nodeName(IHTMLDOMNode *iface, BSTR *p)
 static HRESULT WINAPI HTMLDOMNode_put_nodeValue(IHTMLDOMNode *iface, VARIANT v)
 {
     HTMLDOMNode *This = HTMLDOMNODE_THIS(iface);
-    FIXME("(%p)->()\n", This);
+
+    TRACE("(%p)->()\n", This);
+
+    switch(V_VT(&v)) {
+    case VT_BSTR: {
+        nsAString val_str;
+
+        TRACE("bstr %s\n", debugstr_w(V_BSTR(&v)));
+
+        nsAString_Init(&val_str, V_BSTR(&v));
+        nsIDOMNode_SetNodeValue(This->nsnode, &val_str);
+        nsAString_Finish(&val_str);
+
+        return S_OK;
+    }
+
+    default:
+        FIXME("unsupported vt %d\n", V_VT(&v));
+    }
+
     return E_NOTIMPL;
 }
 
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index de48508..7269ad1 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -390,13 +390,10 @@ static IHTMLDOMNode *_get_node_iface(unsigned line, IUnknown *unk)
 #define test_node_name(u,n) _test_node_name(__LINE__,u,n)
 static void _test_node_name(unsigned line, IUnknown *unk, const char *exname)
 {
-    IHTMLDOMNode *node;
+    IHTMLDOMNode *node = _get_node_iface(line, unk);
     BSTR name;
     HRESULT hres;
 
-    hres = IUnknown_QueryInterface(unk, &IID_IHTMLDOMNode, (void**)&node);
-    ok_(__FILE__, line) (hres == S_OK, "QueryInterface(IID_IHTMLNode) failed: %08x\n", hres);
-
     hres = IHTMLDOMNode_get_nodeName(node, &name);
     IHTMLDOMNode_Release(node);
     ok_(__FILE__, line) (hres == S_OK, "get_nodeName failed: %08x\n", hres);
@@ -798,14 +795,10 @@ static void _test_elem_collection(unsigned line, IHTMLElementCollection *col,
 #define get_first_child(n) _get_first_child(__LINE__,n)
 static IHTMLDOMNode *_get_first_child(unsigned line, IUnknown *unk)
 {
-    IHTMLDOMNode *node, *child = NULL;
+    IHTMLDOMNode *node = _get_node_iface(line, unk);
+    IHTMLDOMNode *child = NULL;
     HRESULT hres;
 
-    hres = IUnknown_QueryInterface(unk, &IID_IHTMLDOMNode, (void**)&node);
-    ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLDOMNode: %08x\n", hres);
-    if(FAILED(hres))
-        return NULL;
-
     hres = IHTMLDOMNode_get_firstChild(node, &child);
     IHTMLDOMNode_Release(node);
     ok_(__FILE__,line) (hres == S_OK, "get_firstChild failed: %08x\n", hres);
@@ -816,13 +809,10 @@ static IHTMLDOMNode *_get_first_child(unsigned line, IUnknown *unk)
 #define get_node_type(n) _get_node_type(__LINE__,n)
 static long _get_node_type(unsigned line, IUnknown *unk)
 {
-    IHTMLDOMNode *node;
+    IHTMLDOMNode *node = _get_node_iface(line, unk);
     long type = -1;
     HRESULT hres;
 
-    hres = IUnknown_QueryInterface(unk, &IID_IHTMLDOMNode, (void**)&node);
-    ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLDOMNode: %08x\n", hres);
-
     hres = IHTMLDOMNode_get_nodeType(node, &type);
     ok(hres == S_OK, "get_nodeType failed: %08x\n", hres);
 
@@ -845,16 +835,11 @@ static void _test_input_get_disabled(unsigned line, IHTMLInputElement *input, VA
 #define get_child_nodes(u) _get_child_nodes(__LINE__,u)
 static IHTMLDOMChildrenCollection *_get_child_nodes(unsigned line, IUnknown *unk)
 {
+    IHTMLDOMNode *node = _get_node_iface(line, unk);
     IHTMLDOMChildrenCollection *col = NULL;
-    IHTMLDOMNode *node;
     IDispatch *disp;
     HRESULT hres;
 
-    hres = IUnknown_QueryInterface(unk, &IID_IHTMLDOMNode, (void**)&node);
-    ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLDOMNode: %08x\n", hres);
-    if(FAILED(hres))
-        return NULL;
-
     hres = IHTMLDOMNode_get_childNodes(node, &disp);
     IHTMLDOMNode_Release(node);
     ok_(__FILE__,line) (hres == S_OK, "get_childNodes failed: %08x\n", hres);
@@ -878,9 +863,8 @@ static IHTMLDOMNode *_get_child_item(unsigned line, IHTMLDOMChildrenCollection *
     hres = IHTMLDOMChildrenCollection_item(col, idx, &disp);
     ok(hres == S_OK, "item failed: %08x\n", hres);
 
-    hres = IDispatch_QueryInterface(disp, &IID_IHTMLDOMNode, (void**)&node);
+    node = _get_node_iface(line, (IUnknown*)disp);
     IDispatch_Release(disp);
-    ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLDOMNode: %08x\n", hres);
 
     return node;
 }
@@ -940,6 +924,22 @@ static void _test_node_get_value_str(unsigned line, IUnknown *unk, const char *e
     VariantClear(&var);
 }
 
+#define test_node_put_value_str(u,v) _test_node_put_value_str(__LINE__,u,v)
+static void _test_node_put_value_str(unsigned line, IUnknown *unk, const char *val)
+{
+    IHTMLDOMNode *node = _get_node_iface(line, unk);
+    VARIANT var;
+    HRESULT hres;
+
+    V_VT(&var) = VT_BSTR;
+    V_BSTR(&var) = a2bstr(val);
+
+    hres = IHTMLDOMNode_put_nodeValue(node, var);
+    ok_(__FILE__,line) (hres == S_OK, "get_nodeValue failed: %08x, expected VT_BSTR\n", hres);
+    IHTMLDOMNode_Release(node);
+    VariantClear(&var);
+}
+
 static void test_elem_col_item(IHTMLElementCollection *col, LPCWSTR n,
         const elem_type_t *elem_types, long len)
 {
@@ -1706,6 +1706,8 @@ static void test_elems(IHTMLDocument2 *doc)
         test_input_get_disabled(input, VARIANT_FALSE);
 
         test_node_get_value_str((IUnknown*)elem, NULL);
+        test_node_put_value_str((IUnknown*)elem, "test");
+        test_node_get_value_str((IUnknown*)elem, NULL);
 
         IHTMLInputElement_Release(input);
         IHTMLElement_Release(elem);
@@ -1727,6 +1729,8 @@ static void test_elems(IHTMLDocument2 *doc)
         ok(type == 3, "type=%ld\n", type);
 
         test_node_get_value_str((IUnknown*)node, "text test");
+        test_node_put_value_str((IUnknown*)elem, "test text");
+        test_node_get_value_str((IUnknown*)node, "text test");
 
         IHTMLDOMNode_Release(node);
     }
@@ -1868,7 +1872,7 @@ static HRESULT WINAPI PropertyNotifySink_OnChanged(IPropertyNotifySink *iface, D
         if(!lstrcmpW(state, completeW))
             doc_complete = TRUE;
 
-        SysFreeString(state);        
+        SysFreeString(state);
     }
 
     return S_OK;




More information about the wine-cvs mailing list