Re: msxml3: Implement IXMLDOMAttribute get/put value
Ignore this patch. "Alistair Leslie-Hughes" <leslie_alistair(a)hotmail.com> wrote in message news:49269ECA.7070202(a)hotmail.com...
Hi,
Changelog: msxml3: Implement IXMLDOMAttribute get/put value
Best Regards Alistair Leslie-Hughes
--------------------------------------------------------------------------------
From 485959eb359d1efdf66c4be1aa110ba47877847c Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Date: Fri, 21 Nov 2008 21:36:30 +1100 Subject: [PATCH] Implement IXMLDOMAttribute get/put value To: wine-patches <wine-patches(a)winehq.org>
--- dlls/msxml3/attribute.c | 8 ++++---- dlls/msxml3/node.c | 21 +++++++++++++++------ dlls/msxml3/tests/domdoc.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 10 deletions(-)
diff --git a/dlls/msxml3/attribute.c b/dlls/msxml3/attribute.c index 2681a76..92cafad 100644 --- a/dlls/msxml3/attribute.c +++ b/dlls/msxml3/attribute.c @@ -482,16 +482,16 @@ static HRESULT WINAPI domattr_get_value( IXMLDOMAttribute *iface, VARIANT *var1) { - FIXME("\n"); - return E_NOTIMPL; + domattr *This = impl_from_IXMLDOMAttribute( iface ); + return IXMLDOMNode_get_nodeValue( This->node, var1 ); }
static HRESULT WINAPI domattr_put_value( IXMLDOMAttribute *iface, VARIANT var1) { - FIXME("\n"); - return E_NOTIMPL; + domattr *This = impl_from_IXMLDOMAttribute( iface ); + return IXMLDOMNode_put_nodeValue( This->node, var1 ); }
static const struct IXMLDOMAttributeVtbl domattr_vtbl = diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c index 19cee8f..6693803 100644 --- a/dlls/msxml3/node.c +++ b/dlls/msxml3/node.c @@ -339,13 +339,22 @@ static HRESULT WINAPI xmlnode_put_nodeValue(
TRACE("%p type(%d)\n", This, This->node->type);
- VariantInit(&string_value); - hr = VariantChangeType(&string_value, &value, 0, VT_BSTR); - if(FAILED(hr)) + /* Attribute nodes treat NULL Variants as empty strings. */ + if(V_VT(&value) == VT_NULL && This->node->type == XML_ATTRIBUTE_NODE) { - VariantClear(&string_value); - WARN("Couldn't convert to VT_BSTR\n"); - return hr; + V_VT(&string_value) = VT_BSTR; + V_BSTR(&string_value) = SysAllocStringLen(NULL, 0); + } + else + { + VariantInit(&string_value); + hr = VariantChangeType(&string_value, &value, 0, VT_BSTR); + if(FAILED(hr)) + { + VariantClear(&string_value); + WARN("Couldn't convert to VT_BSTR\n"); + return hr; + } }
hr = S_FALSE; diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index e27c506..c975d73 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -2796,12 +2796,18 @@ static void test_xmlTypes(void) ok( V_VT(&v) == VT_NULL, "incorrect dataType type\n"); VariantClear(&v);
+ V_VT(&v) = VT_NULL; + V_I4(&v) = 0; + hr = IXMLDOMElement_put_nodeValue(pElement, v); + ok(hr == DISP_E_TYPEMISMATCH, "ret %08x\n", hr ); + /* Attribute */ hr = IXMLDOMDocument_createAttribute(doc, szAttribute, &pAttrubute); ok(hr == S_OK, "ret %08x\n", hr ); if(hr == S_OK) { IXMLDOMNode *pNewChild = (IXMLDOMNode *)0x1; + IXMLDOMNode *pAttrNode = NULL;
hr = IXMLDOMAttribute_get_nextSibling(pAttrubute, NULL); ok(hr == E_INVALIDARG, "ret %08x\n", hr ); @@ -2876,6 +2882,30 @@ static void test_xmlTypes(void) ok( V_VT(&v) == VT_NULL, "incorrect dataType type\n"); VariantClear(&v);
+ /* test value */ + V_VT(&v) = VT_NULL; + VariantClear(&v); + hr = IXMLDOMAttribute_put_value(pAttrubute, v); + ok(hr == S_OK, "ret %08x\n", hr ); + VariantClear(&v); + + hr = IXMLDOMAttribute_get_value(pAttrubute, &v); + ok(hr == S_OK, "ret %08x\n", hr ); + ok( !lstrcmpW( V_BSTR(&v), _bstr_("") ), "incorrect get_value string\n"); + VariantClear(&v); + + IXMLDOMAttribute_QueryInterface(pAttrubute, &IID_IXMLDOMNode, (LPVOID*)&pAttrNode); + if(hr == S_OK) + { + V_VT(&v) = VT_NULL; + VariantClear(&v); + hr = IXMLDOMNode_put_nodeValue(pAttrNode, v); + ok(hr == S_OK, "ret %08x\n", hr ); + VariantClear(&v); + + IXMLDOMNode_Release(pAttrNode); + } + IXMLDOMAttribute_Release(pAttrubute);
/* Check Element again with the Add Attribute*/ -- 1.5.4.3
--------------------------------------------------------------------------------
participants (1)
-
Alistair Leslie-Hughes