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

Paul Vriens paul.vriens.wine at gmail.com
Tue Apr 22 06:38:13 CDT 2008


Dmitry Timoshkov wrote:
> Hello,
> 
> here is another version of the patch.
> --
> 
> 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 |   28 ++++++++++++++++------------
>  1 files changed, 16 insertions(+), 12 deletions(-)
> 
> diff --git a/dlls/gdi32/tests/bitmap.c b/dlls/gdi32/tests/bitmap.c
> index f7bfdfd..ba4f8bd 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;
>  
> @@ -968,14 +971,15 @@ static void test_bitmap(void)
>      assert(hdc != 0);
>  
>      SetLastError(0xdeadbeef);
> -    hbmp = CreateBitmap(0x7ffffff, 1, 1, 1, NULL);
> -    ok(hbmp != 0, "CreateBitmap should not fail\n");
> +    hbmp = CreateBitmap(0x7fff, 0x7fff, 1, 1, NULL);
> +    ok(hbmp != 0, "CreateBitmap error %u\n", GetLastError());
>      DeleteObject(hbmp);
>  

Hi Dmitry,

This one will fail at least on my VMware box. Shouldn't the test (and it's 
confirmed by James and me) include something like:

ok(hbmp!=0 || (hbmp == 0 && GetLastError() == ERROR_NOT_ENOUGH_MEMORY), ....)

-- 
Cheers,

Paul.



More information about the wine-devel mailing list