Stefan Dösinger : ddraw: Add a test for EnumSurfaces.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Apr 27 06:43:52 CDT 2007


Module: wine
Branch: master
Commit: 86eb79b0c9d642f07b4c2f0e07f9f90b22a36650
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=86eb79b0c9d642f07b4c2f0e07f9f90b22a36650

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Sun Apr 22 19:43:56 2007 +0200

ddraw: Add a test for EnumSurfaces.

---

 dlls/ddraw/tests/dsurface.c |   59 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 59 insertions(+), 0 deletions(-)

diff --git a/dlls/ddraw/tests/dsurface.c b/dlls/ddraw/tests/dsurface.c
index 2d5a625..e269983 100644
--- a/dlls/ddraw/tests/dsurface.c
+++ b/dlls/ddraw/tests/dsurface.c
@@ -885,6 +885,64 @@ static void GetDDInterface_7(void)
     IDirectDrawSurface7_Release(dsurface7);
 }
 
+#define MAXEXPECTED 8  /* Can match up to 8 expected surfaces */
+struct enumstruct
+{
+    IDirectDrawSurface *expected[MAXEXPECTED];
+    UINT count;
+};
+
+static HRESULT WINAPI enumCB(IDirectDrawSurface *surf, DDSURFACEDESC *desc, void *ctx)
+{
+    int i;
+    BOOL found = FALSE;
+
+    for(i = 0; i < MAXEXPECTED; i++)
+    {
+        if(((struct enumstruct *)ctx)->expected[i] == surf) found = TRUE;
+    }
+
+    ok(found, "Unexpected surface %p enumerated\n", surf);
+    ((struct enumstruct *)ctx)->count++;
+    IDirectDrawSurface_Release(surf);
+    return DDENUMRET_OK;
+}
+
+static void EnumTest(void)
+{
+    HRESULT rc;
+    DDSURFACEDESC ddsd;
+    IDirectDrawSurface *surface;
+    struct enumstruct ctx;
+
+    ddsd.dwSize = sizeof(ddsd);
+    ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_MIPMAPCOUNT;
+    ddsd.ddsCaps.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_COMPLEX | DDSCAPS_MIPMAP;
+    U2(ddsd).dwMipMapCount = 3;
+    ddsd.dwWidth = 32;
+    ddsd.dwHeight = 32;
+    rc = IDirectDraw_CreateSurface(lpDD, &ddsd, &surface, NULL);
+    ok(rc==DD_OK,"CreateSurface returned: %x\n",rc);
+
+    memset(&ctx, 0, sizeof(ctx));
+    ctx.expected[0] = surface;
+    rc = IDirectDrawSurface_GetAttachedSurface(ctx.expected[0], &ddsd.ddsCaps, &ctx.expected[1]);
+    ok(rc == DD_OK, "GetAttachedSurface returned %08x\n", rc);
+    rc = IDirectDrawSurface_GetAttachedSurface(ctx.expected[1], &ddsd.ddsCaps, &ctx.expected[2]);
+    ok(rc == DD_OK, "GetAttachedSurface returned %08x\n", rc);
+    rc = IDirectDrawSurface_GetAttachedSurface(ctx.expected[2], &ddsd.ddsCaps, &ctx.expected[3]);
+    ok(rc == DDERR_NOTFOUND, "GetAttachedSurface returned %08x\n", rc);
+    ctx.count = 0;
+
+    rc = IDirectDraw_EnumSurfaces(lpDD, DDENUMSURFACES_DOESEXIST | DDENUMSURFACES_ALL, &ddsd, (void *) &ctx, enumCB);
+    ok(rc == DD_OK, "IDirectDraw_EnumSurfaces returned %08x\n", rc);
+    ok(ctx.count == 3, "%d surfaces enumerated, expected 3\n", ctx.count);
+
+    IDirectDrawSurface_Release(ctx.expected[2]);
+    IDirectDrawSurface_Release(ctx.expected[1]);
+    IDirectDrawSurface_Release(surface);
+}
+
 START_TEST(dsurface)
 {
     if (!CreateDirectDraw())
@@ -896,5 +954,6 @@ START_TEST(dsurface)
     GetDDInterface_2();
     GetDDInterface_4();
     GetDDInterface_7();
+    EnumTest();
     ReleaseDirectDraw();
 }




More information about the wine-cvs mailing list