From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/attribute.c | 4 ++-- dlls/msxml3/tests/domdoc.c | 42 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/dlls/msxml3/attribute.c b/dlls/msxml3/attribute.c index 4842b6cc050..865c0207f18 100644 --- a/dlls/msxml3/attribute.c +++ b/dlls/msxml3/attribute.c @@ -239,7 +239,7 @@ static HRESULT WINAPI domattr_insertBefore(IXMLDOMAttribute *iface, IXMLDOMNode* { domattr *attr = impl_from_IXMLDOMAttribute(iface); - FIXME("%p, %p, %s, %p needs test\n", iface, newNode, debugstr_variant(&refChild), old_node); + TRACE("%p, %p, %s, %p.\n", iface, newNode, debugstr_variant(&refChild), old_node); return node_insert_before(attr->node, newNode, &refChild, old_node); } @@ -249,7 +249,7 @@ static HRESULT WINAPI domattr_replaceChild(IXMLDOMAttribute *iface, IXMLDOMNode { domattr *attr = impl_from_IXMLDOMAttribute(iface); - FIXME("%p, %p, %p, %p needs tests\n", iface, newNode, oldNode, outOldNode); + TRACE("%p, %p, %p, %p.\n", iface, newNode, oldNode, outOldNode); return node_replace_child(attr->node, newNode, oldNode, outOldNode); } diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 17d17206e88..3f8a7ce1bf2 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -4251,9 +4251,12 @@ static void test_replaceChild(void) IXMLDOMElement *element, *ba_element; IXMLDOMNode *fo_node, *ba_node, *lc_node, *removed_node, *temp_node; IXMLDOMNodeList *root_list, *fo_list; + IXMLDOMNode *node, *node2, *node3; IUnknown * unk1, *unk2; HRESULT hr; + VARIANT v; LONG len; + BSTR str; doc = create_document(&IID_IXMLDOMDocument); @@ -4351,6 +4354,45 @@ static void test_replaceChild(void) IXMLDOMNode_Release(temp_node); IXMLDOMNodeList_Release( root_list ); IXMLDOMElement_Release( element ); + + /* Attributes */ + V_VT(&v) = VT_I2; + V_I2(&v) = NODE_ATTRIBUTE; + hr = IXMLDOMDocument_createNode(doc, v, _bstr_("attr"), NULL, &node); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + V_VT(&v) = VT_I2; + V_I2(&v) = NODE_TEXT; + hr = IXMLDOMDocument_createNode(doc, v, NULL, NULL, &node2); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMNode_put_text(node2, _bstr_("value")); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + V_VT(&v) = VT_I2; + V_I2(&v) = NODE_TEXT; + hr = IXMLDOMDocument_createNode(doc, v, NULL, NULL, &node3); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMNode_put_text(node3, _bstr_("value2")); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMNode_appendChild(node, node2, NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMNode_get_xml(node, &str); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(!wcscmp(str, L"attr=\"value\""), "Unexpected xml %s\n", debugstr_w(str)); + SysFreeString(str); + + hr = IXMLDOMNode_replaceChild(node, node3, node2, NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMNode_get_xml(node, &str); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(!wcscmp(str, L"attr=\"value2\""), "Unexpected xml %s\n", debugstr_w(str)); + SysFreeString(str); + + IXMLDOMNode_Release(node3); + IXMLDOMNode_Release(node2); + IXMLDOMNode_Release(node); + IXMLDOMDocument_Release( doc ); free_bstrs(); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10841