[PATCH 5/6] ddrawex/tests: Add some tests for GetSurfaceFromDC().

Henri Verbeet hverbeet at codeweavers.com
Mon Mar 29 06:31:10 CDT 2010


---
 dlls/ddrawex/tests/surface.c |  154 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 154 insertions(+), 0 deletions(-)

diff --git a/dlls/ddrawex/tests/surface.c b/dlls/ddrawex/tests/surface.c
index 211e8e9..d5a26b5 100644
--- a/dlls/ddrawex/tests/surface.c
+++ b/dlls/ddrawex/tests/surface.c
@@ -237,6 +237,158 @@ static void SysVidMemTest(void)
     GetDCTest_main(&ddsd, &ddsd2, dctest_sysvidmem);
 }
 
+static void test_surface_from_dc3(void)
+{
+    IDirectDrawSurface3 *surf3;
+    IDirectDrawSurface *surf1;
+    IDirectDrawSurface *tmp;
+    DDSURFACEDESC ddsd;
+    IDirectDraw3 *dd3;
+    IDirectDraw *dd1;
+    HRESULT hr;
+    HDC dc;
+
+    dd1 = createDD();
+    hr = IDirectDraw_QueryInterface(dd1, &IID_IDirectDraw3, (void **)&dd3);
+    ok(SUCCEEDED(hr), "IDirectDraw_QueryInterface failed, hr %#x.\n", hr);
+    IDirectDraw_Release(dd1);
+
+    memset(&ddsd, 0, sizeof(ddsd));
+    ddsd.dwSize = sizeof(ddsd);
+    ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
+    ddsd.dwWidth = 64;
+    ddsd.dwHeight = 64;
+    ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
+
+    hr = IDirectDraw3_CreateSurface(dd3, &ddsd, &surf1, NULL);
+    ok(SUCCEEDED(hr), "CreateSurface failed, hr %#x.\n", hr);
+
+    hr = IDirectDrawSurface3_QueryInterface(surf1, &IID_IDirectDrawSurface, (void **)&surf3);
+    ok(SUCCEEDED(hr), "QueryInterface failed, hr %#x.\n", hr);
+    IDirectDrawSurface_Release(surf1);
+
+    hr = IDirectDrawSurface3_GetDC(surf3, &dc);
+    ok(SUCCEEDED(hr), "GetDC failed, hr %#x.\n", hr);
+
+    hr = IDirectDraw3_GetSurfaceFromDC(dd3, dc, NULL);
+    ok(hr == E_POINTER, "Expected E_POINTER, got %#x.\n", hr);
+
+    hr = IDirectDraw3_GetSurfaceFromDC(dd3, dc, &tmp);
+    ok(SUCCEEDED(hr), "GetSurfaceFromDC failed, hr %#x.\n", hr);
+    ok((IDirectDrawSurface3 *)tmp == surf3, "Expected surface != %p.\n", surf3);
+
+    IUnknown_Release(tmp);
+
+    hr = IDirectDrawSurface3_ReleaseDC(surf3, dc);
+    ok(SUCCEEDED(hr), "ReleaseDC failed, hr %#x.\n", hr);
+
+    dc = CreateCompatibleDC(NULL);
+    ok(!!dc, "CreateCompatibleDC failed.\n");
+
+    tmp = (IDirectDrawSurface *)0xdeadbeef;
+    hr = IDirectDraw3_GetSurfaceFromDC(dd3, dc, &tmp);
+    ok(hr == DDERR_NOTFOUND, "Expected DDERR_NOTFOUND, got %#x.\n", hr);
+    ok(!tmp, "Expected surface NULL, got %p.\n", tmp);
+
+    ok(DeleteDC(dc), "DeleteDC failed.\n");
+
+    IDirectDrawSurface3_Release(surf3);
+    IDirectDraw3_Release(dd3);
+}
+
+DEFINE_GUID(guid, 0x38594b23, 0x2311, 0x4332, 0x95, 0xde, 0x2b, 0x0c, 0x61, 0xbf, 0x7b, 0x84);
+
+static void test_surface_from_dc4(void)
+{
+    IDirectDrawSurface4 *surf4;
+    IDirectDrawSurface *surf1;
+    DDSURFACEDESC2 ddsd2;
+    IUnknown *tmp, *tmp2;
+    IDirectDraw4 *dd4;
+    IDirectDraw *dd1;
+    DWORD priv, size;
+    HRESULT hr;
+    HDC dc;
+
+    dd1 = createDD();
+    hr = IDirectDraw_QueryInterface(dd1, &IID_IDirectDraw4, (void **)&dd4);
+    ok(SUCCEEDED(hr), "IDirectDraw_QueryInterface failed, hr %#x.\n", hr);
+    IDirectDraw_Release(dd1);
+
+    memset(&ddsd2, 0, sizeof(ddsd2));
+    ddsd2.dwSize = sizeof(ddsd2);
+    ddsd2.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
+    ddsd2.dwWidth = 64;
+    ddsd2.dwHeight = 64;
+    ddsd2.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
+
+    hr = IDirectDraw4_CreateSurface(dd4, &ddsd2, &surf4, NULL);
+    ok(SUCCEEDED(hr), "CreateSurface failed, hr %#x.\n", hr);
+
+    hr = IDirectDrawSurface4_QueryInterface(surf4, &IID_IDirectDrawSurface, (void **)&surf1);
+    ok(SUCCEEDED(hr), "QueryInterface failed, hr %#x.\n", hr);
+
+    priv = 0xdeadbeef;
+    size = sizeof(priv);
+    hr = IDirectDrawSurface4_SetPrivateData(surf4, &guid, &priv, size, 0);
+    ok(SUCCEEDED(hr), "SetPrivateData failed, hr %#x.\n", hr);
+
+    priv = 0;
+    hr = IDirectDrawSurface4_GetPrivateData(surf4, &guid, &priv, &size);
+    ok(SUCCEEDED(hr), "GetPrivateData failed, hr %#x.\n", hr);
+    ok(priv == 0xdeadbeef, "Expected private data 0xdeadbeef, got %#x.\n", priv);
+
+    hr = IDirectDrawSurface4_GetDC(surf4, &dc);
+    ok(SUCCEEDED(hr), "GetDC failed, hr %#x.\n", hr);
+
+    hr = IDirectDraw4_GetSurfaceFromDC(dd4, dc, NULL);
+    ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %#x.\n", hr);
+
+    hr = IDirectDraw4_GetSurfaceFromDC(dd4, dc, (IDirectDrawSurface4 **)&tmp);
+    ok(SUCCEEDED(hr), "GetSurfaceFromDC failed, hr %#x.\n", hr);
+    ok((IDirectDrawSurface4 *)tmp != surf4, "Expected surface != %p.\n", surf4);
+
+    hr = IUnknown_QueryInterface(tmp, &IID_IDirectDrawSurface, (void **)&tmp2);
+    ok(SUCCEEDED(hr), "QueryInterface failed, hr %#x.\n", hr);
+    ok(tmp2 == tmp, "Expected %p, got %p.\n", tmp, tmp2);
+    ok((IDirectDrawSurface *)tmp2 != surf1, "Expected surface != %p.\n", surf1);
+    IUnknown_Release(tmp2);
+
+    hr = IUnknown_QueryInterface(tmp, &IID_IDirectDrawSurface4, (void **)&tmp2);
+    ok(SUCCEEDED(hr), "QueryInterface failed, hr %#x.\n", hr);
+    ok((IDirectDrawSurface4 *)tmp2 != surf4, "Expected surface != %p.\n", surf4);
+
+    priv = 0;
+    hr = IDirectDrawSurface4_GetPrivateData((IDirectDrawSurface4 *)tmp2, &guid, &priv, &size);
+    ok(SUCCEEDED(hr), "GetPrivateData failed, hr %#x.\n", hr);
+    ok(priv == 0xdeadbeef, "Expected private data 0xdeadbeef, got %#x.\n", priv);
+    IUnknown_Release(tmp2);
+
+    IUnknown_Release(tmp);
+
+    hr = IDirectDrawSurface4_ReleaseDC(surf4, dc);
+    ok(SUCCEEDED(hr), "ReleaseDC failed, hr %#x.\n", hr);
+
+    dc = CreateCompatibleDC(NULL);
+    ok(!!dc, "CreateCompatibleDC failed.\n");
+
+    tmp = (IUnknown *)0xdeadbeef;
+    hr = IDirectDraw4_GetSurfaceFromDC(dd4, dc, (IDirectDrawSurface4 **)&tmp);
+    ok(hr == DDERR_NOTFOUND, "Expected DDERR_NOTFOUND, got %#x.\n", hr);
+    ok(!tmp, "Expected surface NULL, got %p.\n", tmp);
+
+    ok(DeleteDC(dc), "DeleteDC failed.\n");
+
+    tmp = (IUnknown *)0xdeadbeef;
+    hr = IDirectDraw4_GetSurfaceFromDC(dd4, NULL, (IDirectDrawSurface4 **)&tmp);
+    ok(hr == DDERR_NOTFOUND, "Expected DDERR_NOTFOUND, got %#x.\n", hr);
+    ok(!tmp, "Expected surface NULL, got %p.\n", tmp);
+
+    IDirectDrawSurface_Release(surf1);
+    IDirectDrawSurface4_Release(surf4);
+    IDirectDraw4_Release(dd4);
+}
+
 START_TEST(surface)
 {
     IClassFactory *classfactory = NULL;
@@ -261,6 +413,8 @@ START_TEST(surface)
     GetDCTest();
     CapsTest();
     SysVidMemTest();
+    test_surface_from_dc3();
+    test_surface_from_dc4();
 
     if(factory) {
         ref = IDirectDrawFactory_Release(factory);
-- 
1.6.4.4




More information about the wine-patches mailing list