[PATCH 3/4] quartz/tests: Add some tests for IVMRMonitorConfig on the VMR7.

Zebediah Figura z.figura12 at gmail.com
Thu Apr 4 22:51:47 CDT 2019


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/quartz/tests/Makefile.in |   2 +-
 dlls/quartz/tests/vmr7.c      | 125 ++++++++++++++++++++++++++++++++++
 2 files changed, 126 insertions(+), 1 deletion(-)

diff --git a/dlls/quartz/tests/Makefile.in b/dlls/quartz/tests/Makefile.in
index 1a12ffaa6a..772b40409f 100644
--- a/dlls/quartz/tests/Makefile.in
+++ b/dlls/quartz/tests/Makefile.in
@@ -1,5 +1,5 @@
 TESTDLL   = quartz.dll
-IMPORTS   = advapi32 msvfw32 ole32 oleaut32 strmiids user32 uuid
+IMPORTS   = advapi32 ddraw msvfw32 ole32 oleaut32 strmiids user32 uuid
 
 C_SRCS = \
 	acmwrapper.c \
diff --git a/dlls/quartz/tests/vmr7.c b/dlls/quartz/tests/vmr7.c
index e9efe55d35..8a16039673 100644
--- a/dlls/quartz/tests/vmr7.c
+++ b/dlls/quartz/tests/vmr7.c
@@ -22,6 +22,7 @@
 #include "dshow.h"
 #include "d3d9.h"
 #include "vmr9.h"
+#include "wine/heap.h"
 #include "wine/test.h"
 
 static IBaseFilter *create_vmr7(DWORD mode)
@@ -567,6 +568,129 @@ static void test_pin_info(void)
     ok(!ref, "Got outstanding refcount %d.\n", ref);
 }
 
