Nikolay Sivov : mfplat/tests: Add a helper to check for supported interfaces.

Alexandre Julliard julliard at winehq.org
Mon Nov 16 15:28:57 CST 2020


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Mon Nov 16 17:50:17 2020 +0300

mfplat/tests: Add a helper to check for supported interfaces.

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

---

 dlls/mfplat/tests/mfplat.c | 90 +++++++++++++++++++---------------------------
 1 file changed, 36 insertions(+), 54 deletions(-)

diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
index c9a01644c6b..474d6281f5f 100644
--- a/dlls/mfplat/tests/mfplat.c
+++ b/dlls/mfplat/tests/mfplat.c
@@ -70,6 +70,21 @@ static void _expect_ref(IUnknown *obj, ULONG ref, int line)
     ok_(__FILE__,line)(rc == ref, "Unexpected refcount %d, expected %d.\n", rc, ref);
 }
 
+#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 HRESULT (WINAPI *pD3D11CreateDevice)(IDXGIAdapter *adapter, D3D_DRIVER_TYPE driver_type, HMODULE swrast, UINT flags,
         const D3D_FEATURE_LEVEL *feature_levels, UINT levels, UINT sdk_version, ID3D11Device **device_out,
         D3D_FEATURE_LEVEL *obtained_feature_level, ID3D11DeviceContext **immediate_context);
@@ -867,8 +882,8 @@ if(0)
     hr = MFCreateMediaType(&mediatype);
     ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
 
-    hr = IMFMediaType_QueryInterface(mediatype, &IID_IMFVideoMediaType, (void **)&unk);
-    ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
+    check_interface(mediatype, &IID_IMFVideoMediaType, FALSE);
+
     hr = IMFMediaType_QueryInterface(mediatype, &IID_IUnknown, (void **)&unk);
     ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
     ok(unk == (IUnknown *)mediatype, "Unexpected pointer.\n");
@@ -899,13 +914,9 @@ if(0)
 
     hr = MFCreateVideoMediaTypeFromSubtype(&MFVideoFormat_RGB555, &video_type);
     ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
-    hr = IMFVideoMediaType_QueryInterface(video_type, &IID_IMFMediaType, (void **)&unk);
-    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
-    IUnknown_Release(unk);
 
-    hr = IMFVideoMediaType_QueryInterface(video_type, &IID_IMFVideoMediaType, (void **)&unk);
-    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
-    IUnknown_Release(unk);
+    check_interface(video_type, &IID_IMFMediaType, TRUE);
+    check_interface(video_type, &IID_IMFVideoMediaType, TRUE);
 
     /* Major and subtype are set on creation. */
     hr = IMFVideoMediaType_GetCount(video_type, &count);
@@ -917,8 +928,7 @@ if(0)
     hr = IMFVideoMediaType_GetCount(video_type, &count);
     ok(!count, "Unexpected attribute count %#x.\n", hr);
 
-    hr = IMFVideoMediaType_QueryInterface(video_type, &IID_IMFVideoMediaType, (void **)&unk);
-    ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
+    check_interface(video_type, &IID_IMFVideoMediaType, FALSE);
 
     IMFVideoMediaType_Release(video_type);
 
@@ -928,8 +938,8 @@ if(0)
     hr = MFCreateMediaType(&mediatype);
     ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
 
-    hr = IMFMediaType_QueryInterface(mediatype, &IID_IMFAudioMediaType, (void **)&unk);
-    ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
+    check_interface(mediatype, &IID_IMFAudioMediaType, FALSE);
+
     hr = IMFMediaType_QueryInterface(mediatype, &IID_IUnknown, (void **)&unk);
     ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
     ok(unk == (IUnknown *)mediatype, "Unexpected pointer.\n");
@@ -1620,17 +1630,10 @@ static void test_MFCreateMFByteStreamOnStream(void)
     ref = IMFByteStream_Release(bytestream2);
     ok(ref == 2, "got %u\n", ref);
 
-    hr = IMFByteStream_QueryInterface(bytestream, &IID_IMFByteStreamBuffering, (void **)&unknown);
-    ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
-
-    hr = IMFByteStream_QueryInterface(bytestream, &IID_IMFByteStreamCacheControl, (void **)&unknown);
-    ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
-
-    hr = IMFByteStream_QueryInterface(bytestream, &IID_IMFMediaEventGenerator, (void **)&unknown);
-    ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
-
-    hr = IMFByteStream_QueryInterface(bytestream, &IID_IMFGetService, (void **)&unknown);
-    ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
+    check_interface(bytestream, &IID_IMFByteStreamBuffering, FALSE);
+    check_interface(bytestream, &IID_IMFByteStreamCacheControl, FALSE);
+    check_interface(bytestream, &IID_IMFMediaEventGenerator, FALSE);
+    check_interface(bytestream, &IID_IMFGetService, FALSE);
 
     hr = IMFByteStream_GetCapabilities(bytestream, &caps);
     ok(hr == S_OK, "Failed to get stream capabilities, hr %#x.\n", hr);
@@ -1666,7 +1669,6 @@ static void test_file_stream(void)
     WCHAR pathW[MAX_PATH];
     DWORD caps, count;
     WCHAR *filename;
-    IUnknown *unk;
     HRESULT hr;
     WCHAR *str;
     BOOL eos;
@@ -1680,18 +1682,10 @@ static void test_file_stream(void)
                       MF_FILEFLAGS_NONE, filename, &bytestream);
     ok(hr == S_OK, "got 0x%08x\n", hr);
 
