[ros-diffs] [tkreuzer] 56542: [GDI32_APITEST] Add more tests for CreateDIBitmap and CreateDIBPatternBrushPt

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Tue May 8 15:49:05 UTC 2012


Author: tkreuzer
Date: Tue May  8 15:49:04 2012
New Revision: 56542

URL: http://svn.reactos.org/svn/reactos?rev=56542&view=rev
Log:
[GDI32_APITEST]
Add more tests for CreateDIBitmap and CreateDIBPatternBrushPt

Modified:
    trunk/rostests/apitests/gdi32/CreateDIBPatternBrush.c
    trunk/rostests/apitests/gdi32/CreateDIBitmap.c

Modified: trunk/rostests/apitests/gdi32/CreateDIBPatternBrush.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/gdi32/CreateDIBPatternBrush.c?rev=56542&r1=56541&r2=56542&view=diff
==============================================================================
--- trunk/rostests/apitests/gdi32/CreateDIBPatternBrush.c [iso-8859-1] (original)
+++ trunk/rostests/apitests/gdi32/CreateDIBPatternBrush.c [iso-8859-1] Tue May  8 15:49:04 2012
@@ -57,7 +57,7 @@
 
     /* Create a DIB brush with palette indices */
     hbr = CreateDIBPatternBrushPt(&PackedDIB, DIB_PAL_COLORS);
-    ok(hbr != 0, "CreateSolidBrush failed, skipping tests.\n");
+    ok(hbr != 0, "CreateDIBPatternBrushPt failed, skipping tests.\n");
     if (!hbr) return;
 
     /* Select the brush into the dc */
@@ -135,6 +135,33 @@
 
 }
 
+void Test_CreateDIBPatternBrushPt_RLE8()
+{
+    struct
+    {
+        BITMAPINFOHEADER bmiHeader;
+        WORD wColors[4];
+        BYTE ajBuffer[20];
+    } PackedDIB =
+    {
+        {sizeof(BITMAPINFOHEADER), 4, 4, 1, 8, BI_RLE8, 20, 1, 1, 4, 0},
+        {0, 1, 2, 7},
+        {4,0,   0,2,0,1,0,2,3,1,   2,1, 2,2,   1,3,1,0,1,2, },
+    };
+    HBRUSH hbr;
+
+    HDC hdc = CreateCompatibleDC(0);
+    HBITMAP hbmp = CreateDIBitmap(hdc, &PackedDIB.bmiHeader, CBM_INIT, &PackedDIB.ajBuffer, (PVOID)&PackedDIB, DIB_PAL_COLORS);
+    ok(hbmp != 0, "CreateDIBitmap failed, skipping tests.\n");
+
+    /* Create a DIB brush with palette indices */
+    hbr = CreateDIBPatternBrushPt(&PackedDIB, DIB_PAL_COLORS);
+    ok(hbr != 0, "CreateDIBPatternBrushPt failed, skipping tests.\n");
+    if (!hbr) return;
+
+
+}
+
 
 START_TEST(CreateDIBPatternBrush)
 {
@@ -142,5 +169,6 @@
 
     Test_CreateDIBPatternBrush();
     Test_CreateDIBPatternBrushPt();
+    Test_CreateDIBPatternBrushPt_RLE8();
 }
 

Modified: trunk/rostests/apitests/gdi32/CreateDIBitmap.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/gdi32/CreateDIBitmap.c?rev=56542&r1=56541&r2=56542&view=diff
==============================================================================
--- trunk/rostests/apitests/gdi32/CreateDIBitmap.c [iso-8859-1] (original)
+++ trunk/rostests/apitests/gdi32/CreateDIBitmap.c [iso-8859-1] Tue May  8 15:49:04 2012
@@ -8,6 +8,300 @@
 #include <stdio.h>
 #include <wine/test.h>
 #include <windows.h>
