[PATCH] gdi32/tests: Test BitBlt() to a metafile.

Charles Davis cdavis at mymail.mines.edu
Tue Nov 17 12:10:50 CST 2009


---
 dlls/gdi32/tests/metafile.c |   67 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 67 insertions(+), 0 deletions(-)

diff --git a/dlls/gdi32/tests/metafile.c b/dlls/gdi32/tests/metafile.c
index b559901..dbeff43 100644
--- a/dlls/gdi32/tests/metafile.c
+++ b/dlls/gdi32/tests/metafile.c
@@ -665,6 +665,72 @@ static void test_SaveDC(void)
     DestroyWindow(hwnd);
 }
 
+static int CALLBACK test_BitBlt_record(HDC hdc, HANDLETABLE *table, const ENHMETARECORD *emfr, int nobj, LPARAM data)
+{
+    UINT *pi = (UINT *)data;
+    EMRBITBLT *emrbb;
+
+    if(emfr->iType != EMR_BITBLT) return 1;
+    emrbb = (EMRBITBLT *)emfr;
+
+    (*pi)++;
+    if(*pi > 2) return 1;
+    ok( emrbb->xDest == 0, "wrong xDest for BitBlt record: got %d, expected 0\n", emrbb->xDest );
+    ok( emrbb->yDest == 0, "wrong yDest for BitBlt record: got %d, expected 0\n", emrbb->yDest );
+    ok( emrbb->xSrc == 0, "wrong xSrc for BitBlt record: got %d, expected 0\n", emrbb->xSrc );
+    ok( emrbb->ySrc == 0, "wrong ySrc for BitBlt record: got %d, expected 0\n", emrbb->ySrc );
+    ok( emrbb->cxDest == GetSystemMetrics(SM_CXSCREEN), "wrong cxDest for BitBlt record: got %d\n", emrbb->cxDest );
+    ok( emrbb->cyDest == GetSystemMetrics(SM_CYSCREEN), "wrong cyDest for BitBlt record: got %d\n", emrbb->cyDest );
+    if(*pi == 1)    /* First BitBlt */
+    {
+        ok( emrbb->dwRop == SRCCOPY, "wrong ROP for BitBlt record: got %x, expected SRCCOPY\n", emrbb->dwRop );
+    }
+    else
+    {
+        todo_wine ok( emrbb->dwRop == WHITENESS, "wrong ROP for BitBlt record: got %x, expected WHITENESS\n", emrbb->dwRop );
+    }
+    return 1;
+}
+
+static void test_emf_BitBlt(void)
+{
+    HDC hdcDisplay, hdcMetafile, hdcBitmap;
+    HBITMAP hBitmap, hOldBitmap;
+    HENHMETAFILE hMetafile;
+    BOOL ret;
+    UINT i;
+
+    hdcDisplay = CreateDCA("DISPLAY", NULL, NULL, NULL);
+    ok( hdcDisplay != 0, "CreateDCA error %d\n", GetLastError() );
+    hdcMetafile = CreateEnhMetaFileA(hdcDisplay, NULL, NULL, NULL);
+    ok( hdcMetafile != 0, "CreateEnhMetaFileA failed\n" );
+
+    hdcBitmap = CreateCompatibleDC(hdcDisplay);
+    ok( hdcBitmap != 0, "CreateCompatibleDC failed\n" );
+    hBitmap = CreateCompatibleBitmap(hdcDisplay, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
+    ok( hBitmap != 0, "CreateCompatibleBitmap failed\n" );
+    hOldBitmap = SelectObject(hdcBitmap, hBitmap);
+
+    ret = BitBlt(hdcMetafile, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), hdcBitmap, 0, 0, SRCCOPY);
+    ok( ret, "BitBlt failed\n" );
+    if(0) /* Crashes on wine */
+    {
+        ret = BitBlt(hdcMetafile, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), 0, 0, 0, WHITENESS);
+        ok( ret, "BitBlt failed\n" );
+    }
+
+    hMetafile = CloseEnhMetaFile(hdcMetafile);
+    ok( hMetafile != 0, "CloseEnhMetaFile failed\n" );
+
+    i = 0;
+    EnumEnhMetaFile(0, hMetafile, test_BitBlt_record, &i, NULL);
+    todo_wine ok( i == 2, "too many/not enough BitBlt records: got %d, expected 2\n", i );
+
+    SelectObject(hdcBitmap, hOldBitmap);
+    DeleteObject(hBitmap);
+    DeleteDC(hdcBitmap);
+}
+
 static void test_mf_SaveDC(void)
 {
     HDC hdcMetafile;
@@ -2628,6 +2694,7 @@ START_TEST(metafile)
     /* For enhanced metafiles (enhmfdrv) */
     test_ExtTextOut();
     test_SaveDC();
+    test_emf_BitBlt();
 
     /* For win-format metafiles (mfdrv) */
     test_mf_SaveDC();
-- 
1.6.5.2


--------------000207060206040009040209--



More information about the wine-devel mailing list