+static DWORD ddraw_device_idx;
+
+static BOOL CALLBACK ddraw_enum_cb(GUID *guid, char *description, char *name, void *ctx, HMONITOR hmonitor)
+{
+    VMRMONITORINFO *monitors = ctx;
+    VMRMONITORINFO *monitor = &monitors[ddraw_device_idx];
+    MONITORINFO monitor_info = {sizeof(MONITORINFO)};
+    DDDEVICEIDENTIFIER2 id;
+    IDirectDraw7 *ddraw;
+    WCHAR buffer[256];
+    HRESULT hr;
+
+    hr = DirectDrawCreateEx(guid, (void **)&ddraw, &IID_IDirectDraw7, NULL);
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+    hr = IDirectDraw7_GetDeviceIdentifier(ddraw, &id, 0);
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+    if (guid)
+    {
+        todo_wine ok(IsEqualGUID(&monitor->guid.GUID, guid), "Expected GUID %s, got %s.\n",
+                wine_dbgstr_guid(guid), wine_dbgstr_guid(&monitor->guid.GUID));
+    }
+    else
+    {
+        ok(!monitor->guid.pGUID, "Got GUID pointer %p.\n", monitor->guid.pGUID);
+        ok(IsEqualGUID(&monitor->guid.GUID, &GUID_NULL), "Got GUID %s.\n",
+                wine_dbgstr_guid(&monitor->guid.GUID));
+        hmonitor = MonitorFromWindow(0, MONITOR_DEFAULTTOPRIMARY);
+    }
+    todo_wine_if(ddraw_device_idx)
+    {
+    ok(monitor->hMon == hmonitor, "Expected monitor handle %p, got %p.\n", hmonitor, monitor->hMon);
+    GetMonitorInfoA(hmonitor, &monitor_info);
+    ok(EqualRect(&monitor->rcMonitor, &monitor_info.rcMonitor), "Expected rect %s, got %s.\n",
+            wine_dbgstr_rect(&monitor_info.rcMonitor), wine_dbgstr_rect(&monitor->rcMonitor));
+    ok(monitor->dwFlags == monitor_info.dwFlags, "Expected flags %#x, got %#x.\n",
+            monitor_info.dwFlags, monitor->dwFlags);
+    }
+    MultiByteToWideChar(CP_ACP, 0, name, -1, buffer, ARRAY_SIZE(buffer));
+    todo_wine_if(!guid) ok(!lstrcmpW(monitor->szDevice, buffer), "Expected device name %s, got %s.\n",
+            wine_dbgstr_w(buffer), wine_dbgstr_w(monitor->szDevice));
+    MultiByteToWideChar(CP_ACP, 0, description, -1, buffer, ARRAY_SIZE(buffer));
+    todo_wine ok(!lstrcmpW(monitor->szDescription, buffer), "Expected description %s, got %s.\n",
+            wine_dbgstr_w(buffer), wine_dbgstr_w(monitor->szDescription));
+    todo_wine ok(monitor->liDriverVersion.QuadPart == id.liDriverVersion.QuadPart,
+            "Expected version %s, got %s.\n", wine_dbgstr_longlong(id.liDriverVersion.QuadPart),
+            wine_dbgstr_longlong(monitor->liDriverVersion.QuadPart));
+    todo_wine ok(monitor->dwVendorId == id.dwVendorId, "Expected vendor ID %#x, got %#x.\n",
+            id.dwVendorId, monitor->dwVendorId);
+    todo_wine ok(monitor->dwDeviceId == id.dwDeviceId, "Expected device ID %#x, got %#x.\n",
+            id.dwDeviceId, monitor->dwDeviceId);
+    ok(monitor->dwSubSysId == id.dwSubSysId, "Expected subsystem ID %#x, got %#x.\n",
+            id.dwSubSysId, monitor->dwSubSysId);
+    ok(monitor->dwRevision == id.dwRevision, "Expected revision %#x, got %#x.\n",
+            id.dwRevision, monitor->dwRevision);
+
+    ddraw_device_idx++;
+    return TRUE;
+}
+
+static void test_monitor_config(void)
+{
+    IBaseFilter *filter = create_vmr7(0);
+    IVMRMonitorConfig *config;
+    VMRMONITORINFO *monitors;
+    DWORD count, needed;
+    GUID expect_guid;
+    VMRGUID guid;
+    HRESULT hr;
+    ULONG ref;
+
+    hr = IBaseFilter_QueryInterface(filter, &IID_IVMRMonitorConfig, (void **)&config);
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+    hr = IVMRMonitorConfig_GetMonitor(config, NULL);
+    ok(hr == E_POINTER, "Got hr %#x.\n", hr);
+
+    memset(&guid, 0xcc, sizeof(guid));
+    hr = IVMRMonitorConfig_GetMonitor(config, &guid);
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
+    ok(!guid.pGUID, "Got guid pointer %p.\n", guid.pGUID);
+    todo_wine ok(IsEqualGUID(&guid.GUID, &GUID_NULL), "Got guid %s.\n", wine_dbgstr_guid(&guid.GUID));
+
+    hr = IVMRMonitorConfig_GetDefaultMonitor(config, NULL);
+    ok(hr == E_POINTER, "Got hr %#x.\n", hr);
+
+    memset(&guid, 0xcc, sizeof(guid));
+    memset(&expect_guid, 0xcc, sizeof(expect_guid));
+    hr = IVMRMonitorConfig_GetDefaultMonitor(config, &guid);
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
+    ok(!guid.pGUID, "Got guid pointer %p.\n", guid.pGUID);
+    ok(IsEqualGUID(&guid.GUID, &expect_guid), "Got guid %s.\n", wine_dbgstr_guid(&guid.GUID));
+
+    hr = IVMRMonitorConfig_GetAvailableMonitors(config, NULL, 0, NULL);
+    ok(hr == E_POINTER, "Got hr %#x.\n", hr);
+
+    hr = IVMRMonitorConfig_GetAvailableMonitors(config, NULL, 0, &needed);
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+    count = needed;
+    monitors = heap_alloc(count * sizeof(VMRMONITORINFO));
+
+    hr = IVMRMonitorConfig_GetAvailableMonitors(config, monitors, 0, &needed);
+    ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr);
+
+    hr = IVMRMonitorConfig_GetAvailableMonitors(config, monitors, count, NULL);
+    ok(hr == E_POINTER, "Got hr %#x.\n", hr);
+
+    memset(monitors, 0xcc, count * sizeof(VMRMONITORINFO));
+    hr = IVMRMonitorConfig_GetAvailableMonitors(config, monitors, count, &needed);
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+    hr = DirectDrawEnumerateExA(ddraw_enum_cb, monitors, DDENUM_ATTACHEDSECONDARYDEVICES);
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
+    ok(ddraw_device_idx == count, "Expected count %u, got %u.\n", ddraw_device_idx, count);
+
+    heap_free(monitors);
+    IVMRMonitorConfig_Release(config);
+    ref = IBaseFilter_Release(filter);
+    ok(!ref, "Got outstanding refcount %d.\n", ref);
+}
+
 START_TEST(vmr7)
 {
     CoInitialize(NULL);
@@ -576,6 +700,7 @@ START_TEST(vmr7)
     test_enum_pins();
     test_find_pin();
     test_pin_info();
+    test_monitor_config();
 
     CoUninitialize();
 }
-- 
2.20.1




More information about the wine-devel mailing list