Module: wine Branch: master Commit: df5d3e348a8036f3f8b536c9ccf4fb4ca964fb39 URL: http://source.winehq.org/git/wine.git/?a=commit;h=df5d3e348a8036f3f8b536c9cc...
Author: Piotr Caban piotr@codeweavers.com Date: Wed Oct 26 13:25:52 2011 +0200
msxml3/tests: Added element attributes tests when SAXXMLReader is used.
---
dlls/msxml3/tests/saxreader.c | 130 ++++++++++++++++++++++++++++++++++++++++- 1 files changed, 129 insertions(+), 1 deletions(-)
diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c index ca9c4aa..973381b 100644 --- a/dlls/msxml3/tests/saxreader.c +++ b/dlls/msxml3/tests/saxreader.c @@ -121,6 +121,11 @@ static const CHAR szTestXML[] = " <Name>Captain Ahab</Name>\n" "</BankAccount>\n";
+static const CHAR szTestAttributes[] = +"<?xml version=\"1.0\" ?>\n" +"<document xmlns:test="prefix_test" xmlns="prefix" test:arg1="arg1" arg2="arg2">\n" +"</document>\n"; + typedef struct _contenthandlercheck { CH id; int line; @@ -202,6 +207,34 @@ static content_handler_test contentHandlerTestCallbackResult6[] = { { CH_ENDTEST } };
+static content_handler_test contentHandlerTestAttributes[] = { + { CH_PUTDOCUMENTLOCATOR, 0, 0, 1, 0 }, + { CH_STARTDOCUMENT, 0, 0, 1, 22 }, + { CH_STARTPREFIXMAPPING, 2, 80, 2, 79, "test", "prefix_test" }, + { CH_STARTPREFIXMAPPING, 2, 80, 2, 79, "", "prefix" }, + { CH_STARTELEMENT, 2, 80, 2, 79, "prefix", "document", "document" }, + { CH_CHARACTERS, 2, 80, 3, 1, "\n" }, + { CH_ENDELEMENT, 3, 3, 3, 11, "prefix", "document", "document" }, + { CH_ENDPREFIXMAPPING, 3, 3, 3, 11, "" }, + { CH_ENDPREFIXMAPPING, 3, 3, 3, 11, "test" }, + { CH_ENDDOCUMENT, 0, 0, 4, 0 }, + { CH_ENDTEST } +}; + +static content_handler_test contentHandlerTestAttributes6[] = { + { CH_PUTDOCUMENTLOCATOR, 0, 0, 1, 0 }, + { CH_STARTDOCUMENT, 0, 0, 1, 22 }, + { CH_STARTPREFIXMAPPING, 2, 80, 2, 79, "test", "prefix_test" }, + { CH_STARTPREFIXMAPPING, 2, 80, 2, 79, "", "prefix" }, + { CH_STARTELEMENT, 2, 80, 2, 79, "prefix", "document", "document" }, + { CH_CHARACTERS, 2, 80, 3, 1, "\n" }, + { CH_ENDELEMENT, 3, 3, 3, 11, "prefix", "document", "document" }, + { CH_ENDPREFIXMAPPING, 3, 3, 3, 11, "test" }, + { CH_ENDPREFIXMAPPING, 3, 3, 3, 11, "" }, + { CH_ENDDOCUMENT, 0, 0, 4, 0 }, + { CH_ENDTEST } +}; + static content_handler_test *expectCall; static ISAXLocator *locator; int msxml_version; @@ -321,7 +354,7 @@ static HRESULT WINAPI contentHandler_startPrefixMapping( const WCHAR *pUri, int nUri) { - if(!test_expect_call(CH_ENDDOCUMENT)) + if(!test_expect_call(CH_STARTPREFIXMAPPING)) return E_FAIL;
test_saxstr(__LINE__, pPrefix, nPrefix, expectCall->arg1); @@ -357,6 +390,9 @@ static HRESULT WINAPI contentHandler_startElement( int nQName, ISAXAttributes *pAttr) { + int len; + HRESULT hres; + if(!test_expect_call(CH_STARTELEMENT)) return E_FAIL;
@@ -366,6 +402,79 @@ static HRESULT WINAPI contentHandler_startElement( test_locator(__LINE__, msxml_version>=6 ? expectCall->line_v6 : expectCall->line, msxml_version>=6 ? expectCall->column_v6 : expectCall->column);
+ if(expectCall == contentHandlerTestAttributes+4) { + int i; + /* msxml3 returns attributes and namespaces in the input order */ + hres = ISAXAttributes_getLength(pAttr, &len); + ok(hres == S_OK, "getLength returned %x\n", hres); + ok(len == 4, "Incorrect number of attributes: %d\n", len); + ok(msxml_version < 6, "wrong msxml_version: %d\n", msxml_version); + + for(i=0; i<len; i++) { + hres = ISAXAttributes_getName(pAttr, i, &pNamespaceUri, &nNamespaceUri, + &pLocalName, &nLocalName, &pQName, &nQName); + ok(hres == S_OK, "getName returned %x\n", hres); + + if(nQName == 4) { + todo_wine ok(i==3, "Incorrect attributes order\n"); + test_saxstr(__LINE__, pNamespaceUri, nNamespaceUri, ""); + test_saxstr(__LINE__, pLocalName, nLocalName, "arg2"); + test_saxstr(__LINE__, pQName, nQName, "arg2"); + } else if(nQName == 5) { + todo_wine ok(i==1, "Incorrect attributes order\n"); + test_saxstr(__LINE__, pNamespaceUri, nNamespaceUri, ""); + test_saxstr(__LINE__, pLocalName, nLocalName, ""); + test_saxstr(__LINE__, pQName, nQName, "xmlns"); + } else if(nQName == 9) { + todo_wine ok(i==2, "Incorrect attributes order\n"); + test_saxstr(__LINE__, pNamespaceUri, nNamespaceUri, "prefix_test"); + test_saxstr(__LINE__, pLocalName, nLocalName, "arg1"); + test_saxstr(__LINE__, pQName, nQName, "test:arg1"); + } else if(nQName == 10) { + todo_wine ok(i==0, "Incorrect attributes order\n"); + test_saxstr(__LINE__, pNamespaceUri, nNamespaceUri, ""); + test_saxstr(__LINE__, pLocalName, nLocalName, ""); + test_saxstr(__LINE__, pQName, nQName, "xmlns:test"); + } else { + ok(0, "Unexpected attribute\n"); + } + } + } else if(expectCall == contentHandlerTestAttributes6+4) { + /* msxml6 returns attributes first and then namespaces */ + hres = ISAXAttributes_getLength(pAttr, &len); + ok(hres == S_OK, "getLength returned %x\n", hres); + ok(len == 4, "Incorrect number of attributes: %d\n", len); + ok(msxml_version >= 6, "wrong msxml_version: %d\n", msxml_version); + + hres = ISAXAttributes_getName(pAttr, 0, &pNamespaceUri, &nNamespaceUri, + &pLocalName, &nLocalName, &pQName, &nQName); + ok(hres == S_OK, "getName returned %x\n", hres); + test_saxstr(__LINE__, pNamespaceUri, nNamespaceUri, "prefix_test"); + test_saxstr(__LINE__, pLocalName, nLocalName, "arg1"); + test_saxstr(__LINE__, pQName, nQName, "test:arg1"); + + hres = ISAXAttributes_getName(pAttr, 1, &pNamespaceUri, &nNamespaceUri, + &pLocalName, &nLocalName, &pQName, &nQName); + ok(hres == S_OK, "getName returned %x\n", hres); + test_saxstr(__LINE__, pNamespaceUri, nNamespaceUri, ""); + test_saxstr(__LINE__, pLocalName, nLocalName, "arg2"); + test_saxstr(__LINE__, pQName, nQName, "arg2"); + + hres = ISAXAttributes_getName(pAttr, 2, &pNamespaceUri, &nNamespaceUri, + &pLocalName, &nLocalName, &pQName, &nQName); + ok(hres == S_OK, "getName returned %x\n", hres); + test_saxstr(__LINE__, pNamespaceUri, nNamespaceUri, "http://www.w3.org/2000/xmlns/"); + test_saxstr(__LINE__, pLocalName, nLocalName, ""); + test_saxstr(__LINE__, pQName, nQName, "xmlns:test"); + + hres = ISAXAttributes_getName(pAttr, 3, &pNamespaceUri, &nNamespaceUri, + &pLocalName, &nLocalName, &pQName, &nQName); + ok(hres == S_OK, "getName returned %x\n", hres); + test_saxstr(__LINE__, pNamespaceUri, nNamespaceUri, "http://www.w3.org/2000/xmlns/"); + test_saxstr(__LINE__, pLocalName, nLocalName, ""); + test_saxstr(__LINE__, pQName, nQName, "xmlns"); + } + return (expectCall++)->ret; }
@@ -1182,6 +1291,25 @@ static void test_saxreader(int version)
IStream_Release(iStream);
+ CreateStreamOnHGlobal(NULL, TRUE, &iStream); + liSize.QuadPart = strlen(szTestAttributes); + IStream_SetSize(iStream, liSize); + IStream_Write(iStream, szTestAttributes, strlen(szTestAttributes), &bytesWritten); + liPos.QuadPart = 0; + IStream_Seek(iStream, liPos, STREAM_SEEK_SET, NULL); + V_VT(&var) = VT_UNKNOWN|VT_DISPATCH; + V_UNKNOWN(&var) = (IUnknown*)iStream; + + if(version >= 6) + expectCall = contentHandlerTestAttributes6; + else + expectCall = contentHandlerTestAttributes; + hr = ISAXXMLReader_parse(reader, var); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + test_expect_call(CH_ENDTEST); + + IStream_Release(iStream); + V_VT(&var) = VT_BSTR; V_BSTR(&var) = SysAllocString(szCarriageRetTest);