[PATCH 3/4] msxml3/tests: tests for domdoc_validate()

Adam Martinson amartinson at codeweavers.com
Fri Oct 1 13:24:40 CDT 2010


---
 dlls/msxml3/tests/domdoc.c |  377 +++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 376 insertions(+), 1 deletions(-)

diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 64e21ab..ec4e593 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -226,6 +226,191 @@ static const CHAR szBasicTransformXML[] =
 static const CHAR szBasicTransformOutput[] =
 "<HTML><BODY><TABLE><TD>Wine</TD><TD>$25.00</TD></TABLE></BODY></HTML>";
 
+#define SZ_EMAIL_DTD \
+"<!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>"\
+"]>"
+
+static const CHAR szEmailXML[] =
+"<?xml version=\"1.0\"?>"
+SZ_EMAIL_DTD
+"<email attachments=\"patch1\">"
+"   <recipients>"
+"       <to>wine-patches at winehq.org</to>"
+"   </recipients>"
+"   <from name=\"Anonymous\">user at localhost</from>"
+"   <subject>msxml3/tests: DTD validation (try 87)</subject>"
+"   <body>"
+"       It no longer causes spontaneous combustion..."
+"   </body>"
+"   <attachment id=\"patch1\">0001-msxml3-tests-DTD-validation.patch</attachment>"
+"</email>";
+
+static const CHAR szEmailXML_0D[] =
+"<?xml version=\"1.0\"?>"
+SZ_EMAIL_DTD
+"<email attachments=\"patch1\">"
+"   <recipients>"
+"       <to>wine-patches at winehq.org</to>"
+"   </recipients>"
+"   <from name=\"Anonymous\">user at 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 CHAR szEmailXML_0E[] =
+"<?xml version=\"1.0\"?>"
+SZ_EMAIL_DTD
+"<email attachments=\"patch1\">"
+"   <recipients>"
+"       <to>wine-patches at winehq.org</to>"
+"   </recipients>"
+"   <from name=\"Anonymous\">user at 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 CHAR szEmailXML_11[] =
+"<?xml version=\"1.0\"?>"
+SZ_EMAIL_DTD
+"<email attachments=\"patch1\">"
+"   <recipients>"
+"   </recipients>"
+"   <from name=\"Anonymous\">user at 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 CHAR szEmailXML_13[] =
+"<?xml version=\"1.0\"?>"
+SZ_EMAIL_DTD
+"<msg attachments=\"patch1\">"
+"   <recipients>"
+"       <to>wine-patches at winehq.org</to>"
+"   </recipients>"
+"   <from name=\"Anonymous\">user at 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 CHAR szEmailXML_14[] =
+"<?xml version=\"1.0\"?>"
+SZ_EMAIL_DTD
+"<email attachments=\"patch1\">"
+"   <to>wine-patches at winehq.org</to>"
+"   <from name=\"Anonymous\">user at 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 CHAR szEmailXML_15[] =
+"<?xml version=\"1.0\"?>"
+SZ_EMAIL_DTD
+"<email attachments=\"patch1\" ip=\"127.0.0.1\">"
+"   <recipients>"
+"       <to>wine-patches at winehq.org</to>"
+"   </recipients>"
+"   <from name=\"Anonymous\">user at 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 CHAR szEmailXML_16[] =
+"<?xml version=\"1.0\"?>"
+SZ_EMAIL_DTD
+"<email attachments=\"patch1\">"
+"   <recipients>"
+"       <to>wine-patches at winehq.org</to>"
+"   </recipients>"
+"   <from name=\"Anonymous\">user at 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 CHAR szEmailXML_17[] =
+"<?xml version=\"1.0\"?>"
+SZ_EMAIL_DTD
+"<email attachments=\"patch1\" sent=\"true\">"
+"   <recipients>"
+"       <to>wine-patches at winehq.org</to>"
+"   </recipients>"
+"   <from name=\"Anonymous\">user at 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 CHAR szEmailXML_18[] =
+"<?xml version=\"1.0\"?>"
+SZ_EMAIL_DTD
+"<email attachments=\"patch1\">"
+"   oops"
+"   <recipients>"
+"       <to>wine-patches at winehq.org</to>"
+"   </recipients>"
+"   <from name=\"Anonymous\">user at 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 CHAR szEmailXML_20[] =
+"<?xml version=\"1.0\"?>"
+SZ_EMAIL_DTD
+"<email>"
+"   <recipients>"
+"       <to>wine-patches at winehq.org</to>"
+"   </recipients>"
+"   <from name=\"Anonymous\">user at 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 const WCHAR szNonExistentFile[] = {
     'c', ':', '\\', 'N', 'o', 'n', 'e', 'x', 'i', 's', 't', 'e', 'n', 't', '.', 'x', 'm', 'l', 0
 };