+#include "init.h"
+
+#define CBM_CREATDIB 2
+
+BOOL
+GetExpected(
+    DWORD *pdwError,
+    HDC hdc,
+    const BITMAPINFOHEADER *lpbmih,
+    DWORD fdwInit,
+    const VOID *lpbInit,
+    const BITMAPINFO *lpbmi,
+    UINT fuUsage)
+{
+    if (fuUsage > 2)
+    {
+        *pdwError = ERROR_INVALID_PARAMETER;
+        return FALSE;
+    }
+
+    if (fuUsage != 0)
+    {
+        if (hdc == (HDC)-1)
+        {
+            return FALSE;
+        }
+    }
+
+    if (fdwInit & CBM_INIT)
+    {
+        if (!lpbmih)
+        {
+            if (!lpbInit || (lpbInit == (PVOID)0xC0000000)) return FALSE;
+        }
+        else
+        {
+            if (lpbInit)
+            {
+                if (lpbInit == (PVOID)0xC0000000) return FALSE;
+                if (!lpbmi || (lpbmi == (PVOID)0xC0000000)) return FALSE;
+                if (lpbmi->bmiHeader.biSize == 0) return FALSE;
+                if (fuUsage == 2) return FALSE;
+            }
+        }
+    }
+
+
+    if (fdwInit & CBM_CREATDIB)
+    {
+        if (fuUsage == 2) return FALSE;
+        if ((fuUsage == DIB_PAL_COLORS) && !hdc)
+        {
+            return FALSE;
+        }
+
+        if ((fdwInit & CBM_INIT))
+        {
+            if (!lpbInit || (lpbInit == (PVOID)0xC0000000)) return FALSE;
+        }
+
+        if ((!lpbmi) || (lpbmi == (PVOID)0xc0000000) || (lpbmi->bmiHeader.biSize == 0))
+        {
+            return FALSE;
+        }
+
+        return TRUE;
+    }
+
+    if (lpbmih && (lpbmih != (PVOID)0xc0000000) && (lpbmih->biSize != 0))
+    {
+        if (hdc == (HDC)-1)
+        {
+            *pdwError = ERROR_INVALID_PARAMETER;
+            return FALSE;
+        }
+    }
+
+
+    if ((lpbmih == NULL) ||
+        (lpbmih == (PVOID)0xC0000000) ||
+        (lpbmih->biSize == 0))
+    {
+        return FALSE;
+    }
+
+    if (lpbmi == (PVOID)0xc0000000) return FALSE;
+
+
+    return TRUE;
+}
+
+
+void
+Test_CreateDIBitmap_Params(void)
+{
+    HBITMAP hbmp;
+    HDC hdc;
+    BITMAPINFO bmi =
+        {{sizeof(BITMAPINFOHEADER), 4, 4, 1, 8, BI_RGB, 0, 1, 1, 1, 0}, {{0,0,0,0}}};
+    BITMAPINFO bmiBroken =
+        {{0, -2, -4, 55, 42, 21, 0, 1, 1, 1, 0}, {{0,0,0,0}}};
+    BYTE ajBits[10];
+
+    hdc = CreateCompatibleDC(0);
+    ok(hdc != 0, "failed\n");
+
+    hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, ajBits, &bmi, DIB_PAL_COLORS);
+    ok(hbmp != 0, "\n");
+
+    hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, NULL, &bmi, DIB_PAL_COLORS);
+    ok(hbmp != 0, "\n");
+
+    hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, NULL, NULL, DIB_PAL_COLORS);
+    ok(hbmp != 0, "\n");
+
+    hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, 0, (PVOID)0xc0000000, &bmi, DIB_PAL_COLORS);
+    ok(hbmp != 0, "\n");
+
+    hbmp = CreateDIBitmap(NULL, &bmi.bmiHeader, CBM_INIT, NULL, &bmi, DIB_PAL_COLORS);
+    ok(hbmp != 0, "\n");
+
+    hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, NULL, &bmiBroken, DIB_PAL_COLORS);
+    ok(hbmp != 0, "\n");
+
+    hbmp = CreateDIBitmap(NULL, NULL, 2, NULL, &bmi, 0);
+    ok(hbmp != 0, "\n");
+
+    SetLastError(0xbadbad00);
+    hbmp = CreateDIBitmap(hdc, NULL, CBM_INIT, ajBits, &bmi, DIB_PAL_COLORS);
+    ok(hbmp == 0, "\n");
+    ok_err(ERROR_INVALID_PARAMETER);
+
+    SetLastError(0xbadbad00);
+    hbmp = CreateDIBitmap(hdc, NULL, CBM_INIT, NULL, &bmiBroken, DIB_PAL_COLORS);
+    ok(hbmp == 0, "\n");
+    ok_err(ERROR_INVALID_PARAMETER);
+
+    SetLastError(0xbadbad00);
+    hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, ajBits, &bmi, 2);
+    ok(hbmp == 0, "\n");
+    ok_err(ERROR_INVALID_PARAMETER);
+
+    SetLastError(0xbadbad00);
+    hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, ajBits, NULL, DIB_PAL_COLORS);
+    ok(hbmp == 0, "\n");
+    ok_err(0xbadbad00);
+
+    SetLastError(0xbadbad00);
+    hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, (PVOID)0xc0000000, &bmi, DIB_PAL_COLORS);
+    ok(hbmp == 0, "\n");
+    ok_err(0xbadbad00);
+
+    SetLastError(0xbadbad00);
+    _SEH2_TRY
+    {
+        hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, 0, ajBits, (PVOID)0xc0000000, DIB_PAL_COLORS);
+    }
+    _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+    {
+        hbmp = (HBITMAP)-1;
+    }
+    _SEH2_END;
+    ok(hbmp == (HBITMAP)-1, "\n");
+    ok_err(0xbadbad00);
+
+    SetLastError(0xbadbad00);
+    hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, NULL, NULL, 5);
+    ok(hbmp == 0, "\n");
+    ok_err(ERROR_INVALID_PARAMETER);
+
+    SetLastError(0xbadbad00);
+    hbmp = CreateDIBitmap((HDC)-1, &bmi.bmiHeader, CBM_INIT, NULL, &bmi, DIB_PAL_COLORS);
+    ok(hbmp == 0, "\n");
+    ok_err(0xbadbad00);
+
+    SetLastError(0xbadbad00);
+    hbmp = CreateDIBitmap(hdc, &bmiBroken.bmiHeader, CBM_INIT, NULL, &bmi, DIB_PAL_COLORS);
+    ok(hbmp == 0, "\n");
+    ok_err(ERROR_INVALID_PARAMETER);
+
+    if (1)
+    {
+        ULONG i1, i2, i3, i4, i5, i6;
+        HDC ahdc[3] = {0, hdc, (HDC)-1};
+        PBITMAPINFOHEADER apbih[4] = {NULL, &bmi.bmiHeader, &bmiBroken.bmiHeader, (PVOID)0xC0000000};
+        ULONG afInitf[12] = {0, 1, 2, 3, CBM_INIT, 4, 5, 6, 7, 8, 0x10, 0x20};
+        PVOID apvBits[3] = {NULL, ajBits, (PVOID)0xc0000000};
+        PBITMAPINFO apbmi[4] = {NULL, &bmi, &bmiBroken, (PVOID)0xC0000000};
+        ULONG aiUsage[5] = {0, 1, 2, 3, 23};
+        DWORD dwExpError;
+        BOOL bExpSuccess;
+
+        for (i1 = 0; i1 < 3; i1++)
+        {
+            for (i2 = 0; i2 < 4; i2++)
+            {
+                for (i3 = 0; i3 < 8; i3++)
+                {
+                    for (i4 = 0; i4 < 3; i4++)
+                    {
+                        for (i5 = 0; i5 < 4; i5++)
+                        {
+                            for (i6 = 0; i6 < 5; i6++)
+                            {
+                                SetLastError(0xbadbad00);
+                                dwExpError = 0xbadbad00;
+
+                                bExpSuccess = GetExpected(&dwExpError, ahdc[i1], apbih[i2], afInitf[i3], apvBits[i4], apbmi[i5], aiUsage[i6]);
+
+                                _SEH2_TRY
+                                {
+                                    hbmp = CreateDIBitmap(ahdc[i1], apbih[i2], afInitf[i3], apvBits[i4], apbmi[i5], aiUsage[i6]);
+                                }
+                                _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+                                {
+                                    hbmp = (HBITMAP)0;
+                                }
+                                _SEH2_END;
+
+                                if (bExpSuccess)
+                                {
+                                    ok(hbmp != 0, "Expected success for (%ld,%ld,%ld,%ld,%ld,%ld) CreateDIBitmap(%p, %p, 0x%lx, %p, %p, %ld)\n",
+                                       i1, i2, i3, i4, i5, i6,
+                                       ahdc[i1], apbih[i2], afInitf[i3], apvBits[i4], apbmi[i5], aiUsage[i6]);
+                                }
+                                else
+                                {
+                                    ok(hbmp == 0, "Expected failure for (%ld,%ld,%ld,%ld,%ld,%ld) CreateDIBitmap(%p, %p, 0x%lx, %p, %p, %ld)\n",
+                                       i1, i2, i3, i4, i5, i6,
+                                       ahdc[i1], apbih[i2], afInitf[i3], apvBits[i4], apbmi[i5], aiUsage[i6]);
+                                }
+
+                              //  ok(GetLastError() == dwExpError, "Expected error %ld got %ld for (%ld,%ld,%ld,%ld,%ld,%ld) CreateDIBitmap(%p, %p, 0x%lx, %p, %p, %ld)\n",
+                              //         dwExpError, GetLastError(), i1, i2, i3, i4, i5, i6,
+                              //         ahdc[i1], apbih[i2], afInitf[i3], apvBits[i4], apbmi[i5], aiUsage[i6]);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
+}
+
+void
+Test_CreateDIBitmap_DIB_PAL_COLORS(void)
+{
+    struct
+    {
+        BITMAPINFOHEADER bmiHeader;
+        WORD bmiColors[8];
+    } bmibuffer;
+    BITMAPINFO *pbmi = (PVOID)&bmibuffer;
+    HBITMAP hbmp;
+    ULONG bits[16] = {0};
+    HDC hdc;
+    HPALETTE hpalOld;
+    USHORT i;
+
+    hdc = CreateCompatibleDC(0);
+    ok(hdc != 0, "failed\n");
+
+    /* Select a palette */
+    hpalOld = SelectPalette(hdc, ghpal, FALSE);
+    ok(hpalOld != NULL, "error=%ld\n", GetLastError());
+
+    /* Initialize a BITMAPINFO */
+    pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+    pbmi->bmiHeader.biWidth = 2;
+    pbmi->bmiHeader.biHeight = -2;
+    pbmi->bmiHeader.biPlanes = 1;
+    pbmi->bmiHeader.biBitCount = 8;
+    pbmi->bmiHeader.biCompression = BI_RGB;
+    pbmi->bmiHeader.biSizeImage = 0;
+    pbmi->bmiHeader.biXPelsPerMeter = 1;
+    pbmi->bmiHeader.biYPelsPerMeter = 1;
+    pbmi->bmiHeader.biClrUsed = 8;
+    pbmi->bmiHeader.biClrImportant = 0;
+
+    for( i = 0; i < 8; i++ )
+    {
+        bmibuffer.bmiColors[i] = i;
+    }
+
+    /* Create the bitmap */
+    hbmp = CreateDIBitmap(hdc, &pbmi->bmiHeader, CBM_INIT, bits, pbmi, DIB_PAL_COLORS);
+    ok(hbmp != 0, "failed\n");
+
+    SelectObject(hdc, hbmp);
+
+
+}
 
 void
 Test_CreateDIBitmap1(void)
@@ -51,7 +345,8 @@
     bmi.bmiHeader.biCompression = BI_RLE8;
     bmi.bmiHeader.biBitCount = 8;
     bmi.bmiHeader.biSizeImage = 8;
-    hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, rlebits, &bmi, DIB_RGB_COLORS);
+    bmi.bmiHeader.biClrUsed = 1;
+    hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, rlebits, &bmi, DIB_PAL_COLORS);
     ok(hbmp != 0, "failed\n");
     ok(GetLastError() == 0, "GetLastError() == %ld\n", GetLastError());
 
@@ -68,10 +363,92 @@
 
 }
 
-
+void Test_CreateDIBitmap_RLE8()
+{
+    struct
+    {
+        BITMAPINFOHEADER bmiHeader;
+        WORD wColors[4];
+        BYTE ajBuffer[20];
+    } PackedDIB =
+    {
+        {sizeof(BITMAPINFOHEADER), 4, 4, 1, 8, BI_RLE8, 20, 1, 1, 4, 0},
+        {0, 1, 2, 7},
+        {4,0,   0,2,0,1,0,2,3,1,   2,1, 2,2,   1,3,1,0,1,2, },
+    };
+    HDC hdc;
+    HBITMAP hbmp;
+
+    hdc = CreateCompatibleDC(0);
+
+    SetLastError(0xbadbad00);
+    hbmp = CreateDIBitmap(hdc, &PackedDIB.bmiHeader, CBM_INIT, &PackedDIB.ajBuffer, (PVOID)&PackedDIB, DIB_PAL_COLORS);
+    ok(hbmp != 0, "CreateDIBitmap failed.\n");
+    ok_err(0xbadbad00);
+    DeleteObject(hbmp);
+
+    PackedDIB.bmiHeader.biSizeImage = 2;
+    hbmp = CreateDIBitmap(hdc, &PackedDIB.bmiHeader, CBM_INIT, &PackedDIB.ajBuffer, (PVOID)&PackedDIB, DIB_PAL_COLORS);
+    ok(hbmp != 0, "CreateDIBitmap failed.\n");
+    ok_err(0xbadbad00);
+    DeleteObject(hbmp);
+
+    PackedDIB.bmiHeader.biSizeImage = 1;
+    hbmp = CreateDIBitmap(hdc, &PackedDIB.bmiHeader, CBM_INIT, &PackedDIB.ajBuffer, (PVOID)&PackedDIB, DIB_PAL_COLORS);
+    ok(hbmp != 0, "CreateDIBitmap failed.\n");
+    ok_err(0xbadbad00);
+    DeleteObject(hbmp);
+
+    PackedDIB.bmiHeader.biSizeImage = 0;
+    hbmp = CreateDIBitmap(hdc, &PackedDIB.bmiHeader, CBM_INIT, &PackedDIB.ajBuffer, (PVOID)&PackedDIB, DIB_PAL_COLORS);
+    ok(hbmp == 0, "CreateDIBitmap succeeded, expeted failure\n");
+    ok_err(0xbadbad00);
+
+    /* Test a line that is too long */
+    PackedDIB.bmiHeader.biSizeImage = 20;
+    PackedDIB.ajBuffer[0] = 17;
+    hbmp = CreateDIBitmap(hdc, &PackedDIB.bmiHeader, CBM_INIT, &PackedDIB.ajBuffer, (PVOID)&PackedDIB, DIB_PAL_COLORS);
+    ok(hbmp != 0, "CreateDIBitmap failed\n");
+    ok_err(0xbadbad00);
+    DeleteObject(hbmp);
+
+
+}
+
+void
+Test_CreateDIBitmap_CBM_CREATDIB(void)
+{
+    HBITMAP hbmp;
+    HDC hdc;
+    BITMAPINFO bmi =
+        {{sizeof(BITMAPINFOHEADER), 4, 4, 1, 8, BI_RGB, 0, 1, 1, 1, 0}, {{0,0,0,0}}};
+    BYTE ajBits[10];
+    BITMAP bitmap;
+
+    hdc = CreateCompatibleDC(0);
+    ok(hdc != 0, "failed\n");
+
+    hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_CREATDIB, ajBits, &bmi, DIB_PAL_COLORS);
+    ok(hbmp != 0, "CreateDIBitmap failed.\n");
+
+    ok_long(GetObject(hbmp, sizeof(DIBSECTION), &bitmap), sizeof(BITMAP));
+    ok_int(bitmap.bmType, 0);
+    ok_int(bitmap.bmWidth, 4);
+    ok_int(bitmap.bmHeight, 4);
+    ok_int(bitmap.bmWidthBytes, 4);
+    ok_int(bitmap.bmPlanes, 1);
+    ok_int(bitmap.bmBitsPixel, 8);
+    ok_ptr(bitmap.bmBits, 0);
+
+}
 
 START_TEST(CreateDIBitmap)
 {
+    InitStuff();
+    Test_CreateDIBitmap_Params();
     Test_CreateDIBitmap1();
-}
-
+    Test_CreateDIBitmap_DIB_PAL_COLORS();
+    Test_CreateDIBitmap_RLE8();
+    Test_CreateDIBitmap_CBM_CREATDIB();
+}
+




More information about the Ros-diffs mailing list