From: Jacob Czekalla <jczekalla@codeweavers.com> Test that setNamedItem() returns the inserted node for both a new attribute and a replaced attribute with the same name. --- dlls/msxml3/tests/domdoc.c | 82 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 9254914ca07..03500b58234 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -8423,6 +8423,87 @@ static void test_get_ownerDocument(void) free_bstrs(); } +static void test_setNamedItem_map(IXMLDOMDocument *doc, IXMLDOMNamedNodeMap *map, const char *name, HRESULT expected_hr) +{ + IXMLDOMNode *ret_node = NULL; + IXMLDOMAttribute *attr; + VARIANT value; + HRESULT hr; + + IXMLDOMDocument_createAttribute(doc, _bstr_(name), &attr); + IXMLDOMAttribute_put_nodeValue(attr, _variantbstr_("first")); + hr = IXMLDOMNamedNodeMap_setNamedItem(map, (IXMLDOMNode *)attr, &ret_node); + ok(hr == expected_hr, "Unexpected hr %#lx.\n", hr); + todo_wine ok(FAILED(hr) ? !ret_node : !!ret_node, "Unexpected returned node %p.\n", ret_node); + IXMLDOMAttribute_Release(attr); + if (ret_node) + { + VariantInit(&value); + hr = IXMLDOMNode_get_nodeValue(ret_node, &value); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(V_VT(&value) == VT_BSTR, "Unexpected type %d.\n", V_VT(&value)); + ok(V_VT(&value) == VT_BSTR && !wcscmp(V_BSTR(&value), L"first"), "Unexpected value %s.\n", debugstr_variant(&value)); + VariantClear(&value); + IXMLDOMNode_Release(ret_node); + } + + ret_node = NULL; + IXMLDOMDocument_createAttribute(doc, _bstr_(name), &attr); + IXMLDOMAttribute_put_nodeValue(attr, _variantbstr_("second")); + hr = IXMLDOMNamedNodeMap_setNamedItem(map, (IXMLDOMNode *)attr, &ret_node); + ok(hr == expected_hr, "Unexpected hr %#lx.\n", hr); + ok(FAILED(hr) ? !ret_node : !!ret_node, "Unexpected returned node %p.\n", ret_node); + IXMLDOMAttribute_Release(attr); + if (ret_node) + { + VariantInit(&value); + hr = IXMLDOMNode_get_nodeValue(ret_node, &value); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(V_VT(&value) == VT_BSTR, "Unexpected type %d.\n", V_VT(&value)); + todo_wine ok(V_VT(&value) == VT_BSTR && !wcscmp(V_BSTR(&value), L"second"), "Unexpected value %s.\n", debugstr_variant(&value)); + VariantClear(&value); + IXMLDOMNode_Release(ret_node); + } +} + +static void test_setNamedItem(void) +{ + IXMLDOMProcessingInstruction *pi; + IXMLDOMDocumentType *doctype; + IXMLDOMNamedNodeMap *map; + IXMLDOMDocument *doc; + IXMLDOMElement *elem; + HRESULT hr; + + doc = create_document(&IID_IXMLDOMDocument); + + IXMLDOMDocument_createElement(doc, _bstr_("test"), &elem); + IXMLDOMElement_get_attributes(elem, &map); + test_setNamedItem_map(doc, map, "attr", S_OK); + IXMLDOMNamedNodeMap_Release(map); + IXMLDOMElement_Release(elem); + + IXMLDOMDocument_createProcessingInstruction(doc, _bstr_("xml"), _bstr_("version=\"1.0\""), &pi); + IXMLDOMProcessingInstruction_get_attributes(pi, &map); + test_setNamedItem_map(doc, map, "standalone", S_OK); + IXMLDOMNamedNodeMap_Release(map); + IXMLDOMProcessingInstruction_Release(pi); + + IXMLDOMDocument_loadXML(doc, _bstr_(szEmailXML), NULL); + IXMLDOMDocument_get_doctype(doc, &doctype); + hr = IXMLDOMDocumentType_get_attributes(doctype, &map); + todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + if (hr == S_OK) + { + test_setNamedItem_map(doc, map, "attr", E_FAIL); + IXMLDOMNamedNodeMap_Release(map); + } + IXMLDOMDocumentType_Release(doctype); + + IXMLDOMDocument_Release(doc); + free_bstrs(); +} + static void test_setAttributeNode(void) { IXMLDOMDocument *doc, *doc2; @@ -17850,6 +17931,7 @@ START_TEST(domdoc) test_getQualifiedItem(); test_removeQualifiedItem(); test_get_ownerDocument(); + test_setNamedItem(); test_setAttributeNode(); test_put_dataType(); test_createNode(); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11363