-    hr = IMFByteStream_QueryInterface(bytestream, &IID_IMFByteStreamBuffering, (void **)&unk);
-    ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
-
-    hr = IMFByteStream_QueryInterface(bytestream, &IID_IMFByteStreamCacheControl, (void **)&unk);
-    ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
-
-    hr = IMFByteStream_QueryInterface(bytestream, &IID_IMFMediaEventGenerator, (void **)&unk);
-    ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
-
-    hr = IMFByteStream_QueryInterface(bytestream, &IID_IMFGetService, (void **)&unk);
-    ok(hr == S_OK, "Failed to get interface pointer, hr %#x.\n", hr);
-    IUnknown_Release(unk);
+    check_interface(bytestream, &IID_IMFByteStreamBuffering, FALSE);
+    check_interface(bytestream, &IID_IMFByteStreamCacheControl, FALSE);
+    check_interface(bytestream, &IID_IMFMediaEventGenerator, FALSE);
+    check_interface(bytestream, &IID_IMFGetService, TRUE);
 
     hr = IMFByteStream_GetCapabilities(bytestream, &caps);
     ok(hr == S_OK, "Failed to get stream capabilities, hr %#x.\n", hr);
@@ -1818,7 +1812,6 @@ static void test_system_memory_buffer(void)
     HRESULT hr;
     DWORD length, max;
     BYTE *data, *data2;
-    IUnknown *unk;
 
     hr = MFCreateMemoryBuffer(1024, NULL);
     ok(hr == E_INVALIDARG || hr == E_POINTER, "got 0x%08x\n", hr);
@@ -1837,8 +1830,7 @@ static void test_system_memory_buffer(void)
     hr = MFCreateMemoryBuffer(1024, &buffer);
     ok(hr == S_OK, "got 0x%08x\n", hr);
 
-    hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMFGetService, (void **)&unk);
-    ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
+    check_interface(buffer, &IID_IMFGetService, FALSE);
 
     hr = IMFMediaBuffer_GetMaxLength(buffer, NULL);
     ok(hr == E_INVALIDARG || hr == E_POINTER, "got 0x%08x\n", hr);
@@ -4443,7 +4435,6 @@ static void test_create_property_store(void)
     PROPVARIANT value = {0};
     PROPERTYKEY key;
     ULONG refcount;
-    IUnknown *unk;
     DWORD count;
     HRESULT hr;
 
@@ -4458,10 +4449,8 @@ static void test_create_property_store(void)
     ok(store2 != store, "Expected different store objects.\n");
     IPropertyStore_Release(store2);
 
-    hr = IPropertyStore_QueryInterface(store, &IID_IPropertyStoreCache, (void **)&unk);
-    ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
-    hr = IPropertyStore_QueryInterface(store, &IID_IPersistSerializedPropStorage, (void **)&unk);
-    ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
+    check_interface(store, &IID_IPropertyStoreCache, FALSE);
+    check_interface(store, &IID_IPersistSerializedPropStorage, FALSE);
 
     hr = IPropertyStore_GetCount(store, NULL);
     ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
@@ -5195,7 +5184,6 @@ static void test_MFCreate2DMediaBuffer(void)
     IMF2DBuffer *_2dbuffer;
     IMFMediaBuffer *buffer;
     int i, pitch, pitch2;
-    IUnknown *unk;
     HRESULT hr;
     BOOL ret;
 
@@ -5218,9 +5206,7 @@ static void test_MFCreate2DMediaBuffer(void)
     hr = pMFCreate2DMediaBuffer(2, 3, MAKEFOURCC('N','V','1','2'), FALSE, &buffer);
     ok(hr == S_OK, "Failed to create a buffer, hr %#x.\n", hr);
 
-    hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMFGetService, (void **)&unk);
-    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
-    IUnknown_Release(unk);
+    check_interface(buffer, &IID_IMFGetService, TRUE);
 
     /* Full backing buffer size, with 64 bytes per row alignment.  */
     hr = IMFMediaBuffer_GetMaxLength(buffer, &max_length);
@@ -5450,7 +5436,6 @@ static void test_MFCreateMediaBufferFromMediaType(void)
     HRESULT hr;
     IMFMediaType *media_type;
     unsigned int i;
-    IUnknown *unk;
 
     if (!pMFCreateMediaBufferFromMediaType)
     {
@@ -5483,8 +5468,7 @@ static void test_MFCreateMediaBufferFromMediaType(void)
         if (FAILED(hr))
             break;
 
-        hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMFGetService, (void **)&unk);
-        ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
+        check_interface(buffer, &IID_IMFGetService, FALSE);
 
         hr = IMFMediaBuffer_GetMaxLength(buffer, &length);
         ok(hr == S_OK, "Failed to get length, hr %#x.\n", hr);
@@ -5827,7 +5811,6 @@ done:
 static void test_MFCreateTrackedSample(void)
 {
     IMFTrackedSample *tracked_sample;
-    IMFDesiredSample *desired_sample;
     IMFSample *sample;
     IUnknown *unk;
     HRESULT hr;
@@ -5852,8 +5835,7 @@ static void test_MFCreateTrackedSample(void)
 
     IMFSample_Release(sample);
 
-    hr = IMFTrackedSample_QueryInterface(tracked_sample, &IID_IMFDesiredSample, (void **)&desired_sample);
-    ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
+    check_interface(tracked_sample, &IID_IMFDesiredSample, FALSE);
 
     IMFTrackedSample_Release(tracked_sample);
 }




More information about the wine-cvs mailing list