msxml3/tests: Added element attributes tests when SAXXMLReader is used.
This commit is contained in:
parent
685be40c33
commit
df5d3e348a
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue