Nikolay Sivov : msxml3/tests: Add some supported interfaces checks.

Alexandre Julliard julliard at winehq.org
Mon Aug 16 18:07:24 CDT 2021


Module: wine
Branch: master
Commit: 37bba6e6479f53cc981732bb25b30438aaa6d1c8
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=37bba6e6479f53cc981732bb25b30438aaa6d1c8

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Mon Aug 16 11:52:18 2021 +0300

msxml3/tests: Add some supported interfaces checks.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msxml3/tests/domdoc.c    | 44 +++++++++++++++++++++++++++---------
 dlls/msxml3/tests/httpreq.c   | 19 ++++++++++++++++
 dlls/msxml3/tests/saxreader.c | 52 +++++++++++++++++++++----------------------
 dlls/msxml3/tests/schema.c    | 22 +++++++++++++++++-
 4 files changed, 99 insertions(+), 38 deletions(-)

diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index a7890d56f71..d2a4d867bae 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -54,6 +54,21 @@
 DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
 DEFINE_GUID(IID_transformdest_unknown,0xf5078f3a,0xc551,0x11d3,0x89,0xb9,0x00,0x00,0xf8,0x1f,0xe2,0x21);
 
+#define check_interface(a, b, c) check_interface_(__LINE__, a, b, c)
+static void check_interface_(unsigned int line, void *iface_ptr, REFIID iid, BOOL supported)
+{
+    IUnknown *iface = iface_ptr;
+    HRESULT hr, expected_hr;
+    IUnknown *unk;
+
+    expected_hr = supported ? S_OK : E_NOINTERFACE;
+
+    hr = IUnknown_QueryInterface(iface, iid, (void **)&unk);
+    ok_(__FILE__, line)(hr == expected_hr, "Got hr %#x, expected %#x.\n", hr, expected_hr);
+    if (SUCCEEDED(hr))
+        IUnknown_Release(unk);
+}
+
 static int g_unexpectedcall, g_expectedcall;
 
 struct msxmlsupported_data_t
@@ -1480,6 +1495,14 @@ static void test_domdoc( void )
     doc = create_document(&IID_IXMLDOMDocument);
     if (!doc) return;
 
+    check_interface(doc, &IID_IXMLDOMDocument, TRUE);
+    check_interface(doc, &IID_IPersistStreamInit, TRUE);
+    check_interface(doc, &IID_IObjectWithSite, TRUE);
+    check_interface(doc, &IID_IObjectSafety, TRUE);
+    check_interface(doc, &IID_IConnectionPointContainer, TRUE);
+    check_interface(doc, &IID_IDispatch, TRUE);
+    check_interface(doc, &IID_IDispatchEx, TRUE);
+
 if (0)
 {
     /* crashes on native */
@@ -2110,7 +2133,6 @@ static void test_persiststream(void)
     IPersistStream *stream;
     IXMLDOMDocument *doc;
     ULARGE_INTEGER size;
-    IPersist *persist;
     IStream *istream;
     HRESULT hr;
     CLSID clsid;
@@ -2130,11 +2152,8 @@ static void test_persiststream(void)
     ok(hr == S_OK, "got 0x%08x\n", hr);
     ok((IUnknown *)stream == (IUnknown *)streaminit, "got %p, %p\n", stream, streaminit);
 
-    hr = IPersistStream_QueryInterface(stream, &IID_IPersist, (void **)&persist);
-    ok(hr == E_NOINTERFACE, "got 0x%08x\n", hr);
-
-    hr = IXMLDOMDocument_QueryInterface(doc, &IID_IPersist, (void **)&persist);
-    ok(hr == E_NOINTERFACE, "got 0x%08x\n", hr);
+    check_interface(stream, &IID_IPersist, FALSE);
+    check_interface(doc, &IID_IPersist, FALSE);
 
     hr = IPersistStreamInit_GetClassID(streaminit, NULL);
     ok(hr == E_POINTER, "got 0x%08x\n", hr);
@@ -9039,6 +9058,10 @@ static void test_xsltemplate(void)
     if (!is_clsid_supported(&CLSID_XSLTemplate, &IID_IXSLTemplate)) return;
     template = create_xsltemplate(&IID_IXSLTemplate);
 
+    check_interface(template, &IID_IXSLTemplate, TRUE);
+    check_interface(template, &IID_IDispatch, TRUE);
+    check_interface(template, &IID_IDispatchEx, TRUE);
+
     /* works as reset */
     hr = IXSLTemplate_putref_stylesheet(template, NULL);
     ok(hr == S_OK, "got 0x%08x\n", hr);
@@ -10790,7 +10813,6 @@ static void test_mxnamespacemanager(void)
     IMXNamespaceManager *nsmgr;
     IUnknown *unk1, *unk2;
     WCHAR buffW[250];
-    IDispatch *disp;
     IUnknown *unk;
     HRESULT hr;
     INT len;
@@ -10799,10 +10821,10 @@ static void test_mxnamespacemanager(void)
         &IID_IMXNamespaceManager, (void**)&nsmgr);
     EXPECT_HR(hr, S_OK);
 
-    /* IMXNamespaceManager inherits from IUnknown */
-    hr = IMXNamespaceManager_QueryInterface(nsmgr, &IID_IDispatch, (void**)&disp);
-    EXPECT_HR(hr, S_OK);
-    IDispatch_Release(disp);
+    check_interface(nsmgr, &IID_IDispatch, TRUE);
+    check_interface(nsmgr, &IID_IDispatchEx, TRUE);
+    check_interface(nsmgr, &IID_IMXNamespaceManager, TRUE);
+    check_interface(nsmgr, &IID_IVBMXNamespaceManager, TRUE);
 
     hr = IMXNamespaceManager_QueryInterface(nsmgr, &IID_IVBMXNamespaceManager, (void**)&mgr2);
     EXPECT_HR(hr, S_OK);
diff --git a/dlls/msxml3/tests/httpreq.c b/dlls/msxml3/tests/httpreq.c
index 4a23f1d82a8..2491e499638 100644
--- a/dlls/msxml3/tests/httpreq.c
+++ b/dlls/msxml3/tests/httpreq.c
@@ -50,6 +50,21 @@ static void _expect_ref(IUnknown* obj, ULONG ref, int line)
     ok_(__FILE__, line)(rc == ref, "expected refcount %d, got %d\n", ref, rc);
 }
 
+#define check_interface(a, b, c) check_interface_(__LINE__, a, b, c)
+static void check_interface_(unsigned int line, void *iface_ptr, REFIID iid, BOOL supported)
+{
+    IUnknown *iface = iface_ptr;
+    HRESULT hr, expected_hr;
+    IUnknown *unk;
+
+    expected_hr = supported ? S_OK : E_NOINTERFACE;
+
+    hr = IUnknown_QueryInterface(iface, iid, (void **)&unk);
+    ok_(__FILE__, line)(hr == expected_hr, "Got hr %#x, expected %#x.\n", hr, expected_hr);
+    if (SUCCEEDED(hr))
+        IUnknown_Release(unk);
+}
+
 static const char xmltestA[] = "http://test.winehq.org/tests/xmltest.xml";
 static const CHAR xmltestbodyA[] = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<a>TEST</a>\n";
 
@@ -1457,6 +1472,10 @@ static void test_XMLHTTP(void)
 
     xhr = create_xhr();
 
+    check_interface(xhr, &IID_IXMLHttpRequest, TRUE);
+    check_interface(xhr, &IID_IDispatch, TRUE);
+    check_interface(xhr, &IID_IDispatchEx, FALSE);
+
     VariantInit(&dummy);
     V_VT(&dummy) = VT_ERROR;
     V_ERROR(&dummy) = DISP_E_MEMBERNOTFOUND;
diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c
index e401aafc87d..ad093af6a12 100644
--- a/dlls/msxml3/tests/saxreader.c
+++ b/dlls/msxml3/tests/saxreader.c
@@ -48,6 +48,21 @@ static void _expect_ref(IUnknown* obj, ULONG ref, int line)
     ok_(__FILE__, line)(rc == ref, "expected refcount %d, got %d\n", ref, rc);
 }
 
+#define check_interface(a, b, c) check_interface_(__LINE__, a, b, c)
+static void check_interface_(unsigned int line, void *iface_ptr, REFIID iid, BOOL supported)
+{
+    IUnknown *iface = iface_ptr;
+    HRESULT hr, expected_hr;
+    IUnknown *unk;
+
+    expected_hr = supported ? S_OK : E_NOINTERFACE;
+
+    hr = IUnknown_QueryInterface(iface, iid, (void **)&unk);
+    ok_(__FILE__, line)(hr == expected_hr, "Got hr %#x, expected %#x.\n", hr, expected_hr);
+    if (SUCCEEDED(hr))
+        IUnknown_Release(unk);
+}
+
 static LONG get_refcount(void *iface)
 {
     IUnknown *unk = iface;
@@ -4861,6 +4876,11 @@ static void test_saxreader_dispex(void)
                 &IID_ISAXXMLReader, (void**)&reader);
     EXPECT_HR(hr, S_OK);
 
