From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/msxml3/tests/xmldoc.c | 162 +++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+)
diff --git a/dlls/msxml3/tests/xmldoc.c b/dlls/msxml3/tests/xmldoc.c index 77e3bf1f0b8..0ef154f5566 100644 --- a/dlls/msxml3/tests/xmldoc.c +++ b/dlls/msxml3/tests/xmldoc.c @@ -1527,6 +1527,166 @@ static void test_comments(void) IXMLDocument_Release(doc); }
+static const char doc_data11[] = + "<?xml version=\"1.0\"?><a><?pi0 sometext ?></a>"; + +static void test_pi(void) +{ + IXMLElement *root, *child, *parent; + IXMLElementCollection *c; + IXMLDocument *doc; + LONG type, count; + IDispatch *disp; + HRESULT hr; + VARIANT v; + BSTR s; + + hr = CoCreateInstance(&CLSID_XMLDocument, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDocument, (void **)&doc); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = load_document(doc, doc_data11, sizeof(doc_data11) - 1); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDocument_get_root(doc, &root); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLElement_get_children(root, &c); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLElementCollection_get_length(c, &count); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(count == 2, "Unexpected count %ld.\n", count); + + V_VT(&v) = VT_I4; + V_I4(&v) = 0; + hr = IXMLElementCollection_item(c, v, v, &disp); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IDispatch_QueryInterface(disp, &IID_IXMLElement, (void **)&child); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLElement_get_type(child, &type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(type == XMLELEMTYPE_PI, "Unexpected type %ld.\n", type); + + s = NULL; + hr = IXMLElement_get_tagName(child, &s); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(!wcscmp(s, L"PI0"), "Unexpected name %s.\n", debugstr_w(s)); + SysFreeString(s); + + s = NULL; + hr = IXMLElement_get_text(child, &s); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(s && !*s, "Unexpected text %s.\n", debugstr_w(s)); + SysFreeString(s); + + IXMLElement_Release(child); + IDispatch_Release(disp); + + V_VT(&v) = VT_I4; + V_I4(&v) = 1; + hr = IXMLElementCollection_item(c, v, v, &disp); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); +if (hr == S_OK) +{ + hr = IDispatch_QueryInterface(disp, &IID_IXMLElement, (void **)&child); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLElement_get_type(child, &type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(type == XMLELEMTYPE_TEXT, "Unexpected type %ld.\n", type); + + s = (void *)1; + hr = IXMLElement_get_tagName(child, &s); + ok(hr == E_NOTIMPL, "Unexpected hr %#lx.\n", hr); + ok(!s, "Unexpected name %s.\n", debugstr_w(s)); + + s = NULL; + hr = IXMLElement_get_text(child, &s); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(!wcscmp(s, L"sometext "), "Unexpected text %s.\n", debugstr_w(s)); + SysFreeString(s); + + hr = IXMLElement_get_parent(child, &parent); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLElement_get_type(parent, &type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(type == XMLELEMTYPE_ELEMENT, "Unexpected type %ld.\n", type); + s = NULL; + hr = IXMLElement_get_tagName(parent, &s); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(!wcscmp(s, L"A"), "Unexpected name %s.\n", debugstr_w(s)); + SysFreeString(s); + IXMLElement_Release(parent); + + IXMLElement_Release(child); + IDispatch_Release(disp); +} + + IXMLDocument_Release(doc); +} + +static const char doc_data12[] = + "<?xml version=\"1.0\"?><a><![CDATA[ cdata-text ]]></a>"; + +static void test_cdata(void) +{ + IXMLElement *root, *child; + IXMLElementCollection *c; + IXMLDocument *doc; + LONG type, count; + IDispatch *disp; + HRESULT hr; + VARIANT v; + BSTR s; + + hr = CoCreateInstance(&CLSID_XMLDocument, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDocument, (void **)&doc); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = load_document(doc, doc_data12, sizeof(doc_data12) - 1); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDocument_get_root(doc, &root); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLElement_get_children(root, &c); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLElementCollection_get_length(c, &count); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(count == 1, "Unexpected count %ld.\n", count); + + V_VT(&v) = VT_I4; + V_I4(&v) = 0; + hr = IXMLElementCollection_item(c, v, v, &disp); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IDispatch_QueryInterface(disp, &IID_IXMLElement, (void **)&child); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLElement_get_type(child, &type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(type == XMLELEMTYPE_TEXT, "Unexpected type %ld.\n", type); + +if (type == XMLELEMTYPE_TEXT) +{ + s = (void *)1; + hr = IXMLElement_get_tagName(child, &s); + ok(hr == E_NOTIMPL, "Unexpected hr %#lx.\n", hr); + ok(!s, "Unexpected pointer %p.\n", s); + + s = NULL; + hr = IXMLElement_get_text(child, &s); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(!wcscmp(s, L" cdata-text "), "Unexpected text %s.\n", debugstr_w(s)); + SysFreeString(s); +} + IXMLElement_Release(child); + IDispatch_Release(disp); + + IXMLDocument_Release(doc); +} + START_TEST(xmldoc) { HRESULT hr; @@ -1552,6 +1712,8 @@ START_TEST(xmldoc) test_xmlelem_children(); test_xmlelem_attributes(); test_comments(); + test_pi(); + test_cdata();
CoUninitialize(); }