[PATCH 0/4] MR10841: msxml3: Handle baseName property for entity references.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10841
From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/entityref.c | 14 +++++++------- dlls/msxml3/tests/domdoc.c | 23 +++++++++++++++++++---- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/dlls/msxml3/entityref.c b/dlls/msxml3/entityref.c index ab26064ff6e..abfff07d55f 100644 --- a/dlls/msxml3/entityref.c +++ b/dlls/msxml3/entityref.c @@ -146,7 +146,7 @@ static HRESULT WINAPI entityref_get_nodeName(IXMLDOMEntityReference *iface, BSTR { entityref *ref = impl_from_IXMLDOMEntityReference(iface); - FIXME("%p, %p.\n", iface, p); + TRACE("%p, %p.\n", iface, p); return node_get_name(ref->node, p); } @@ -418,25 +418,25 @@ static HRESULT WINAPI entityref_get_parsed(IXMLDOMEntityReference *iface, VARIAN static HRESULT WINAPI entityref_get_namespaceURI(IXMLDOMEntityReference *iface, BSTR *p) { - entityref *ref = impl_from_IXMLDOMEntityReference(iface); - TRACE("%p, %p.\n", iface, p); - return node_get_namespaceURI(ref->node, p); + return return_null_bstr(p); } static HRESULT WINAPI entityref_get_prefix(IXMLDOMEntityReference *iface, BSTR *prefix) { - FIXME("%p, %p: stub\n", iface, prefix); + TRACE("%p, %p.\n", iface, prefix); return return_null_bstr(prefix); } static HRESULT WINAPI entityref_get_baseName(IXMLDOMEntityReference *iface, BSTR *name) { - FIXME("%p, %p: needs test\n", iface, name); + entityref *ref = impl_from_IXMLDOMEntityReference(iface); + + TRACE("%p, %p.\n", iface, name); - return return_null_bstr(name); + return node_get_name(ref->node, name); } static HRESULT WINAPI entityref_transformNodeToObject(IXMLDOMEntityReference *iface, IXMLDOMNode *node, VARIANT var1) diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index bb0742af215..879fa2e8332 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -17585,14 +17585,29 @@ static void test_entityref(void) hr = IXMLDOMDocument_createEntityReference(doc, _bstr_("ent"), &ref); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMEntityReference_get_prefix(ref, NULL); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + str = (void *)0x1; + hr = IXMLDOMEntityReference_get_prefix(ref, &str); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + ok(!str, "Unexpected prefix %p.\n", str); + + hr = IXMLDOMEntityReference_get_namespaceURI(ref, NULL); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + str = (void *)0x1; + hr = IXMLDOMEntityReference_get_namespaceURI(ref, &str); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + ok(!str, "Unexpected prefix %s.\n", debugstr_w(str)); + + hr = IXMLDOMEntityReference_get_nodeName(ref, &str); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(!wcscmp(str, L"ent"), "Unexpected name %s.\n", debugstr_w(str)); + SysFreeString(str); + hr = IXMLDOMEntityReference_get_baseName(ref, &str); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); -if (hr == S_OK) -{ ok(!wcscmp(str, L"ent"), "Unexpected name %s.\n", debugstr_w(str)); SysFreeString(str); -} IXMLDOMEntityReference_Release(ref); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10841
From: Nikolay Sivov <nsivov@codeweavers.com> Those don't look very useful. Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/tests/domdoc.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 879fa2e8332..17d17206e88 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -9966,10 +9966,6 @@ static void test_appendChild(void) hr = IXMLDOMDocument_createElement(doc2, _bstr_("elem2"), &elem2); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - EXPECT_REF(doc, 1); - todo_wine EXPECT_REF(elem, 2); - EXPECT_REF(doc2, 1); - todo_wine EXPECT_REF(elem2, 2); EXPECT_NO_CHILDREN(doc); EXPECT_NO_CHILDREN(doc2); @@ -9983,10 +9979,6 @@ static void test_appendChild(void) hr = IXMLDOMDocument_appendChild(doc2, (IXMLDOMNode*)elem, NULL); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - EXPECT_REF(doc, 1); - todo_wine EXPECT_REF(elem, 2); - EXPECT_REF(doc2, 1); - todo_wine EXPECT_REF(elem2, 2); EXPECT_NO_CHILDREN(doc); EXPECT_CHILDREN(doc2); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10841
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
From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/tests/domdoc.c | 45 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 3f8a7ce1bf2..39b70fd0300 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -8674,9 +8674,13 @@ static void test_get_prefix(void) static void test_selectSingleNode(void) { + IXMLDOMElement *element; + IXMLDOMDocument2 *doc2; + IXMLDOMAttribute *attr; IXMLDOMDocument *doc; IXMLDOMNodeList *list; IXMLDOMNode *node; + DOMNodeType type; VARIANT_BOOL b; HRESULT hr; LONG len; @@ -8732,6 +8736,47 @@ static void test_selectSingleNode(void) ok(len == 0, "got %ld\n", len); IXMLDOMNodeList_Release(list); + /* Select from detached tree. */ + hr = IXMLDOMDocument_QueryInterface(doc, &IID_IXMLDOMDocument2, (void **)&doc2); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMDocument2_setProperty(doc2, _bstr_("SelectionLanguage"), _variantbstr_("XPath")); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMDocument_loadXML(doc, _bstr_("<a>text</a>"), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + /* Root location '/' refers to a subtree and not the owning document. */ + hr = IXMLDOMDocument_createElement(doc, _bstr_("b"), &element); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMElement_selectSingleNode(element, _bstr_("/"), &node); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMNode_get_nodeType(node, &type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(type == NODE_ELEMENT, "Unexpected node %d.\n", type); + IXMLDOMNode_Release(node); + + /* Detached root has no parent */ + hr = IXMLDOMElement_selectSingleNode(element, _bstr_(".."), &node); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + + IXMLDOMElement_Release(element); + + hr = IXMLDOMDocument_createAttribute(doc, _bstr_("a"), &attr); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMAttribute_selectSingleNode(attr, _bstr_("/"), &node); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMNode_get_nodeType(node, &type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(type == NODE_ATTRIBUTE, "Unexpected node %d.\n", type); + IXMLDOMNode_Release(node); + hr = IXMLDOMAttribute_selectSingleNode(attr, _bstr_(".."), &node); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + IXMLDOMAttribute_Release(attr); + + IXMLDOMDocument2_Release(doc2); IXMLDOMDocument_Release(doc); free_bstrs(); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10841
participants (2)
-
Nikolay Sivov -
Nikolay Sivov (@nsivov)