[PATCH 0/4] MR10727: msxml3/tests: Separate DTD validation tests.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10727
From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/tests/domdoc.c | 347 ++++++++++++-------------- dlls/msxml6/tests/domdoc.c | 488 +++++++++++++++++++++++++++++++++++++ 2 files changed, 640 insertions(+), 195 deletions(-) diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 1d7e9456561..cec2439a21b 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -4620,7 +4620,7 @@ static void _test_IObjectSafety_common(unsigned line, IObjectSafety *safety) static void test_IXMLDOMDocument2(void) { - IXMLDOMDocument2 *doc2, *dtddoc2; + IXMLDOMDocument2 *doc2; IXMLDOMDocument *doc; IXMLDOMParseError* err; IDispatchEx *dispex; @@ -4632,7 +4632,6 @@ static void test_IXMLDOMDocument2(void) if (!is_clsid_supported(&CLSID_DOMDocument2, &IID_IXMLDOMDocument2)) return; doc = create_document(&IID_IXMLDOMDocument); - dtddoc2 = create_document(&IID_IXMLDOMDocument2); hr = IXMLDOMDocument_QueryInterface( doc, &IID_IXMLDOMDocument2, (void**)&doc2 ); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); @@ -4746,199 +4745,6 @@ static void test_IXMLDOMDocument2(void) IXMLDOMDocument2_Release( doc2 ); IXMLDOMDocument_Release( doc ); - - /* DTD validation */ - hr = IXMLDOMDocument2_put_validateOnParse(dtddoc2, VARIANT_FALSE); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML), &b); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok( b == VARIANT_TRUE, "failed to load XML string\n"); - err = NULL; - hr = IXMLDOMDocument2_validate(dtddoc2, &err); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok(err != NULL, "expected pointer\n"); - if (err) - { - res = 0; - hr = IXMLDOMParseError_get_errorCode(err, &res); - ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); - ok(res == 0, "Unexpected code %#lx.\n", res); - IXMLDOMParseError_Release(err); - } - - hr = IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_0D), &b); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok( b == VARIANT_TRUE, "failed to load XML string\n"); - err = NULL; - hr = IXMLDOMDocument2_validate(dtddoc2, &err); - ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); - ok(err != NULL, "expected pointer\n"); - if (err) - { - res = 0; - hr = IXMLDOMParseError_get_errorCode(err, &res); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - /* XML_ELEMENT_UNDECLARED */ - todo_wine ok(res == 0xC00CE00D, "Unexpected code %#lx.\n", res); - IXMLDOMParseError_Release(err); - } - - hr = IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_0E), &b); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok( b == VARIANT_TRUE, "failed to load XML string\n"); - err = NULL; - hr = IXMLDOMDocument2_validate(dtddoc2, &err); - ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); - ok(err != NULL, "expected pointer\n"); - if (err) - { - res = 0; - hr = IXMLDOMParseError_get_errorCode(err, &res); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - /* XML_ELEMENT_ID_NOT_FOUND */ - todo_wine ok(res == 0xC00CE00E, "Unexpected code %#lx.\n", res); - IXMLDOMParseError_Release(err); - } - - hr = IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_11), &b); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok( b == VARIANT_TRUE, "failed to load XML string\n"); - err = NULL; - hr = IXMLDOMDocument2_validate(dtddoc2, &err); - ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); - ok(err != NULL, "expected pointer\n"); - if (err) - { - res = 0; - hr = IXMLDOMParseError_get_errorCode(err, &res); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - /* XML_EMPTY_NOT_ALLOWED */ - todo_wine ok(res == 0xC00CE011, "Unexpected code %#lx.\n", res); - IXMLDOMParseError_Release(err); - } - - hr = IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_13), &b); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok( b == VARIANT_TRUE, "failed to load XML string\n"); - err = NULL; - hr = IXMLDOMDocument2_validate(dtddoc2, &err); - ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); - ok(err != NULL, "expected pointer\n"); - if (err) - { - res = 0; - hr = IXMLDOMParseError_get_errorCode(err, &res); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - /* XML_ROOT_NAME_MISMATCH */ - todo_wine ok(res == 0xC00CE013, "Unexpected code %#lx.\n", res); - IXMLDOMParseError_Release(err); - } - - hr = IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_14), &b); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok( b == VARIANT_TRUE, "failed to load XML string\n"); - err = NULL; - hr = IXMLDOMDocument2_validate(dtddoc2, &err); - ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); - ok(err != NULL, "expected pointer\n"); - if (err) - { - res = 0; - hr = IXMLDOMParseError_get_errorCode(err, &res); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - /* XML_INVALID_CONTENT */ - todo_wine ok(res == 0xC00CE014, "Unexpected code %#lx.\n", res); - IXMLDOMParseError_Release(err); - } - - hr = IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_15), &b); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok( b == VARIANT_TRUE, "failed to load XML string\n"); - err = NULL; - hr = IXMLDOMDocument2_validate(dtddoc2, &err); - ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); - ok(err != NULL, "expected pointer\n"); - if (err) - { - res = 0; - hr = IXMLDOMParseError_get_errorCode(err, &res); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - /* XML_ATTRIBUTE_NOT_DEFINED */ - todo_wine ok(res == 0xC00CE015, "Unexpected code %#lx.\n", res); - IXMLDOMParseError_Release(err); - } - - hr = IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_16), &b); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok( b == VARIANT_TRUE, "failed to load XML string\n"); - err = NULL; - hr = IXMLDOMDocument2_validate(dtddoc2, &err); - ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); - ok(err != NULL, "expected pointer\n"); - if (err) - { - res = 0; - hr = IXMLDOMParseError_get_errorCode(err, &res); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - /* XML_ATTRIBUTE_FIXED */ - todo_wine ok(res == 0xC00CE016, "Unexpected code %#lx.\n", res); - IXMLDOMParseError_Release(err); - } - - hr = IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_17), &b); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok( b == VARIANT_TRUE, "failed to load XML string\n"); - err = NULL; - hr = IXMLDOMDocument2_validate(dtddoc2, &err); - ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); - ok(err != NULL, "expected pointer\n"); - if (err) - { - res = 0; - hr = IXMLDOMParseError_get_errorCode(err, &res); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - /* XML_ATTRIBUTE_VALUE */ - todo_wine ok(res == 0xC00CE017, "Unexpected code %#lx.\n", res); - IXMLDOMParseError_Release(err); - } - - hr = IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_18), &b); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok( b == VARIANT_TRUE, "failed to load XML string\n"); - err = NULL; - hr = IXMLDOMDocument2_validate(dtddoc2, &err); - ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); - ok(err != NULL, "expected pointer\n"); - if (err) - { - res = 0; - hr = IXMLDOMParseError_get_errorCode(err, &res); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - /* XML_ILLEGAL_TEXT */ - todo_wine ok(res == 0xC00CE018, "Unexpected code %#lx.\n", res); - IXMLDOMParseError_Release(err); - } - - hr = IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_20), &b); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok( b == VARIANT_TRUE, "failed to load XML string\n"); - err = NULL; - hr = IXMLDOMDocument2_validate(dtddoc2, &err); - todo_wine - ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); - ok(err != NULL, "expected pointer\n"); - if (err) - { - res = 0; - hr = IXMLDOMParseError_get_errorCode(err, &res); - todo_wine - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - /* XML_REQUIRED_ATTRIBUTE_MISSING */ - todo_wine ok(res == 0xC00CE020, "Unexpected code %#lx.\n", res); - IXMLDOMParseError_Release(err); - } - - IXMLDOMDocument2_Release( dtddoc2 ); free_bstrs(); } @@ -17332,6 +17138,156 @@ todo_wine IXMLDOMDocument_Release(doc); } +static void test_dtd_validation(void) +{ + IXMLDOMParseError *err; + IXMLDOMDocument2 *doc; + HRESULT hr; + LONG res; + + doc = create_document(&IID_IXMLDOMDocument2); + + hr = IXMLDOMDocument2_put_validateOnParse(doc, VARIANT_FALSE); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(szEmailXML), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + res = 0x123; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + ok(res == S_OK, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(szEmailXML_0D), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_ELEMENT_UNDECLARED */ + todo_wine ok(res == 0xC00CE00D, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(szEmailXML_0E), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_ELEMENT_ID_NOT_FOUND */ + todo_wine ok(res == 0xC00CE00E, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(szEmailXML_11), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_EMPTY_NOT_ALLOWED */ + todo_wine ok(res == 0xC00CE011, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(szEmailXML_13), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_ROOT_NAME_MISMATCH */ + todo_wine ok(res == 0xC00CE013, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(szEmailXML_14), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_INVALID_CONTENT */ + todo_wine ok(res == 0xC00CE014, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(szEmailXML_15), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_ATTRIBUTE_NOT_DEFINED */ + todo_wine ok(res == 0xC00CE015, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(szEmailXML_16), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + ok(err != NULL, "expected pointer\n"); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_ATTRIBUTE_FIXED */ + todo_wine ok(res == 0xC00CE016, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(szEmailXML_17), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_ATTRIBUTE_VALUE */ + todo_wine ok(res == 0xC00CE017, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(szEmailXML_18), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_ILLEGAL_TEXT */ + todo_wine ok(res == 0xC00CE018, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(szEmailXML_20), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + todo_wine + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_REQUIRED_ATTRIBUTE_MISSING */ + todo_wine ok(res == 0xC00CE020, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + IXMLDOMDocument2_Release(doc); + free_bstrs(); +} + START_TEST(domdoc) { HRESULT hr; @@ -17439,6 +17395,7 @@ START_TEST(domdoc) test_prohibitdtd(); test_indent(); test_interfaces(); + test_dtd_validation(); if (is_clsid_supported(&CLSID_MXNamespaceManager40, &IID_IMXNamespaceManager)) { diff --git a/dlls/msxml6/tests/domdoc.c b/dlls/msxml6/tests/domdoc.c index 8e9a327ddcc..f000e63a2da 100644 --- a/dlls/msxml6/tests/domdoc.c +++ b/dlls/msxml6/tests/domdoc.c @@ -88,6 +88,335 @@ L"<?xml version=\"1.0\"?>" " <attachment id=\"patch1\">0001-msxml3-tests-DTD-validation.patch</attachment>" "</email>"; +static const WCHAR email_xml_0D[] = +L"<?xml version=\"1.0\"?>" +"<!DOCTYPE email ["\ +" <!ELEMENT email (recipients,from,reply-to?,subject,body,attachment*)>"\ +" <!ATTLIST email attachments IDREFS #REQUIRED>"\ +" <!ATTLIST email sent (yes|no) \"no\">"\ +" <!ELEMENT recipients (to+,cc*)>"\ +" <!ELEMENT to (#PCDATA)>"\ +" <!ATTLIST to name CDATA #IMPLIED>"\ +" <!ELEMENT cc (#PCDATA)>"\ +" <!ATTLIST cc name CDATA #IMPLIED>"\ +" <!ELEMENT from (#PCDATA)>"\ +" <!ATTLIST from name CDATA #IMPLIED>"\ +" <!ELEMENT reply-to (#PCDATA)>"\ +" <!ATTLIST reply-to name CDATA #IMPLIED>"\ +" <!ELEMENT subject ANY>"\ +" <!ELEMENT body ANY>"\ +" <!ATTLIST body enc CDATA #FIXED \"UTF-8\">"\ +" <!ELEMENT attachment (#PCDATA)>"\ +" <!ATTLIST attachment id ID #REQUIRED>"\ +"]>" +"<email attachments=\"patch1\">" +" <recipients>" +" <to>wine-patches@winehq.org</to>" +" </recipients>" +" <from name=\"Anonymous\">user@localhost</from>" +" <subject>msxml3/tests: DTD validation (try 88)</subject>" +" <body>" +" <undecl />" +" XML_ELEMENT_UNDECLARED 0xC00CE00D" +" </body>" +" <attachment id=\"patch1\">0001-msxml3-tests-DTD-validation.patch</attachment>" +"</email>"; + +static const WCHAR email_xml_0E[] = +L"<?xml version=\"1.0\"?>" +"<!DOCTYPE email ["\ +" <!ELEMENT email (recipients,from,reply-to?,subject,body,attachment*)>"\ +" <!ATTLIST email attachments IDREFS #REQUIRED>"\ +" <!ATTLIST email sent (yes|no) \"no\">"\ +" <!ELEMENT recipients (to+,cc*)>"\ +" <!ELEMENT to (#PCDATA)>"\ +" <!ATTLIST to name CDATA #IMPLIED>"\ +" <!ELEMENT cc (#PCDATA)>"\ +" <!ATTLIST cc name CDATA #IMPLIED>"\ +" <!ELEMENT from (#PCDATA)>"\ +" <!ATTLIST from name CDATA #IMPLIED>"\ +" <!ELEMENT reply-to (#PCDATA)>"\ +" <!ATTLIST reply-to name CDATA #IMPLIED>"\ +" <!ELEMENT subject ANY>"\ +" <!ELEMENT body ANY>"\ +" <!ATTLIST body enc CDATA #FIXED \"UTF-8\">"\ +" <!ELEMENT attachment (#PCDATA)>"\ +" <!ATTLIST attachment id ID #REQUIRED>"\ +"]>" +"<email attachments=\"patch1\">" +" <recipients>" +" <to>wine-patches@winehq.org</to>" +" </recipients>" +" <from name=\"Anonymous\">user@localhost</from>" +" <subject>msxml3/tests: DTD validation (try 89)</subject>" +" <body>" +" XML_ELEMENT_ID_NOT_FOUND 0xC00CE00E" +" </body>" +" <attachment id=\"patch\">0001-msxml3-tests-DTD-validation.patch</attachment>" +"</email>"; + +static const WCHAR email_xml_11[] = +L"<?xml version=\"1.0\"?>" +"<!DOCTYPE email ["\ +" <!ELEMENT email (recipients,from,reply-to?,subject,body,attachment*)>"\ +" <!ATTLIST email attachments IDREFS #REQUIRED>"\ +" <!ATTLIST email sent (yes|no) \"no\">"\ +" <!ELEMENT recipients (to+,cc*)>"\ +" <!ELEMENT to (#PCDATA)>"\ +" <!ATTLIST to name CDATA #IMPLIED>"\ +" <!ELEMENT cc (#PCDATA)>"\ +" <!ATTLIST cc name CDATA #IMPLIED>"\ +" <!ELEMENT from (#PCDATA)>"\ +" <!ATTLIST from name CDATA #IMPLIED>"\ +" <!ELEMENT reply-to (#PCDATA)>"\ +" <!ATTLIST reply-to name CDATA #IMPLIED>"\ +" <!ELEMENT subject ANY>"\ +" <!ELEMENT body ANY>"\ +" <!ATTLIST body enc CDATA #FIXED \"UTF-8\">"\ +" <!ELEMENT attachment (#PCDATA)>"\ +" <!ATTLIST attachment id ID #REQUIRED>"\ +"]>" +"<email attachments=\"patch1\">" +" <recipients>" +" </recipients>" +" <from name=\"Anonymous\">user@localhost</from>" +" <subject>msxml3/tests: DTD validation (try 90)</subject>" +" <body>" +" XML_EMPTY_NOT_ALLOWED 0xC00CE011" +" </body>" +" <attachment id=\"patch1\">0001-msxml3-tests-DTD-validation.patch</attachment>" +"</email>"; + +static const WCHAR email_xml_13[] = +L"<?xml version=\"1.0\"?>" +"<!DOCTYPE email ["\ +" <!ELEMENT email (recipients,from,reply-to?,subject,body,attachment*)>"\ +" <!ATTLIST email attachments IDREFS #REQUIRED>"\ +" <!ATTLIST email sent (yes|no) \"no\">"\ +" <!ELEMENT recipients (to+,cc*)>"\ +" <!ELEMENT to (#PCDATA)>"\ +" <!ATTLIST to name CDATA #IMPLIED>"\ +" <!ELEMENT cc (#PCDATA)>"\ +" <!ATTLIST cc name CDATA #IMPLIED>"\ +" <!ELEMENT from (#PCDATA)>"\ +" <!ATTLIST from name CDATA #IMPLIED>"\ +" <!ELEMENT reply-to (#PCDATA)>"\ +" <!ATTLIST reply-to name CDATA #IMPLIED>"\ +" <!ELEMENT subject ANY>"\ +" <!ELEMENT body ANY>"\ +" <!ATTLIST body enc CDATA #FIXED \"UTF-8\">"\ +" <!ELEMENT attachment (#PCDATA)>"\ +" <!ATTLIST attachment id ID #REQUIRED>"\ +"]>" +"<msg attachments=\"patch1\">" +" <recipients>" +" <to>wine-patches@winehq.org</to>" +" </recipients>" +" <from name=\"Anonymous\">user@localhost</from>" +" <subject>msxml3/tests: DTD validation (try 91)</subject>" +" <body>" +" XML_ROOT_NAME_MISMATCH 0xC00CE013" +" </body>" +" <attachment id=\"patch1\">0001-msxml3-tests-DTD-validation.patch</attachment>" +"</msg>"; + +static const WCHAR email_xml_14[] = +L"<?xml version=\"1.0\"?>" +"<!DOCTYPE email ["\ +" <!ELEMENT email (recipients,from,reply-to?,subject,body,attachment*)>"\ +" <!ATTLIST email attachments IDREFS #REQUIRED>"\ +" <!ATTLIST email sent (yes|no) \"no\">"\ +" <!ELEMENT recipients (to+,cc*)>"\ +" <!ELEMENT to (#PCDATA)>"\ +" <!ATTLIST to name CDATA #IMPLIED>"\ +" <!ELEMENT cc (#PCDATA)>"\ +" <!ATTLIST cc name CDATA #IMPLIED>"\ +" <!ELEMENT from (#PCDATA)>"\ +" <!ATTLIST from name CDATA #IMPLIED>"\ +" <!ELEMENT reply-to (#PCDATA)>"\ +" <!ATTLIST reply-to name CDATA #IMPLIED>"\ +" <!ELEMENT subject ANY>"\ +" <!ELEMENT body ANY>"\ +" <!ATTLIST body enc CDATA #FIXED \"UTF-8\">"\ +" <!ELEMENT attachment (#PCDATA)>"\ +" <!ATTLIST attachment id ID #REQUIRED>"\ +"]>" +"<email attachments=\"patch1\">" +" <to>wine-patches@winehq.org</to>" +" <from name=\"Anonymous\">user@localhost</from>" +" <subject>msxml3/tests: DTD validation (try 92)</subject>" +" <body>" +" XML_INVALID_CONTENT 0xC00CE014" +" </body>" +" <attachment id=\"patch1\">0001-msxml3-tests-DTD-validation.patch</attachment>" +"</email>"; + +static const WCHAR email_xml_15[] = +L"<?xml version=\"1.0\"?>" +"<!DOCTYPE email ["\ +" <!ELEMENT email (recipients,from,reply-to?,subject,body,attachment*)>"\ +" <!ATTLIST email attachments IDREFS #REQUIRED>"\ +" <!ATTLIST email sent (yes|no) \"no\">"\ +" <!ELEMENT recipients (to+,cc*)>"\ +" <!ELEMENT to (#PCDATA)>"\ +" <!ATTLIST to name CDATA #IMPLIED>"\ +" <!ELEMENT cc (#PCDATA)>"\ +" <!ATTLIST cc name CDATA #IMPLIED>"\ +" <!ELEMENT from (#PCDATA)>"\ +" <!ATTLIST from name CDATA #IMPLIED>"\ +" <!ELEMENT reply-to (#PCDATA)>"\ +" <!ATTLIST reply-to name CDATA #IMPLIED>"\ +" <!ELEMENT subject ANY>"\ +" <!ELEMENT body ANY>"\ +" <!ATTLIST body enc CDATA #FIXED \"UTF-8\">"\ +" <!ELEMENT attachment (#PCDATA)>"\ +" <!ATTLIST attachment id ID #REQUIRED>"\ +"]>" +"<email attachments=\"patch1\" ip=\"127.0.0.1\">" +" <recipients>" +" <to>wine-patches@winehq.org</to>" +" </recipients>" +" <from name=\"Anonymous\">user@localhost</from>" +" <subject>msxml3/tests: DTD validation (try 93)</subject>" +" <body>" +" XML_ATTRIBUTE_NOT_DEFINED 0xC00CE015" +" </body>" +" <attachment id=\"patch1\">0001-msxml3-tests-DTD-validation.patch</attachment>" +"</email>"; + +static const WCHAR email_xml_16[] = +L"<?xml version=\"1.0\"?>" +"<!DOCTYPE email ["\ +" <!ELEMENT email (recipients,from,reply-to?,subject,body,attachment*)>"\ +" <!ATTLIST email attachments IDREFS #REQUIRED>"\ +" <!ATTLIST email sent (yes|no) \"no\">"\ +" <!ELEMENT recipients (to+,cc*)>"\ +" <!ELEMENT to (#PCDATA)>"\ +" <!ATTLIST to name CDATA #IMPLIED>"\ +" <!ELEMENT cc (#PCDATA)>"\ +" <!ATTLIST cc name CDATA #IMPLIED>"\ +" <!ELEMENT from (#PCDATA)>"\ +" <!ATTLIST from name CDATA #IMPLIED>"\ +" <!ELEMENT reply-to (#PCDATA)>"\ +" <!ATTLIST reply-to name CDATA #IMPLIED>"\ +" <!ELEMENT subject ANY>"\ +" <!ELEMENT body ANY>"\ +" <!ATTLIST body enc CDATA #FIXED \"UTF-8\">"\ +" <!ELEMENT attachment (#PCDATA)>"\ +" <!ATTLIST attachment id ID #REQUIRED>"\ +"]>" +"<email attachments=\"patch1\">" +" <recipients>" +" <to>wine-patches@winehq.org</to>" +" </recipients>" +" <from name=\"Anonymous\">user@localhost</from>" +" <subject>msxml3/tests: DTD validation (try 94)</subject>" +" <body enc=\"ASCII\">" +" XML_ATTRIBUTE_FIXED 0xC00CE016" +" </body>" +" <attachment id=\"patch1\">0001-msxml3-tests-DTD-validation.patch</attachment>" +"</email>"; + +static const WCHAR email_xml_17[] = +L"<?xml version=\"1.0\"?>" +"<!DOCTYPE email ["\ +" <!ELEMENT email (recipients,from,reply-to?,subject,body,attachment*)>"\ +" <!ATTLIST email attachments IDREFS #REQUIRED>"\ +" <!ATTLIST email sent (yes|no) \"no\">"\ +" <!ELEMENT recipients (to+,cc*)>"\ +" <!ELEMENT to (#PCDATA)>"\ +" <!ATTLIST to name CDATA #IMPLIED>"\ +" <!ELEMENT cc (#PCDATA)>"\ +" <!ATTLIST cc name CDATA #IMPLIED>"\ +" <!ELEMENT from (#PCDATA)>"\ +" <!ATTLIST from name CDATA #IMPLIED>"\ +" <!ELEMENT reply-to (#PCDATA)>"\ +" <!ATTLIST reply-to name CDATA #IMPLIED>"\ +" <!ELEMENT subject ANY>"\ +" <!ELEMENT body ANY>"\ +" <!ATTLIST body enc CDATA #FIXED \"UTF-8\">"\ +" <!ELEMENT attachment (#PCDATA)>"\ +" <!ATTLIST attachment id ID #REQUIRED>"\ +"]>" +"<email attachments=\"patch1\" sent=\"true\">" +" <recipients>" +" <to>wine-patches@winehq.org</to>" +" </recipients>" +" <from name=\"Anonymous\">user@localhost</from>" +" <subject>msxml3/tests: DTD validation (try 95)</subject>" +" <body>" +" XML_ATTRIBUTE_VALUE 0xC00CE017" +" </body>" +" <attachment id=\"patch1\">0001-msxml3-tests-DTD-validation.patch</attachment>" +"</email>"; + +static const WCHAR email_xml_18[] = +L"<?xml version=\"1.0\"?>" +"<!DOCTYPE email ["\ +" <!ELEMENT email (recipients,from,reply-to?,subject,body,attachment*)>"\ +" <!ATTLIST email attachments IDREFS #REQUIRED>"\ +" <!ATTLIST email sent (yes|no) \"no\">"\ +" <!ELEMENT recipients (to+,cc*)>"\ +" <!ELEMENT to (#PCDATA)>"\ +" <!ATTLIST to name CDATA #IMPLIED>"\ +" <!ELEMENT cc (#PCDATA)>"\ +" <!ATTLIST cc name CDATA #IMPLIED>"\ +" <!ELEMENT from (#PCDATA)>"\ +" <!ATTLIST from name CDATA #IMPLIED>"\ +" <!ELEMENT reply-to (#PCDATA)>"\ +" <!ATTLIST reply-to name CDATA #IMPLIED>"\ +" <!ELEMENT subject ANY>"\ +" <!ELEMENT body ANY>"\ +" <!ATTLIST body enc CDATA #FIXED \"UTF-8\">"\ +" <!ELEMENT attachment (#PCDATA)>"\ +" <!ATTLIST attachment id ID #REQUIRED>"\ +"]>" +"<email attachments=\"patch1\">" +" oops" +" <recipients>" +" <to>wine-patches@winehq.org</to>" +" </recipients>" +" <from name=\"Anonymous\">user@localhost</from>" +" <subject>msxml3/tests: DTD validation (try 96)</subject>" +" <body>" +" XML_ILLEGAL_TEXT 0xC00CE018" +" </body>" +" <attachment id=\"patch1\">0001-msxml3-tests-DTD-validation.patch</attachment>" +"</email>"; + +static const WCHAR email_xml_20[] = +L"<?xml version=\"1.0\"?>" +"<!DOCTYPE email ["\ +" <!ELEMENT email (recipients,from,reply-to?,subject,body,attachment*)>"\ +" <!ATTLIST email attachments IDREFS #REQUIRED>"\ +" <!ATTLIST email sent (yes|no) \"no\">"\ +" <!ELEMENT recipients (to+,cc*)>"\ +" <!ELEMENT to (#PCDATA)>"\ +" <!ATTLIST to name CDATA #IMPLIED>"\ +" <!ELEMENT cc (#PCDATA)>"\ +" <!ATTLIST cc name CDATA #IMPLIED>"\ +" <!ELEMENT from (#PCDATA)>"\ +" <!ATTLIST from name CDATA #IMPLIED>"\ +" <!ELEMENT reply-to (#PCDATA)>"\ +" <!ATTLIST reply-to name CDATA #IMPLIED>"\ +" <!ELEMENT subject ANY>"\ +" <!ELEMENT body ANY>"\ +" <!ATTLIST body enc CDATA #FIXED \"UTF-8\">"\ +" <!ELEMENT attachment (#PCDATA)>"\ +" <!ATTLIST attachment id ID #REQUIRED>"\ +"]>" +"<email>" +" <recipients>" +" <to>wine-patches@winehq.org</to>" +" </recipients>" +" <from name=\"Anonymous\">user@localhost</from>" +" <subject>msxml3/tests: DTD validation (try 97)</subject>" +" <body>" +" XML_REQUIRED_ATTRIBUTE_MISSING 0xC00CE020" +" </body>" +" <attachment id=\"patch1\">0001-msxml3-tests-DTD-validation.patch</attachment>" +"</email>"; + static BSTR alloced_bstrs[256]; static int alloced_bstrs_count; @@ -647,6 +976,164 @@ todo_wine IXMLDOMDocument_Release(doc); } +static void test_dtd_validation(void) +{ + IXMLDOMParseError *err; + IXMLDOMDocument2 *doc; + HRESULT hr; + VARIANT v; + LONG res; + + hr = CoCreateInstance(&CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER, + &IID_IXMLDOMDocument2, (void **)&doc); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + V_VT(&v) = VT_I2; + V_I2(&v) = 0; + hr = IXMLDOMDocument2_setProperty(doc, _bstr_(L"ProhibitDTD"), v); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMDocument2_put_validateOnParse(doc, VARIANT_FALSE); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(email_xml), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + res = 0x123; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + ok(res == S_OK, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(email_xml_0D), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_ELEMENT_UNDECLARED */ + todo_wine ok(res == 0xC00CE00D, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(email_xml_0E), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_ELEMENT_ID_NOT_FOUND */ + todo_wine ok(res == 0xC00CE00E, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(email_xml_11), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_EMPTY_NOT_ALLOWED */ + todo_wine ok(res == 0xC00CE011, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(email_xml_13), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_ROOT_NAME_MISMATCH */ + todo_wine ok(res == 0xC00CE013, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(email_xml_14), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_INVALID_CONTENT */ + todo_wine ok(res == 0xC00CE014, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(email_xml_15), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_ATTRIBUTE_NOT_DEFINED */ + todo_wine ok(res == 0xC00CE015, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(email_xml_16), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + ok(err != NULL, "expected pointer\n"); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_ATTRIBUTE_FIXED */ + todo_wine ok(res == 0xC00CE016, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(email_xml_17), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_ATTRIBUTE_VALUE */ + todo_wine ok(res == 0xC00CE017, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(email_xml_18), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_ILLEGAL_TEXT */ + todo_wine ok(res == 0xC00CE018, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(email_xml_20), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + err = NULL; + hr = IXMLDOMDocument2_validate(doc, &err); + todo_wine + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + res = 0; + hr = IXMLDOMParseError_get_errorCode(err, &res); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* XML_REQUIRED_ATTRIBUTE_MISSING */ + todo_wine ok(res == 0xC00CE020, "Unexpected code %#lx.\n", res); + IXMLDOMParseError_Release(err); + + IXMLDOMDocument2_Release(doc); + free_bstrs(); +} + START_TEST(domdoc) { HRESULT hr; @@ -671,6 +1158,7 @@ START_TEST(domdoc) test_normalize_attribute_values(); test_prohibitdtd(); test_interfaces(); + test_dtd_validation(); CoUninitialize(); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10727
From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- 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 cec2439a21b..4190ed81742 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -17288,6 +17288,87 @@ static void test_dtd_validation(void) free_bstrs(); } +static void test_doctype(void) +{ + IXMLDOMDocumentType *doctype; + IXMLDOMNamedNodeMap *map; + DOMNodeType node_type; + IXMLDOMDocument *doc; + IXMLDOMNode *node; + VARIANT_BOOL b; + LONG length; + HRESULT hr; + BSTR str; + + doc = create_document(&IID_IXMLDOMDocument); + + hr = IXMLDOMDocument_loadXML(doc, _bstr_(szEmailXML), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMDocument_get_doctype(doc, &doctype); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMDocumentType_get_previousSibling(doctype, &node); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); +if (hr == S_OK) +{ + hr = IXMLDOMNode_get_nodeType(node, &node_type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(node_type == NODE_PROCESSING_INSTRUCTION, "Unexpected type %d.\n", node_type); + hr = IXMLDOMNode_get_nodeName(node, &str); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(!wcscmp(str, L"xml"), "Unexpected name %s.\n", debugstr_w(str)); + SysFreeString(str); + IXMLDOMNode_Release(node); +} + hr = IXMLDOMDocumentType_get_nextSibling(doctype, &node); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); +if (hr == S_OK) +{ + hr = IXMLDOMNode_get_nodeType(node, &node_type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(node_type == NODE_ELEMENT, "Unexpected type %d.\n", node_type); + hr = IXMLDOMNode_get_nodeName(node, &str); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(!wcscmp(str, L"email"), "Unexpected name %s.\n", debugstr_w(str)); + SysFreeString(str); + IXMLDOMNode_Release(node); +} + hr = IXMLDOMDocumentType_get_attributes(doctype, &map); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); +if (hr == S_OK) +{ + hr = IXMLDOMNamedNodeMap_get_length(map, &length); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(length == 1, "Unexpected length %ld.\n", length); + hr = IXMLDOMNamedNodeMap_nextNode(map, &node); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMNode_get_nodeType(node, &node_type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(node_type == NODE_ATTRIBUTE, "Unexpected type %d.\n", node_type); + hr = IXMLDOMNode_get_nodeName(node, &str); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(!wcscmp(str, L"sent"), "Unexpected name %s.\n", debugstr_w(str)); + SysFreeString(str); + IXMLDOMNode_Release(node); + IXMLDOMNamedNodeMap_Release(map); +} + + b = VARIANT_TRUE; + hr = IXMLDOMDocumentType_hasChildNodes(doctype, &b); + todo_wine + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(b == VARIANT_FALSE, "Unexpected value %d\n", b); + + IXMLDOMDocumentType_Release(doctype); + + IXMLDOMDocument_Release(doc); +} + START_TEST(domdoc) { HRESULT hr; @@ -17396,6 +17477,7 @@ START_TEST(domdoc) test_indent(); test_interfaces(); test_dtd_validation(); + test_doctype(); if (is_clsid_supported(&CLSID_MXNamespaceManager40, &IID_IMXNamespaceManager)) { -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10727
From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/doctype.c | 6 ++++-- dlls/msxml3/tests/domdoc.c | 5 +---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/dlls/msxml3/doctype.c b/dlls/msxml3/doctype.c index 3b8cd805aef..7dfce1e48c5 100644 --- a/dlls/msxml3/doctype.c +++ b/dlls/msxml3/doctype.c @@ -208,9 +208,11 @@ static HRESULT WINAPI domdoctype_get_lastChild(IXMLDOMDocumentType *iface, IXMLD static HRESULT WINAPI domdoctype_get_previousSibling(IXMLDOMDocumentType *iface, IXMLDOMNode **node) { - FIXME("%p, %p: stub\n", iface, node); + domdoctype *doctype = impl_from_IXMLDOMDocumentType(iface); - return E_NOTIMPL; + TRACE("%p, %p.\n", iface, node); + + return node_get_previous_sibling(doctype->node, node); } static HRESULT WINAPI domdoctype_get_nextSibling(IXMLDOMDocumentType *iface, IXMLDOMNode **node) diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 4190ed81742..1ee35a76ef7 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -17309,10 +17309,7 @@ static void test_doctype(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); hr = IXMLDOMDocumentType_get_previousSibling(doctype, &node); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); -if (hr == S_OK) -{ hr = IXMLDOMNode_get_nodeType(node, &node_type); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(node_type == NODE_PROCESSING_INSTRUCTION, "Unexpected type %d.\n", node_type); @@ -17321,7 +17318,7 @@ if (hr == S_OK) ok(!wcscmp(str, L"xml"), "Unexpected name %s.\n", debugstr_w(str)); SysFreeString(str); IXMLDOMNode_Release(node); -} + hr = IXMLDOMDocumentType_get_nextSibling(doctype, &node); todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10727
From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/doctype.c | 6 ++++-- dlls/msxml3/tests/domdoc.c | 5 +---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/dlls/msxml3/doctype.c b/dlls/msxml3/doctype.c index 7dfce1e48c5..478e68ca902 100644 --- a/dlls/msxml3/doctype.c +++ b/dlls/msxml3/doctype.c @@ -217,9 +217,11 @@ static HRESULT WINAPI domdoctype_get_previousSibling(IXMLDOMDocumentType *iface, static HRESULT WINAPI domdoctype_get_nextSibling(IXMLDOMDocumentType *iface, IXMLDOMNode **node) { - FIXME("%p, %p: stub\n", iface, node); + domdoctype *doctype = impl_from_IXMLDOMDocumentType(iface); - return E_NOTIMPL; + TRACE("%p, %p.\n", iface, node); + + return node_get_next_sibling(doctype->node, node); } static HRESULT WINAPI domdoctype_get_attributes(IXMLDOMDocumentType *iface, IXMLDOMNamedNodeMap **map) diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 1ee35a76ef7..30de48ea6f9 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -17320,10 +17320,7 @@ static void test_doctype(void) IXMLDOMNode_Release(node); hr = IXMLDOMDocumentType_get_nextSibling(doctype, &node); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); -if (hr == S_OK) -{ hr = IXMLDOMNode_get_nodeType(node, &node_type); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(node_type == NODE_ELEMENT, "Unexpected type %d.\n", node_type); @@ -17332,7 +17329,7 @@ if (hr == S_OK) ok(!wcscmp(str, L"email"), "Unexpected name %s.\n", debugstr_w(str)); SysFreeString(str); IXMLDOMNode_Release(node); -} + hr = IXMLDOMDocumentType_get_attributes(doctype, &map); todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10727
participants (2)
-
Nikolay Sivov -
Nikolay Sivov (@nsivov)