diff --git a/dlls/msxml3/cdata.c b/dlls/msxml3/cdata.c index f81cf2f3267..e9de4727da0 100644 --- a/dlls/msxml3/cdata.c +++ b/dlls/msxml3/cdata.c @@ -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( diff --git a/dlls/msxml3/comment.c b/dlls/msxml3/comment.c index 4c5f107a25d..a75d1784cb7 100644 --- a/dlls/msxml3/comment.c +++ b/dlls/msxml3/comment.c @@ -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( diff --git a/dlls/msxml3/docfrag.c b/dlls/msxml3/docfrag.c index 0c4193ad77f..bc2b77f271f 100644 --- a/dlls/msxml3/docfrag.c +++ b/dlls/msxml3/docfrag.c @@ -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( diff --git a/dlls/msxml3/doctype.c b/dlls/msxml3/doctype.c index 360d2a03145..6c757b3f126 100644 --- a/dlls/msxml3/doctype.c +++ b/dlls/msxml3/doctype.c @@ -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( diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c index a5f9e9e5bfd..c9d1c483a6c 100644 --- a/dlls/msxml3/domdoc.c +++ b/dlls/msxml3/domdoc.c @@ -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( diff --git a/dlls/msxml3/pi.c b/dlls/msxml3/pi.c index 49a221d00a0..b9a2c7e0af8 100644 --- a/dlls/msxml3/pi.c +++ b/dlls/msxml3/pi.c @@ -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( diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 9dca66897f9..210c709675c 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -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);