@@ -2993,8 +3178,9 @@ static void test_XMLHTTP(void)
 static void test_IXMLDOMDocument2(void)
 {
     static const WCHAR emptyW[] = {0};
-    IXMLDOMDocument2 *doc2;
+    IXMLDOMDocument2 *doc2, *dtddoc2;
     IXMLDOMDocument *doc;
+    IXMLDOMParseError* err;
     IDispatchEx *dispex;
     VARIANT_BOOL b;
     VARIANT var;
@@ -3005,6 +3191,13 @@ static void test_IXMLDOMDocument2(void)
     doc = create_document(&IID_IXMLDOMDocument);
     if (!doc) return;
 
+    dtddoc2 = create_document(&IID_IXMLDOMDocument2);
+    if (!dtddoc2)
+    {
+        IXMLDOMDocument_Release(doc);
+        return;
+    }
+
     r = IXMLDOMDocument_QueryInterface( doc, &IID_IXMLDOMDocument2, (void**)&doc2 );
     ok( r == S_OK, "ret %08x\n", r );
     ok( doc == (IXMLDOMDocument*)doc2, "interfaces differ\n");
@@ -3013,6 +3206,19 @@ static void test_IXMLDOMDocument2(void)
     ole_check(IXMLDOMDocument2_get_readyState(doc2, &res));
     ok(res == READYSTATE_COMPLETE, "expected READYSTATE_COMPLETE (4), got %i\n", res);
 
+    err = NULL;
+    todo_wine ole_expect(IXMLDOMDocument2_validate(doc2, NULL), S_FALSE);
+    todo_wine ole_expect(IXMLDOMDocument2_validate(doc2, &err), S_FALSE);
+    todo_wine ok(err != NULL, "expected a pointer\n");
+    if (err)
+    {
+        res = 0;
+        todo_wine ole_check(IXMLDOMParseError_get_errorCode(err, &res));
+        /* XML_E_NOTWF */
+        todo_wine ok(res == 0xC00CE223, "got %08x\n", res);
+        IXMLDOMParseError_Release(err);
+    }
+
     str = SysAllocString( szComplete4 );
     r = IXMLDOMDocument_loadXML( doc2, str, &b );
     ok( r == S_OK, "loadXML failed\n");
@@ -3022,6 +3228,18 @@ static void test_IXMLDOMDocument2(void)
     ole_check(IXMLDOMDocument2_get_readyState(doc, &res));
     ok(res == READYSTATE_COMPLETE, "expected READYSTATE_COMPLETE (4), got %i\n", res);
 
+    err = NULL;
+    todo_wine ole_expect(IXMLDOMDocument2_validate(doc2, &err), S_FALSE);
+    todo_wine ok(err != NULL, "expected a pointer\n");
+    if (err)
+    {
+        res = 0;
+        todo_wine ole_check(IXMLDOMParseError_get_errorCode(err, &res));
+        /* XML_E_NODTD */
+        todo_wine ok(res == 0xC00CE224, "got %08x\n", res);
+        IXMLDOMParseError_Release(err);
+    }
+
     r = IXMLDOMDocument_QueryInterface( doc, &IID_IDispatchEx, (void**)&dispex );
     ok( r == S_OK, "ret %08x\n", r );
     if(r == S_OK)
@@ -3075,6 +3293,163 @@ static void test_IXMLDOMDocument2(void)
 
     IXMLDOMDocument2_Release( doc2 );
     IXMLDOMDocument_Release( doc );
+
+    /* DTD validation */
+    ole_check(IXMLDOMDocument2_put_validateOnParse(dtddoc2, VARIANT_FALSE));
+    ole_check(IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML), &b));
+    ok( b == VARIANT_TRUE, "failed to load XML string\n");
+    err = NULL;
+    todo_wine ole_check(IXMLDOMDocument2_validate(dtddoc2, &err));
+    todo_wine ok(err != NULL, "expected pointer\n");
+    if (err)
+    {
+        res = 0;
+        todo_wine ole_expect(IXMLDOMParseError_get_errorCode(err, &res), S_FALSE);
+        todo_wine ok(res == 0, "got %08x\n", res);
+        IXMLDOMParseError_Release(err);
+    }
+
+    ole_check(IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_0D), &b));
+    ok( b == VARIANT_TRUE, "failed to load XML string\n");
+    err = NULL;
+    todo_wine ole_expect(IXMLDOMDocument2_validate(dtddoc2, &err), S_FALSE);
+    todo_wine ok(err != NULL, "expected pointer\n");
+    if (err)
+    {
+        res = 0;
+        todo_wine ole_check(IXMLDOMParseError_get_errorCode(err, &res));
+        /* XML_ELEMENT_UNDECLARED */
+        todo_wine ok(res == 0xC00CE00D, "got %08x\n", res);
+        IXMLDOMParseError_Release(err);
+    }
+
+    ole_check(IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_0E), &b));
+    ok( b == VARIANT_TRUE, "failed to load XML string\n");
+    err = NULL;
+    todo_wine ole_expect(IXMLDOMDocument2_validate(dtddoc2, &err), S_FALSE);
+    todo_wine ok(err != NULL, "expected pointer\n");
+    if (err)
+    {
+        res = 0;
+        todo_wine ole_check(IXMLDOMParseError_get_errorCode(err, &res));
+        /* XML_ELEMENT_ID_NOT_FOUND */
+        todo_wine ok(res == 0xC00CE00E, "got %08x\n", res);
+        IXMLDOMParseError_Release(err);
+    }
+
+    ole_check(IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_11), &b));
+    ok( b == VARIANT_TRUE, "failed to load XML string\n");
+    err = NULL;
+    todo_wine ole_expect(IXMLDOMDocument2_validate(dtddoc2, &err), S_FALSE);
+    todo_wine ok(err != NULL, "expected pointer\n");
+    if (err)
+    {
+        res = 0;
+        todo_wine ole_check(IXMLDOMParseError_get_errorCode(err, &res));
+        /* XML_EMPTY_NOT_ALLOWED */
+        todo_wine ok(res == 0xC00CE011, "got %08x\n", res);
+        IXMLDOMParseError_Release(err);
+    }
+
+    ole_check(IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_13), &b));
+    ok( b == VARIANT_TRUE, "failed to load XML string\n");
+    err = NULL;
+    todo_wine ole_expect(IXMLDOMDocument2_validate(dtddoc2, &err), S_FALSE);
+    todo_wine ok(err != NULL, "expected pointer\n");
+    if (err)
+    {
+        res = 0;
+        todo_wine ole_check(IXMLDOMParseError_get_errorCode(err, &res));
+        /* XML_ROOT_NAME_MISMATCH */
+        todo_wine ok(res == 0xC00CE013, "got %08x\n", res);
+        IXMLDOMParseError_Release(err);
+    }
+
+    ole_check(IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_14), &b));
+    ok( b == VARIANT_TRUE, "failed to load XML string\n");
+    err = NULL;
+    todo_wine ole_expect(IXMLDOMDocument2_validate(dtddoc2, &err), S_FALSE);
+    todo_wine ok(err != NULL, "expected pointer\n");
+    if (err)
+    {
+        res = 0;
+        todo_wine ole_check(IXMLDOMParseError_get_errorCode(err, &res));
+        /* XML_INVALID_CONTENT */
+        todo_wine ok(res == 0xC00CE014, "got %08x\n", res);
+        IXMLDOMParseError_Release(err);
+    }
+
+    ole_check(IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_15), &b));
+    ok( b == VARIANT_TRUE, "failed to load XML string\n");
+    err = NULL;
+    todo_wine ole_expect(IXMLDOMDocument2_validate(dtddoc2, &err), S_FALSE);
+    todo_wine ok(err != NULL, "expected pointer\n");
+    if (err)
+    {
+        res = 0;
+        todo_wine ole_check(IXMLDOMParseError_get_errorCode(err, &res));
+        /* XML_ATTRIBUTE_NOT_DEFINED */
+        todo_wine ok(res == 0xC00CE015, "got %08x\n", res);
+        IXMLDOMParseError_Release(err);
+    }
+
+    ole_check(IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_16), &b));
+    ok( b == VARIANT_TRUE, "failed to load XML string\n");
+    err = NULL;
+    todo_wine ole_expect(IXMLDOMDocument2_validate(dtddoc2, &err), S_FALSE);
+    todo_wine ok(err != NULL, "expected pointer\n");
+    if (err)
+    {
+        res = 0;
+        todo_wine ole_check(IXMLDOMParseError_get_errorCode(err, &res));
+        /* XML_ATTRIBUTE_FIXED */
+        todo_wine ok(res == 0xC00CE016, "got %08x\n", res);
+        IXMLDOMParseError_Release(err);
+    }
+
+    ole_check(IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_17), &b));
+    ok( b == VARIANT_TRUE, "failed to load XML string\n");
+    err = NULL;
+    todo_wine ole_expect(IXMLDOMDocument2_validate(dtddoc2, &err), S_FALSE);
+    todo_wine ok(err != NULL, "expected pointer\n");
+    if (err)
+    {
+        res = 0;
+        todo_wine ole_check(IXMLDOMParseError_get_errorCode(err, &res));
+        /* XML_ATTRIBUTE_VALUE */
+        todo_wine ok(res == 0xC00CE017, "got %08x\n", res);
+        IXMLDOMParseError_Release(err);
+    }
+
+    ole_check(IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_18), &b));
+    ok( b == VARIANT_TRUE, "failed to load XML string\n");
+    err = NULL;
+    todo_wine ole_expect(IXMLDOMDocument2_validate(dtddoc2, &err), S_FALSE);
+    todo_wine ok(err != NULL, "expected pointer\n");
+    if (err)
+    {
+        res = 0;
+        todo_wine ole_check(IXMLDOMParseError_get_errorCode(err, &res));
+        /* XML_ILLEGAL_TEXT */
+        todo_wine ok(res == 0xC00CE018, "got %08x\n", res);
+        IXMLDOMParseError_Release(err);
+    }
+
+    ole_check(IXMLDOMDocument2_loadXML(dtddoc2, _bstr_(szEmailXML_20), &b));
+    ok( b == VARIANT_TRUE, "failed to load XML string\n");
+    err = NULL;
+    todo_wine ole_expect(IXMLDOMDocument2_validate(dtddoc2, &err), S_FALSE);
+    todo_wine ok(err != NULL, "expected pointer\n");
+    if (err)
+    {
+        res = 0;
+        todo_wine ole_check(IXMLDOMParseError_get_errorCode(err, &res));
+        /* XML_REQUIRED_ATTRIBUTE_MISSING */
+        todo_wine ok(res == 0xC00CE020, "got %08x\n", res);
+        IXMLDOMParseError_Release(err);
+    }
+
+    IXMLDOMDocument2_Release( dtddoc2 );
     free_bstrs();
 }
 
-- 
1.7.2.3


--------------040002080907030105070305--



More information about the wine-patches mailing list