gdi32: Make the bitmap test pass under Windows 2000. Take 3

Dmitry Timoshkov dmitry at codeweavers.com
Tue Apr 29 00:49:45 CDT 2008


Hello,

it looks like an attempt to fix a failing under Windows 2000 test
was applied to a not appropriate CreateBitmap call.

Also this patch contains my previous fix for some other tests failing
under Windows 2000.

According to test.winehq.ord data Windows 2000 behaves weird in some tests,
this looks like a bug to me. This patch addresses these failures.

Changelog:
    gdi32: Make the bitmap test pass under Windows 2000.
---
 dlls/gdi32/tests/bitmap.c |   33 +++++++++++++++++++--------------
 1 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/dlls/gdi32/tests/bitmap.c b/dlls/gdi32/tests/bitmap.c
index 00441c0..27a6c88 100644
--- a/dlls/gdi32/tests/bitmap.c
+++ b/dlls/gdi32/tests/bitmap.c
@@ -276,7 +276,7 @@ static void test_dib_info(HBITMAP hbm, const void *bits, const BITMAPINFOHEADER
 {
     BITMAP bm;
     DIBSECTION ds;
-    INT ret, width_bytes;
+    INT ret, bm_width_bytes, dib_width_bytes;
     BYTE *buf;
 
     ret = GetObject(hbm, sizeof(bm), &bm);
@@ -285,23 +285,25 @@ static void test_dib_info(HBITMAP hbm, const void *bits, const BITMAPINFOHEADER
     ok(bm.bmType == 0, "wrong bm.bmType %d\n", bm.bmType);
     ok(bm.bmWidth == bmih->biWidth, "wrong bm.bmWidth %d\n", bm.bmWidth);
     ok(bm.bmHeight == bmih->biHeight, "wrong bm.bmHeight %d\n", bm.bmHeight);
-    width_bytes = DIB_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel);
-    ok(bm.bmWidthBytes == width_bytes, "wrong bm.bmWidthBytes %d != %d\n", bm.bmWidthBytes, width_bytes);
+    dib_width_bytes = DIB_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel);
+    bm_width_bytes = BITMAP_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel);
+    if (bm.bmWidthBytes != dib_width_bytes) /* Win2k bug */
+        ok(bm.bmWidthBytes == bm_width_bytes, "wrong bm.bmWidthBytes %d != %d\n", bm.bmWidthBytes, bm_width_bytes);
+    else
+        ok(bm.bmWidthBytes == dib_width_bytes, "wrong bm.bmWidthBytes %d != %d\n", bm.bmWidthBytes, dib_width_bytes);
     ok(bm.bmPlanes == bmih->biPlanes, "wrong bm.bmPlanes %d\n", bm.bmPlanes);
     ok(bm.bmBitsPixel == bmih->biBitCount, "bm.bmBitsPixel %d != %d\n", bm.bmBitsPixel, bmih->biBitCount);
     ok(bm.bmBits == bits, "wrong bm.bmBits %p != %p\n", bm.bmBits, bits);
 
     buf = HeapAlloc(GetProcessHeap(), 0, bm.bmWidthBytes * bm.bmHeight + 4096);
 
-    width_bytes = BITMAP_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel);
-
     /* GetBitmapBits returns not 32-bit aligned data */
     ret = GetBitmapBits(hbm, 0, NULL);
-    ok(ret == width_bytes * bm.bmHeight, "%d != %d\n", ret, width_bytes * bm.bmHeight);
+    ok(ret == bm_width_bytes * bm.bmHeight, "%d != %d\n", ret, bm_width_bytes * bm.bmHeight);
 
     memset(buf, 0xAA, bm.bmWidthBytes * bm.bmHeight + 4096);
     ret = GetBitmapBits(hbm, bm.bmWidthBytes * bm.bmHeight + 4096, buf);
-    ok(ret == width_bytes * bm.bmHeight, "%d != %d\n", ret, width_bytes * bm.bmHeight);
+    ok(ret == bm_width_bytes * bm.bmHeight, "%d != %d\n", ret, bm_width_bytes * bm.bmHeight);
 
     HeapFree(GetProcessHeap(), 0, buf);
 
@@ -331,8 +333,9 @@ static void test_dib_info(HBITMAP hbm, const void *bits, const BITMAPINFOHEADER
     ok(ret == sizeof(ds), "wrong size %d\n", ret);
 
     ok(ds.dsBm.bmBits == bits, "wrong bm.bmBits %p != %p\n", ds.dsBm.bmBits, bits);
-    ok(ds.dsBmih.biSizeImage == ds.dsBm.bmWidthBytes * ds.dsBm.bmHeight, "%u != %u\n",
-       ds.dsBmih.biSizeImage, ds.dsBm.bmWidthBytes * ds.dsBm.bmHeight);
+    if (ds.dsBm.bmWidthBytes != bm_width_bytes) /* Win2k bug */
+        ok(ds.dsBmih.biSizeImage == ds.dsBm.bmWidthBytes * ds.dsBm.bmHeight, "%u != %u\n",
+           ds.dsBmih.biSizeImage, ds.dsBm.bmWidthBytes * ds.dsBm.bmHeight);
     ok(bmih->biSizeImage == 0, "%u != 0\n", bmih->biSizeImage);
     ds.dsBmih.biSizeImage = 0;
 
@@ -969,11 +972,6 @@ static void test_bitmap(void)
 
     SetLastError(0xdeadbeef);
     hbmp = CreateBitmap(0x7ffffff, 1, 1, 1, NULL);
-    ok(hbmp != 0, "CreateBitmap should not fail\n");
-    DeleteObject(hbmp);
-
-    SetLastError(0xdeadbeef);
-    hbmp = CreateBitmap(0x7ffffff, 9, 1, 1, NULL);
     if (!hbmp)
     {
         ok(GetLastError() == ERROR_NOT_ENOUGH_MEMORY,
@@ -983,6 +981,13 @@ static void test_bitmap(void)
         DeleteObject(hbmp);
 
     SetLastError(0xdeadbeef);
+    hbmp = CreateBitmap(0x7ffffff, 9, 1, 1, NULL);
+    ok(!hbmp, "CreateBitmap should fail\n");
+    ok(GetLastError() == ERROR_NOT_ENOUGH_MEMORY /* XP */ ||
+       GetLastError() == ERROR_INVALID_PARAMETER /* Win2k */,
+       "expected ERROR_NOT_ENOUGH_MEMORY, got %u\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
     hbmp = CreateBitmap(0x7ffffff + 1, 1, 1, 1, NULL);
     ok(!hbmp, "CreateBitmap should fail\n");
     ok(GetLastError() == ERROR_INVALID_PARAMETER,
-- 
1.5.5.1






More information about the wine-patches mailing list