[PATCH 4/4] quartz/tests: Add some tests for IVMRMonitorConfig9 on the VMR9.
Zebediah Figura
z.figura12 at gmail.com
Thu Apr 4 22:51:48 CDT 2019
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/quartz/tests/Makefile.in | 2 +-
dlls/quartz/tests/vmr9.c | 102 ++++++++++++++++++++++++++++++++++
2 files changed, 103 insertions(+), 1 deletion(-)
diff --git a/dlls/quartz/tests/Makefile.in b/dlls/quartz/tests/Makefile.in
index 772b40409f..59124c32af 100644
--- a/dlls/quartz/tests/Makefile.in
+++ b/dlls/quartz/tests/Makefile.in
@@ -1,5 +1,5 @@
TESTDLL = quartz.dll
-IMPORTS = advapi32 ddraw msvfw32 ole32 oleaut32 strmiids user32 uuid
+IMPORTS = advapi32 d3d9 ddraw msvfw32 ole32 oleaut32 strmiids user32 uuid
C_SRCS = \
acmwrapper.c \
diff --git a/dlls/quartz/tests/vmr9.c b/dlls/quartz/tests/vmr9.c
index a0d2ea1687..6c1c314502 100644
--- a/dlls/quartz/tests/vmr9.c
+++ b/dlls/quartz/tests/vmr9.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_vmr9(DWORD mode)
@@ -569,6 +570,106 @@ static void test_pin_info(void)
ok(!ref, "Got outstanding refcount %d.\n", ref);
}
+static void test_monitor_config(void)
+{
+ MONITORINFO monitor_info = {sizeof(MONITORINFO)};
+ DWORD count, needed, expect_count, i;
+ IBaseFilter *filter = create_vmr9(0);
+ IVMRMonitorConfig9 *config;
+ D3DADAPTER_IDENTIFIER9 id;
+ VMR9MonitorInfo *monitors;
+ HMONITOR hmonitor;
+ WCHAR buffer[256];
+ IDirect3D9 *d3d;
+ HRESULT hr;
+ UINT index;
+ ULONG ref;
+
+ hr = IBaseFilter_QueryInterface(filter, &IID_IVMRMonitorConfig9, (void **)&config);
+ if (hr == E_NOINTERFACE)
+ {
+ win_skip("Filter does not implement IVMRMonitorConfig9.\n");
+ IBaseFilter_Release(filter);
+ return;
+ }
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IVMRMonitorConfig9_GetMonitor(config, NULL);
+ ok(hr == E_POINTER, "Got hr %#x.\n", hr);
+
+ index = 0xdeadbeef;
+ hr = IVMRMonitorConfig9_GetMonitor(config, &index);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(!index, "Got index %u.\n", index);
+
+ hr = IVMRMonitorConfig9_GetDefaultMonitor(config, NULL);
+ ok(hr == E_POINTER, "Got hr %#x.\n", hr);
+
+ index = 0xdeadbeef;
+ hr = IVMRMonitorConfig9_GetDefaultMonitor(config, &index);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(!index, "Got index %u.\n", index);
+
+ hr = IVMRMonitorConfig9_GetAvailableMonitors(config, NULL, 0, NULL);
+ ok(hr == E_POINTER, "Got hr %#x.\n", hr);
+
+ hr = IVMRMonitorConfig9_GetAvailableMonitors(config, NULL, 0, &needed);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ count = needed;
+ monitors = heap_alloc(count * sizeof(VMR9MonitorInfo));
+
+ hr = IVMRMonitorConfig9_GetAvailableMonitors(config, monitors, 0, &needed);
+ ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr);
+
+ hr = IVMRMonitorConfig9_GetAvailableMonitors(config, monitors, count, NULL);
+ ok(hr == E_POINTER, "Got hr %#x.\n", hr);
+
+ memset(monitors, 0xcc, count * sizeof(VMR9MonitorInfo));
+ hr = IVMRMonitorConfig9_GetAvailableMonitors(config, monitors, count, &needed);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ d3d = Direct3DCreate9(D3D_SDK_VERSION);
+ ok(!!d3d, "Failed to create a D3D object.\n");
+ expect_count = IDirect3D9_GetAdapterCount(d3d);
+ ok(count == expect_count, "Expected count %u, got %u.\n", expect_count, count);
+ for (i = 0; i < count; ++i)
+ {
+ hmonitor = IDirect3D9_GetAdapterMonitor(d3d, i);
+ GetMonitorInfoA(hmonitor, &monitor_info);
+ hr = IDirect3D9_GetAdapterIdentifier(d3d, i, 0, &id);
+ ok(hr == S_OK, "%u: Got hr %#x.\n", i, hr);
+
+ ok(monitors[i].uDevID == i, "Expected index %u, got %u.\n", i, monitors[i].uDevID);
+ ok(EqualRect(&monitors[i].rcMonitor, &monitor_info.rcMonitor), "%u: Expected rect %s, got %s.\n",
+ i, wine_dbgstr_rect(&monitor_info.rcMonitor), wine_dbgstr_rect(&monitors[i].rcMonitor));
+ ok(monitors[i].dwFlags == monitor_info.dwFlags, "%u: Expected flags %#x, got %#x.\n",
+ i, monitor_info.dwFlags, monitors[i].dwFlags);
+ MultiByteToWideChar(CP_ACP, 0, id.DeviceName, -1, buffer, ARRAY_SIZE(buffer));
+ ok(!lstrcmpW(monitors[i].szDevice, buffer), "%u: Expected device name %s, got %s.\n",
+ i, wine_dbgstr_w(buffer), wine_dbgstr_w(monitors[i].szDevice));
+ MultiByteToWideChar(CP_ACP, 0, id.Description, -1, buffer, ARRAY_SIZE(buffer));
+ todo_wine ok(!lstrcmpW(monitors[i].szDescription, buffer), "%u: Expected description %s, got %s.\n",
+ i, wine_dbgstr_w(buffer), wine_dbgstr_w(monitors[i].szDescription));
+ todo_wine ok(monitors[i].liDriverVersion.QuadPart == id.DriverVersion.QuadPart,
+ "%u: Expected version %s, got %s.\n", i, wine_dbgstr_longlong(id.DriverVersion.QuadPart),
+ wine_dbgstr_longlong(monitors[i].liDriverVersion.QuadPart));
+ todo_wine ok(monitors[i].dwVendorId == id.VendorId, "%u: Expected vendor ID %#x, got %#x.\n",
+ i, id.VendorId, monitors[i].dwVendorId);
+ todo_wine ok(monitors[i].dwDeviceId == id.DeviceId, "%u: Expected device ID %#x, got %#x.\n",
+ i, id.DeviceId, monitors[i].dwDeviceId);
+ ok(monitors[i].dwSubSysId == id.SubSysId, "%u: Expected subsystem ID %#x, got %#x.\n",
+ i, id.SubSysId, monitors[i].dwSubSysId);
+ ok(monitors[i].dwRevision == id.Revision, "%u: Expected revision %#x, got %#x.\n",
+ i, id.Revision, monitors[i].dwRevision);
+ }
+
+ heap_free(monitors);
+ IVMRMonitorConfig9_Release(config);
+ ref = IBaseFilter_Release(filter);
+ ok(!ref, "Got outstanding refcount %d.\n", ref);
+}
+
START_TEST(vmr9)
{
IBaseFilter *filter;
@@ -589,6 +690,7 @@ START_TEST(vmr9)
test_enum_pins();
test_find_pin();
test_pin_info();
+ test_monitor_config();
CoUninitialize();
}
--
2.20.1
More information about the wine-devel
mailing list