+    check_interface(reader, &IID_ISAXXMLReader, TRUE);
+    check_interface(reader, &IID_IVBSAXXMLReader, TRUE);
+    check_interface(reader, &IID_IDispatch, TRUE);
+    check_interface(reader, &IID_IDispatchEx, TRUE);
+
     hr = ISAXXMLReader_QueryInterface(reader, &IID_IUnknown, (void**)&unk);
     EXPECT_HR(hr, S_OK);
     test_obj_dispex(unk);
@@ -5811,40 +5831,20 @@ static void test_mxattr_dispex(void)
 
 static void test_mxattr_qi(void)
 {
-    IVBSAXAttributes *vbsaxattr, *vbsaxattr2;
-    ISAXAttributes *saxattr;
     IMXAttributes *mxattr;
     HRESULT hr;
 
     hr = CoCreateInstance(&CLSID_SAXAttributes, NULL, CLSCTX_INPROC_SERVER,
-            &IID_IMXAttributes, (void**)&mxattr);
+            &IID_IMXAttributes, (void **)&mxattr);
     EXPECT_HR(hr, S_OK);
 
-    EXPECT_REF(mxattr, 1);
-    hr = IMXAttributes_QueryInterface(mxattr, &IID_ISAXAttributes, (void**)&saxattr);
-    EXPECT_HR(hr, S_OK);
-
-    EXPECT_REF(mxattr, 2);
-    EXPECT_REF(saxattr, 2);
-
-    hr = IMXAttributes_QueryInterface(mxattr, &IID_IVBSAXAttributes, (void**)&vbsaxattr);
-    EXPECT_HR(hr, S_OK);
-
-    EXPECT_REF(vbsaxattr, 3);
-    EXPECT_REF(mxattr, 3);
-    EXPECT_REF(saxattr, 3);
-
-    hr = ISAXAttributes_QueryInterface(saxattr, &IID_IVBSAXAttributes, (void**)&vbsaxattr2);
-    EXPECT_HR(hr, S_OK);
-
-    EXPECT_REF(vbsaxattr, 4);
-    EXPECT_REF(mxattr, 4);
-    EXPECT_REF(saxattr, 4);
+    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);
-    ISAXAttributes_Release(saxattr);
-    IVBSAXAttributes_Release(vbsaxattr);
-    IVBSAXAttributes_Release(vbsaxattr2);
 }
 
 static struct msxmlsupported_data_t saxattr_support_data[] =
diff --git a/dlls/msxml3/tests/schema.c b/dlls/msxml3/tests/schema.c
index 8dc9dcd7e22..4cdfedf9c29 100644
--- a/dlls/msxml3/tests/schema.c
+++ b/dlls/msxml3/tests/schema.c
@@ -37,6 +37,21 @@
 #define EXPECT_HR(hr,hr_exp) \
     ok(hr == hr_exp, "got 0x%08x, expected 0x%08x\n", hr, hr_exp)
 
+#define check_interface(a, b, c) check_interface_(__LINE__, a, b, c)
+static void check_interface_(unsigned int line, void *iface_ptr, REFIID iid, BOOL supported)
+{
+    IUnknown *iface = iface_ptr;
+    HRESULT hr, expected_hr;
+    IUnknown *unk;
+
+    expected_hr = supported ? S_OK : E_NOINTERFACE;
+
+    hr = IUnknown_QueryInterface(iface, iid, (void **)&unk);
+    ok_(__FILE__, line)(hr == expected_hr, "Got hr %#x, expected %#x.\n", hr, expected_hr);
+    if (SUCCEEDED(hr))
+        IUnknown_Release(unk);
+}
+
 static const CHAR xdr_schema1_uri[] = "x-schema:test1.xdr";
 static const CHAR xdr_schema1_xml[] =
 "<?xml version='1.0'?>"
@@ -1808,8 +1823,13 @@ static void test_ifaces(void)
     hr = IXMLDOMSchemaCollection2_QueryInterface(cache, &CLSID_XMLSchemaCache60, (void**)&unk);
     ok (hr == S_OK, "Could not get CLSID_XMLSchemaCache60 iface: %08x\n", hr);
     ok (unk == (IUnknown*)cache, "unk != cache\n");
-
     IUnknown_Release(unk);
+
+    check_interface(cache, &IID_IXMLDOMSchemaCollection, TRUE);
+    check_interface(cache, &IID_IXMLDOMSchemaCollection2, TRUE);
+    check_interface(cache, &IID_IDispatch, TRUE);
+    check_interface(cache, &IID_IDispatchEx, TRUE);
+
     IXMLDOMSchemaCollection2_Release(cache);
 }
 




More information about the wine-cvs mailing list