msxml3: Implement get_nodeTypedValue() for nodes that can't have type.
authorNikolay Sivov <nsivov@codeweavers.com>
Sun, 6 Mar 2011 21:39:13 +0000 (00:39 +0300)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 7 Mar 2011 12:19:05 +0000 (13:19 +0100)
dlls/msxml3/cdata.c
dlls/msxml3/comment.c
dlls/msxml3/docfrag.c
dlls/msxml3/doctype.c
dlls/msxml3/domdoc.c
dlls/msxml3/pi.c
dlls/msxml3/tests/domdoc.c

index f81cf2f3267231148288ba8721a5783e14db4071..e9de4727da05134f29ccdcb8418257cdb8e16f84 100644 (file)
@@ -433,11 +433,11 @@ static HRESULT WINAPI domcdata_get_definition(
 
 static HRESULT WINAPI domcdata_get_nodeTypedValue(
     IXMLDOMCDATASection *iface,
-    VARIANT* var1)
+    VARIANT* v)
 {
     domcdata *This = impl_from_IXMLDOMCDATASection( iface );
-    FIXME("(%p)->(%p)\n", This, var1);
-    return return_null_var(var1);
+    TRACE("(%p)->(%p)\n", This, v);
+    return node_get_content(&This->node, v);
 }
 
 static HRESULT WINAPI domcdata_put_nodeTypedValue(
index 4c5f107a25d8f87a81dbbb8bd89ebc7f7960fae4..a75d1784cb752048bb5cb74a79512115be1c6812 100644 (file)
@@ -432,11 +432,11 @@ static HRESULT WINAPI domcomment_get_definition(
 
 static HRESULT WINAPI domcomment_get_nodeTypedValue(
     IXMLDOMComment *iface,
-    VARIANT* var1)
+    VARIANT* v)
 {
     domcomment *This = impl_from_IXMLDOMComment( iface );
-    FIXME("(%p)->(%p)\n", This, var1);
-    return return_null_var(var1);
+    TRACE("(%p)->(%p)\n", This, v);
+    return node_get_content(&This->node, v);
 }
 
 static HRESULT WINAPI domcomment_put_nodeTypedValue(
index 0c4193ad77f449988b379d1ed98464af5a3cbf99..bc2b77f271f8d387a3cc2b7edc0bc8188bc9373c 100644 (file)
@@ -436,11 +436,11 @@ static HRESULT WINAPI domfrag_get_definition(
 
 static HRESULT WINAPI domfrag_get_nodeTypedValue(
     IXMLDOMDocumentFragment *iface,
-    VARIANT* var1)
+    VARIANT *v)
 {
     domfrag *This = impl_from_IXMLDOMDocumentFragment( iface );
-    FIXME("(%p)->(%p)\n", This, var1);
-    return return_null_var(var1);
+    TRACE("(%p)->(%p)\n", This, v);
+    return return_null_var(v);
 }
 
 static HRESULT WINAPI domfrag_put_nodeTypedValue(
index 360d2a03145f0a5e46de88c7ecbfeafe9281217d..6c757b3f1268df5d6bc20a68c069f466a0523d0c 100644 (file)
@@ -407,11 +407,11 @@ static HRESULT WINAPI domdoctype_get_definition(
 
 static HRESULT WINAPI domdoctype_get_nodeTypedValue(
     IXMLDOMDocumentType *iface,
-    VARIANT* var1)
+    VARIANT* v)
 {
     domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
-    FIXME("(%p)->(%p): stub\n", This, var1);
-    return E_NOTIMPL;
+    TRACE("(%p)->(%p)\n", This, v);
+    return return_null_var(v);
 }
 
 static HRESULT WINAPI domdoctype_put_nodeTypedValue(
index a5f9e9e5bfd6e01a34295d1d036ee0838943a444..c9d1c483a6c5f7a3a47c75d4f4c3090554ea274a 100644 (file)
@@ -1328,11 +1328,11 @@ static HRESULT WINAPI domdoc_get_definition(
 
 static HRESULT WINAPI domdoc_get_nodeTypedValue(
     IXMLDOMDocument3 *iface,
-    VARIANT* typedValue )
+    VARIANT* v )
 {
     domdoc *This = impl_from_IXMLDOMDocument3( iface );
-    FIXME("(%p)->(%p)\n", This, typedValue);
-    return return_null_var(typedValue);
+    TRACE("(%p)->(%p)\n", This, v);
+    return return_null_var(v);
 }
 
 static HRESULT WINAPI domdoc_put_nodeTypedValue(
index 49a221d00a04a0e7ac42f9437c3977bc7d2d21f3..b9a2c7e0af866e342c94a448918c94d705ca2558 100644 (file)
@@ -447,11 +447,11 @@ static HRESULT WINAPI dom_pi_get_definition(
 
 static HRESULT WINAPI dom_pi_get_nodeTypedValue(
     IXMLDOMProcessingInstruction *iface,
-    VARIANT* var1)
+    VARIANT* v)
 {
     dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
-    FIXME("(%p)->(%p)\n", This, var1);
-    return return_null_var(var1);
+    TRACE("(%p)->(%p)\n", This, v);
+    return node_get_content(&This->node, v);
 }
 
 static HRESULT WINAPI dom_pi_put_nodeTypedValue(
index 9dca66897f91ec9f853b59531782f8fb9e4e7b08..210c709675cdf057a2a70874aa8d9933ab9598d1 100644 (file)
@@ -6009,7 +6009,12 @@ static const nodetypedvalue_t get_nodetypedvalue[] = {
 static void test_nodeTypedValue(void)
 {
     const nodetypedvalue_t *entry = get_nodetypedvalue;
-    IXMLDOMDocument *doc;
+    IXMLDOMProcessingInstruction *pi;
+    IXMLDOMDocumentFragment *frag;
+    IXMLDOMDocumentType *doctype;
+    IXMLDOMDocument *doc, *doc2;
+    IXMLDOMCDATASection *cdata;
+    IXMLDOMComment *comment;
     IXMLDOMNode *node;
     VARIANT_BOOL b;
     VARIANT value;
@@ -6035,8 +6040,10 @@ static void test_nodeTypedValue(void)
     hr = IXMLDOMDocument_get_nodeTypedValue(doc, NULL);
     ok(hr == E_INVALIDARG, "ret %08x\n", hr );
 
+    V_VT(&value) = VT_EMPTY;
     hr = IXMLDOMDocument_get_nodeTypedValue(doc, &value);
     ok(hr == S_FALSE, "ret %08x\n", hr );
+    ok(V_VT(&value) == VT_NULL, "got %d\n", V_VT(&value));
 
     hr = IXMLDOMDocument_selectSingleNode(doc, _bstr_("root/string"), &node);
     ok(hr == S_OK, "ret %08x\n", hr );
@@ -6082,6 +6089,72 @@ static void test_nodeTypedValue(void)
         IXMLDOMNode_Release(node);
     }
 
+    hr = IXMLDOMDocument_createProcessingInstruction(doc, _bstr_("foo"), _bstr_("value"), &pi);
+    ok(hr == S_OK, "ret %08x\n", hr );
+    {
+        V_VT(&value) = VT_NULL;
+        V_BSTR(&value) = (void*)0xdeadbeef;
+        hr = IXMLDOMProcessingInstruction_get_nodeTypedValue(pi, &value);
+        ok(hr == S_OK, "ret %08x\n", hr );
+        ok(V_VT(&value) == VT_BSTR, "got %d\n", V_VT(&value));
+        ok(!lstrcmpW(V_BSTR(&value), _bstr_("value")), "got wrong value\n");
+        IXMLDOMProcessingInstruction_Release(pi);
+    }
+
+    hr = IXMLDOMDocument_createCDATASection(doc, _bstr_("[1]*2=3; &gee thats not right!"), &cdata);
+    ok(hr == S_OK, "ret %08x\n", hr );
+    {
+        V_VT(&value) = VT_NULL;
+        V_BSTR(&value) = (void*)0xdeadbeef;
+        hr = IXMLDOMCDATASection_get_nodeTypedValue(cdata, &value);
+        ok(hr == S_OK, "ret %08x\n", hr );
+        ok(V_VT(&value) == VT_BSTR, "got %d\n", V_VT(&value));
+        ok(!lstrcmpW(V_BSTR(&value), _bstr_("[1]*2=3; &gee thats not right!")), "got wrong value\n");
+        IXMLDOMCDATASection_Release(cdata);
+    }
+
+    hr = IXMLDOMDocument_createComment(doc, _bstr_("comment"), &comment);
+    ok(hr == S_OK, "ret %08x\n", hr );
+    {
+        V_VT(&value) = VT_NULL;
+        V_BSTR(&value) = (void*)0xdeadbeef;
+        hr = IXMLDOMComment_get_nodeTypedValue(comment, &value);
+        ok(hr == S_OK, "ret %08x\n", hr );
+        ok(V_VT(&value) == VT_BSTR, "got %d\n", V_VT(&value));
+        ok(!lstrcmpW(V_BSTR(&value), _bstr_("comment")), "got wrong value\n");
+        IXMLDOMComment_Release(comment);
+    }
+
+    hr = IXMLDOMDocument_createDocumentFragment(doc, &frag);
+    ok(hr == S_OK, "ret %08x\n", hr );
+    {
+        V_VT(&value) = VT_EMPTY;
+        hr = IXMLDOMDocumentFragment_get_nodeTypedValue(frag, &value);
+        ok(hr == S_FALSE, "ret %08x\n", hr );
+        ok(V_VT(&value) == VT_NULL, "got %d\n", V_VT(&value));
+        IXMLDOMDocumentFragment_Release(frag);
+    }
+
+    doc2 = create_document(&IID_IXMLDOMDocument);
+
+    b = VARIANT_FALSE;
+    hr = IXMLDOMDocument_loadXML(doc2, _bstr_(szEmailXML), &b);
+    ok(hr == S_OK, "ret %08x\n", hr );
+    ok(b == VARIANT_TRUE, "got %d\n", b);
+
+    hr = IXMLDOMDocument_get_doctype(doc2, &doctype);
+    todo_wine ok(hr == S_OK, "ret %08x\n", hr );
+    if (hr == S_OK)
+    {
+        V_VT(&value) = VT_EMPTY;
+        hr = IXMLDOMDocumentType_get_nodeTypedValue(doctype, &value);
+        ok(hr == S_FALSE, "ret %08x\n", hr );
+        ok(V_VT(&value) == VT_NULL, "got %d\n", V_VT(&value));
+        IXMLDOMDocumentType_Release(doctype);
+    }
+
+    IXMLDOMDocument_Release(doc2);
+
     while (entry->name)
     {
         hr = IXMLDOMDocument_selectSingleNode(doc, _bstr_(entry->name), &node);