[PATCH 4/4] d3drm/tests: Add refcount tests for IDirect3DRMDevice*

Aaryaman Vasishta jem456.vasishta at gmail.com
Thu Jun 11 06:51:34 CDT 2015


The refcount tests for d3drm1 are the same for the device created from all three creation methods.
---
 dlls/d3drm/tests/d3drm.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)

diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index ac4c8fe..ecf1d4d 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -2367,6 +2367,86 @@ cleanup:
     IDirectDraw_Release(ddraw1);
 }
 
+static void test_device_refcount(void)
+{
+    IDirect3DRM *d3drm1;
+    IDirect3DRM2 *d3drm2;
+    IDirect3DRM3 *d3drm3;
+    IDirect3DRMDevice *device1;
+    IDirect3DRMDevice2 *device2;
+    IDirect3DRMDevice3 *device3;
+    IDirectDrawClipper *clipper;
+    HWND window;
+    HRESULT hr;
+    ULONG ref1, ref2, cref1, cref2;
+    GUID driver;
+    RECT rc;
+
+
+    window = CreateWindowA("static", "d3drm_test", WS_OVERLAPPEDWINDOW, 0, 0, 300, 200, 0, 0, 0, 0);
+    GetClientRect(window, &rc);
+    hr = DirectDrawCreateClipper(0, &clipper, NULL);
+    ok(hr == DD_OK, "Cannot get IDirectDrawClipper interface (hr = %x)\n", hr);
+    hr = IDirectDrawClipper_SetHWnd(clipper, 0, window);
+    ok(hr == DD_OK, "Cannot set HWnd to Clipper (hr = %x)\n", hr);
+
+    hr = Direct3DRMCreate(&d3drm1);
+    ok(hr == D3DRM_OK, "Cannot get IDirect3DRM interface (hr = %x)\n", hr);
+    ref1 = get_refcount((IUnknown *)d3drm1);
+    cref1 = get_refcount((IUnknown *)clipper);
+    memcpy(&driver, &IID_IDirect3DRGBDevice, sizeof(GUID));
+    hr = IDirect3DRM_CreateDeviceFromClipper(d3drm1, clipper, &driver, rc.right, rc.bottom, &device1);
+    ok(hr == D3DRM_OK, "Cannot get IDirect3DRMDevice interface (hr = %x)\n", hr);
+    ref2 = get_refcount((IUnknown *)d3drm1);
+    cref2 = get_refcount((IUnknown *)clipper);
+    ok(ref2 > ref1, "expected ref2 > ref1, got ref1 = %d , ref2 = %d\n", ref1, ref2);
+    ok(cref2 > cref1, "expected cref2 > cref1, got cref1 = %d , cref2 = %d\n", cref1, cref2);
+    if (device1)
+        IDirect3DRMDevice_Release(device1);
+    ref2 = get_refcount((IUnknown *)d3drm1);
+    cref2 = get_refcount((IUnknown *)clipper);
+    ok(ref1 == ref2, "expected ref1 == ref2, got ref1 = %d, ref2 = %d\n", ref1, ref2);
+    ok(cref1 == cref2, "expected cref1 == cref2, got cref1 = %d, cref2 = %d\n", cref1, cref2);
+
+    hr = IDirect3DRM_QueryInterface(d3drm1, &IID_IDirect3DRM2, (void **)&d3drm2);
+    ok(hr == D3DRM_OK, "Cannot get IDirect3DRM2 interface (hr = %x).\n", hr);
+    ref1 = get_refcount((IUnknown *)d3drm1);
+    cref1 = get_refcount((IUnknown *)clipper);
+    hr = IDirect3DRM2_CreateDeviceFromClipper(d3drm2, clipper, &driver, rc.right, rc.bottom, &device2);
+    ok(hr == D3DRM_OK, "Cannot get IDirect3DRMDevice2 interface (hr = %x)\n", hr);
+    ref2 = get_refcount((IUnknown *)d3drm1);
+    cref2 = get_refcount((IUnknown *)clipper);
+    ok(ref2 > ref1, "expected ref2 > ref1, got ref1 = %d , ref2 = %d\n", ref1, ref2);
+    ok(cref2 > cref1, "expected cref2 > cref1, got cref1 = %d , cref2 = %d\n", cref1, cref2);
+    if (device2)
+        IDirect3DRMDevice2_Release(device2);
+    ref2 = get_refcount((IUnknown *)d3drm1);
+    cref2 = get_refcount((IUnknown *)clipper);
+    ok(ref1 == ref2, "expected ref1 == ref2, got ref1 = %d, ref2 = %d\n", ref1, ref2);
+    ok(cref1 == cref2, "expected cref1 == cref2, got cref1 = %d, cref2 = %d\n", cref1, cref2);
+
+    hr = IDirect3DRM_QueryInterface(d3drm1, &IID_IDirect3DRM3, (void **)&d3drm3);
+    ok(hr == D3DRM_OK, "Cannot get IDirect3DRM3 interface (hr = %x).\n", hr);
+    ref1 = get_refcount((IUnknown *)d3drm1);
+    cref1 = get_refcount((IUnknown *)clipper);
+    hr = IDirect3DRM3_CreateDeviceFromClipper(d3drm3, clipper, &driver, rc.right, rc.bottom, &device3);
+    ok(hr == D3DRM_OK, "Cannot get IDirect3DRMDevice3 interface (hr = %x)\n", hr);
+    ref2 = get_refcount((IUnknown *)d3drm1);
+    cref2 = get_refcount((IUnknown *)clipper);
+    ok(ref2 > ref1, "expected ref2 > ref1, got ref1 = %d, ref2 = %d\n", ref1, ref2);
+    ok(cref2 > cref1, "expected cref2 > cref1, got cref1 = %d , cref2 = %d\n", cref1, cref2);
+    if (device3)
+        IDirect3DRMDevice3_Release(device3);
+    ref2 = get_refcount((IUnknown *)d3drm1);
+    cref2 = get_refcount((IUnknown *)clipper);
+    ok(ref1 == ref2, "expected ref1 == ref2, got ref1 = %d, ref2 = %d\n", ref1, ref2);
+    ok(cref1 == cref2, "expected cref1 == cref2, got cref1 = %d, cref2 = %d\n", cref1, cref2);
+
+    IDirectDrawClipper_Release(clipper);
+    IDirect3DRM2_Release(d3drm2);
+    IDirect3DRM3_Release(d3drm3);
+}
+
 START_TEST(d3drm)
 {
     test_MeshBuilder();
@@ -2387,4 +2467,5 @@ START_TEST(d3drm)
     test_create_device_from_clipper();
     test_create_device_from_surface();
     test_create_device_from_d3d();
+    test_device_refcount();
 }
-- 
1.9.3 (Apple Git-50)




More information about the wine-patches mailing list