[PATCH 1/5] dxgi/tests: Introduce check_interface() function.
Józef Kucia
jkucia at codeweavers.com
Tue Jan 23 11:15:15 CST 2018
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
dlls/dxgi/tests/device.c | 62 +++++++++++++++++++++++++++++-------------------
1 file changed, 38 insertions(+), 24 deletions(-)
diff --git a/dlls/dxgi/tests/device.c b/dlls/dxgi/tests/device.c
index 899a06383ae0..dfbbab42f5ea 100644
--- a/dlls/dxgi/tests/device.c
+++ b/dlls/dxgi/tests/device.c
@@ -39,6 +39,35 @@ static ULONG get_refcount(IUnknown *iface)
return IUnknown_Release(iface);
}
+#define check_interface(a, b, c, d) check_interface_(__LINE__, a, b, c, d)
+static HRESULT check_interface_(unsigned int line, void *iface, REFIID iid,
+ BOOL supported, BOOL is_broken)
+{
+ HRESULT hr, expected_hr, broken_hr;
+ IUnknown *unknown = iface, *out;
+
+ if (supported)
+ {
+ expected_hr = S_OK;
+ broken_hr = E_NOINTERFACE;
+ }
+ else
+ {
+ expected_hr = E_NOINTERFACE;
+ broken_hr = S_OK;
+ }
+
+ out = (IUnknown *)0xdeadbeef;
+ hr = IUnknown_QueryInterface(unknown, iid, (void **)&out);
+ ok_(__FILE__, line)(hr == expected_hr || broken(is_broken && hr == broken_hr),
+ "Got hr %#x, expected %#x.\n", hr, expected_hr);
+ if (SUCCEEDED(hr))
+ IUnknown_Release(out);
+ else
+ ok_(__FILE__, line)(!out, "Got unexpected pointer %p.\n", out);
+ return hr;
+}
+
#define MODE_DESC_IGNORE_RESOLUTION 0x00000001u
#define MODE_DESC_IGNORE_REFRESH_RATE 0x00000002u
#define MODE_DESC_IGNORE_FORMAT 0x00000004u
@@ -458,8 +487,6 @@ static void test_create_surface(void)
DXGI_SURFACE_DESC desc;
IDXGISurface *surface;
IDXGIDevice *device;
- IUnknown *surface1;
- IUnknown *texture;
ULONG refcount;
HRESULT hr;
@@ -478,19 +505,11 @@ static void test_create_surface(void)
hr = IDXGIDevice_CreateSurface(device, &desc, 1, DXGI_USAGE_RENDER_TARGET_OUTPUT, NULL, &surface);
ok(SUCCEEDED(hr), "Failed to create a dxgi surface, hr %#x\n", hr);
- hr = IDXGISurface_QueryInterface(surface, &IID_ID3D10Texture2D, (void **)&texture);
- ok(SUCCEEDED(hr), "Surface should implement ID3D10Texture2D\n");
- IUnknown_Release(texture);
-
- hr = IDXGISurface_QueryInterface(surface, &IID_ID3D11Texture2D, (void **)&texture);
- ok(SUCCEEDED(hr) || broken(hr == E_NOINTERFACE) /* Not available on all Windows versions. */,
- "Surface should implement ID3D11Texture2D.\n");
- if (SUCCEEDED(hr)) IUnknown_Release(texture);
-
- hr = IDXGISurface_QueryInterface(surface, &IID_IDXGISurface1, (void **)&surface1);
- ok(SUCCEEDED(hr) || broken(hr == E_NOINTERFACE) /* Not available on all Windows versions. */,
- "Surface should implement IDXGISurface1.\n");
- if (SUCCEEDED(hr)) IUnknown_Release(surface1);
+ check_interface(surface, &IID_ID3D10Texture2D, TRUE, FALSE);
+ /* Not available on all Windows versions. */
+ check_interface(surface, &IID_ID3D11Texture2D, TRUE, TRUE);
+ /* Not available on all Windows versions. */
+ check_interface(surface, &IID_IDXGISurface1, TRUE, TRUE);
IDXGISurface_Release(surface);
refcount = IDXGIDevice_Release(device);
@@ -2341,7 +2360,6 @@ done:
static void test_create_factory(void)
{
- IDXGIFactory1 *factory;
IUnknown *iface;
ULONG refcount;
HRESULT hr;
@@ -2359,12 +2377,9 @@ static void test_create_factory(void)
ok(SUCCEEDED(hr), "Failed to create factory with IID_IDXGIObject, hr %#x.\n", hr);
IUnknown_Release(iface);
- factory = (void *)0xdeadbeef;
hr = CreateDXGIFactory(&IID_IDXGIFactory, (void **)&iface);
ok(SUCCEEDED(hr), "Failed to create factory with IID_IDXGIFactory, hr %#x.\n", hr);
- hr = IUnknown_QueryInterface(iface, &IID_IDXGIFactory1, (void **)&factory);
- ok(hr == E_NOINTERFACE, "Got unexpected hr %#x.\n", hr);
- ok(!factory, "Got unexpected factory %p.\n", factory);
+ check_interface(iface, &IID_IDXGIFactory1, FALSE, FALSE);
IUnknown_Release(iface);
iface = (void *)0xdeadbeef;
@@ -2403,10 +2418,9 @@ static void test_create_factory(void)
hr = pCreateDXGIFactory1(&IID_IDXGIFactory, (void **)&iface);
ok(SUCCEEDED(hr), "Failed to create factory with IID_IDXGIFactory, hr %#x.\n", hr);
- hr = IUnknown_QueryInterface(iface, &IID_IDXGIFactory1, (void **)&factory);
- ok(SUCCEEDED(hr), "Failed to query IDXGIFactory1 interface, hr %#x.\n", hr);
- IDXGIFactory1_Release(factory);
- IUnknown_Release(iface);
+ check_interface(iface, &IID_IDXGIFactory1, TRUE, FALSE);
+ refcount = IUnknown_Release(iface);
+ ok(!refcount, "Factory has %u references left.\n", refcount);
hr = pCreateDXGIFactory1(&IID_IDXGIFactory1, (void **)&iface);
ok(SUCCEEDED(hr), "Failed to create factory with IID_IDXGIFactory1, hr %#x.\n", hr);
--
2.13.6
More information about the wine-devel
mailing list