gdi32: Make the bitmap test pass under Windows 2000
Dmitry Timoshkov
dmitry at codeweavers.com
Mon Apr 21 02:24:58 CDT 2008
Hello,
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 | 27 +++++++++++++++++----------
1 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/dlls/gdi32/tests/bitmap.c b/dlls/gdi32/tests/bitmap.c
index 15a463b..738e272 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;
@@ -967,15 +970,19 @@ static void test_bitmap(void)
hdc = CreateCompatibleDC(0);
assert(hdc != 0);
+if (0)
+{ /* this test fails under Win2k */
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);
ok(!hbmp, "CreateBitmap should fail\n");
- ok(GetLastError() == ERROR_NOT_ENOUGH_MEMORY,
+ ok(GetLastError() == ERROR_NOT_ENOUGH_MEMORY /* XP */ ||
+ GetLastError() == ERROR_INVALID_PARAMETER /* Win2k */,
"expected ERROR_NOT_ENOUGH_MEMORY, got %u\n", GetLastError());
SetLastError(0xdeadbeef);
--
1.5.4.5
More information about the wine-patches
mailing list