From: Aaryaman Vasishta Subject: [PATCH 4/4] d3drm/tests: Add refcount tests for IDirect3DRMDevice* Message-Id: <1434023494-2661-4-git-send-email-jem456.vasishta@gmail.com> Date: Thu, 11 Jun 2015 17:21:34 +0530 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)