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/CreateDIBPa... ============================================================================== --- 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/CreateDIBit... ============================================================================== --- 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(); +} +