From: Nikolay Sivov <nsivov(a)codeweavers.com> --- dlls/msxml3/tests/saxreader.c | 47 ++++++++++++++++++++-------- dlls/msxml6/tests/saxreader.c | 58 +++++++++++++++++++++++++++++++++-- 2 files changed, 89 insertions(+), 16 deletions(-) diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c index 9aa5ecf6782..2ad2b059aa4 100644 --- a/dlls/msxml3/tests/saxreader.c +++ b/dlls/msxml3/tests/saxreader.c @@ -1195,16 +1195,24 @@ static HRESULT WINAPI contentHandler_startElement( ISAXAttributes *saxattr) { struct call_entry call; - IMXAttributes *mxattr; HRESULT hr; int len; ok(uri != NULL, "uri == NULL\n"); ok(localname != NULL, "localname == NULL\n"); ok(qname != NULL, "qname == NULL\n"); - - hr = ISAXAttributes_QueryInterface(saxattr, &IID_IMXAttributes, (void**)&mxattr); - ok(hr == E_NOINTERFACE, "Unexpected hr %#lx.\n", hr); + ok(!!saxattr, "Unexpected pointer.\n"); + + check_interface(saxattr, &IID_IMXAttributes, FALSE); + check_interface(saxattr, &IID_IVBSAXAttributes, FALSE); + check_interface(saxattr, &IID_IVBSAXLocator, FALSE); + check_interface(saxattr, &IID_IDispatch, FALSE); + check_interface(saxattr, &IID_IDispatchEx, FALSE); + check_interface(saxattr, &IID_ISAXAttributes, TRUE); + check_interface(saxattr, &IID_ISAXXMLReader, FALSE); + check_interface(saxattr, &IID_IVBSAXXMLReader, FALSE); + todo_wine + check_interface(saxattr, &IID_ISAXLocator, FALSE); init_call_entry(locator, &call); call.id = CH_STARTELEMENT; @@ -1216,6 +1224,9 @@ static HRESULT WINAPI contentHandler_startElement( test_attr_ptr = saxattr; ok(test_attr_ptr == saxattr, "Multiple ISAXAttributes instances are used (%p %p)\n", test_attr_ptr, saxattr); + hr = ISAXAttributes_getValueFromQName(saxattr, NULL, 0, NULL, NULL); + ok(hr == E_POINTER, "Unexpected hr %#lx.\n", hr); + /* store actual attributes */ len = 0; hr = ISAXAttributes_getLength(saxattr, &len); @@ -2166,6 +2177,13 @@ static void test_saxreader(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); g_reader = reader; + check_interface(reader, &IID_IDispatch, TRUE); + check_interface(reader, &IID_IDispatchEx, TRUE); + check_interface(reader, &IID_ISAXXMLReader, TRUE); + check_interface(reader, &IID_IVBSAXXMLReader, TRUE); + check_interface(reader, &IID_ISAXLocator, FALSE); + check_interface(reader, &IID_IVBSAXLocator, FALSE); + if (IsEqualGUID(table->clsid, &CLSID_SAXXMLReader40)) msxml_version = 4; else @@ -5628,20 +5646,23 @@ static void test_mxattr_dispex(void) static void test_mxattr_qi(void) { + static const GUID *classes[] = { &CLSID_SAXAttributes, &CLSID_SAXAttributes30 }; IMXAttributes *mxattr; HRESULT hr; - hr = CoCreateInstance(&CLSID_SAXAttributes, NULL, CLSCTX_INPROC_SERVER, - &IID_IMXAttributes, (void **)&mxattr); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + for (int i = 0; i < ARRAYSIZE(classes); ++i) + { + hr = CoCreateInstance(classes[i], NULL, CLSCTX_INPROC_SERVER, &IID_IMXAttributes, (void **)&mxattr); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - check_interface(mxattr, &IID_IMXAttributes, TRUE); - check_interface(mxattr, &IID_ISAXAttributes, TRUE); - check_interface(mxattr, &IID_IVBSAXAttributes, TRUE); - check_interface(mxattr, &IID_IDispatch, TRUE); - check_interface(mxattr, &IID_IDispatchEx, TRUE); + check_interface(mxattr, &IID_IMXAttributes, TRUE); + check_interface(mxattr, &IID_ISAXAttributes, TRUE); + check_interface(mxattr, &IID_IVBSAXAttributes, TRUE); + check_interface(mxattr, &IID_IDispatch, TRUE); + check_interface(mxattr, &IID_IDispatchEx, TRUE); - IMXAttributes_Release(mxattr); + IMXAttributes_Release(mxattr); + } } static struct msxmlsupported_data_t saxattr_support_data[] = diff --git a/dlls/msxml6/tests/saxreader.c b/dlls/msxml6/tests/saxreader.c index 52da4ef4460..cdd2be6fe82 100644 --- a/dlls/msxml6/tests/saxreader.c +++ b/dlls/msxml6/tests/saxreader.c @@ -4066,16 +4066,44 @@ static HRESULT WINAPI contentHandler_startElement( ISAXAttributes *saxattr) { struct call_entry call; - IMXAttributes *mxattr; + TYPEATTR *type_attr; + IDispatch *disp; + ITypeInfo *ti; HRESULT hr; int len; ok(uri != NULL, "uri == NULL\n"); ok(localname != NULL, "localname == NULL\n"); ok(qname != NULL, "qname == NULL\n"); + ok(!!saxattr, "Unexpected pointer.\n"); + + check_interface(saxattr, &IID_IMXAttributes, FALSE); + check_interface(saxattr, &IID_IVBSAXAttributes, FALSE); + check_interface(saxattr, &IID_IVBSAXLocator, FALSE); + todo_wine + check_interface(saxattr, &IID_IDispatch, TRUE); + todo_wine + check_interface(saxattr, &IID_IDispatchEx, TRUE); + check_interface(saxattr, &IID_ISAXAttributes, TRUE); + todo_wine + check_interface(saxattr, &IID_ISAXXMLReader, TRUE); + todo_wine + check_interface(saxattr, &IID_IVBSAXXMLReader, TRUE); + check_interface(saxattr, &IID_ISAXLocator, TRUE); + + if (SUCCEEDED(ISAXAttributes_QueryInterface(saxattr, &IID_IDispatch, (void **)&disp))) + { + hr = IDispatch_GetTypeInfo(disp, 0, 0, &ti); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = ISAXAttributes_QueryInterface(saxattr, &IID_IMXAttributes, (void**)&mxattr); - ok(hr == E_NOINTERFACE, "Unexpected hr %#lx.\n", hr); + hr = ITypeInfo_GetTypeAttr(ti, &type_attr); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(IsEqualGUID(&IID_IVBSAXXMLReader, &type_attr->guid), + "Unexpected type %s\n", debugstr_guid(&type_attr->guid)); + ITypeInfo_ReleaseTypeAttr(ti, type_attr); + ITypeInfo_Release(ti); + IDispatch_Release(disp); + } init_call_entry(locator, &call); call.id = CH_STARTELEMENT; @@ -4087,6 +4115,9 @@ static HRESULT WINAPI contentHandler_startElement( test_attr_ptr = saxattr; ok(test_attr_ptr == saxattr, "Multiple ISAXAttributes instances are used (%p %p)\n", test_attr_ptr, saxattr); + hr = ISAXAttributes_getValueFromQName(saxattr, NULL, 0, NULL, NULL); + ok(hr == E_POINTER, "Unexpected hr %#lx.\n", hr); + /* store actual attributes */ len = 0; hr = ISAXAttributes_getLength(saxattr, &len); @@ -4341,6 +4372,7 @@ static void test_saxreader(void) ISAXErrorHandler *lpErrorHandler; SAFEARRAY *sa; SAFEARRAYBOUND SADim[1]; + ISAXLocator *locator; char *ptr = NULL; IStream *stream; ULONG written; @@ -4353,6 +4385,26 @@ static void test_saxreader(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); g_reader = reader; + check_interface(reader, &IID_IDispatch, TRUE); + check_interface(reader, &IID_IDispatchEx, TRUE); + check_interface(reader, &IID_ISAXXMLReader, TRUE); + check_interface(reader, &IID_IVBSAXXMLReader, TRUE); + todo_wine + check_interface(reader, &IID_ISAXLocator, TRUE); + check_interface(reader, &IID_IVBSAXLocator, FALSE); + + if (SUCCEEDED(ISAXXMLReader_QueryInterface(reader, &IID_ISAXLocator, (void **)&locator))) + { + check_interface(locator, &IID_IDispatch, TRUE); + check_interface(locator, &IID_IDispatchEx, TRUE); + check_interface(locator, &IID_ISAXXMLReader, TRUE); + check_interface(locator, &IID_IVBSAXXMLReader, TRUE); + check_interface(locator, &IID_ISAXLocator, TRUE); + check_interface(locator, &IID_IVBSAXLocator, FALSE); + + ISAXLocator_Release(locator); + } + hr = ISAXXMLReader_getContentHandler(reader, &content); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(content == NULL, "Expected %p, got %p\n", NULL, content); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9703