gdi32/tests: Add tests for 1 bpp dibs.

This commit is contained in:
Huw Davies 2011-06-15 13:43:50 +01:00 committed by Alexandre Julliard
parent b0f59c3b11
commit f2e9545b86

View file

@ -277,6 +277,41 @@ static const char *sha1_graphics_4[] =
NULL
};
static const char *sha1_graphics_1[] =
{
"23366004515f3bc46796ea505d748f8d0f97fbe1",
"ad674a4104c6a1eacaee8f20effdfe31775b4409",
"a7cc69f957d7b533a0a330859a143d701daac73c",
"a955bf088c5edb129289ce65caace48ec95632e4",
"5316d3c558c254479883133cf58cd07ab521d3f0",
"fcbfdb5d60716ea05f2d1896fae7a6e7a8249d35",
"2c140b39cc8d21358fded8959cd655f03d7f0f89",
"121423a38b4ac4743bd516e0a7e88a3863796313",
"7c17635c6c7f62dbf8fd4773d0c503358553d2c7",
"21d5d9e47bb07de2cf7bc99b7725390d03a6cde6",
"f69ee65ea25676429a28eea79b5b9cb9206b8d01",
"39ff81f77ef4ee772367ed1a63785987c060126e",
"4c686508a994ca4c7a0a73b8c0fe52423c180d9c",
"b0cc1f5e244ae0c0835a9866a46abdfcd56d1cb1",
"7ddf19df5bbdf4475b6ec1bc042425e382502864",
"144c9a846e5e37ac6efd5ed3a97ec231479e8fca",
"c5ffc59048bf786b5646ad6226cd8633965de9ef",
"400a21caa01e015096ee1afcf1b54e7f8ec515bd",
"0ff4b49797e30e3555aab45219adf449a9a560ff",
"144c9a846e5e37ac6efd5ed3a97ec231479e8fca",
"b85463875f755b85f1464b1b6275912bcbad6c9f",
"a4964d8bbf80fe785f906bc0f7c5b113242a58fc",
"a5d204cc7342d40b765ca042f8668e22601c4ff9",
"adb2818f6d3845dd140bc0f9abdbaa89d2a8c3de",
"0a76e0121facb103857130bc6e12185ad77fc3fa",
"13cc63972aee4f6ae27091a8af18de01f1d3a5da",
"3bb745ccb08402ce6fac6ee26fb8d7aad2dba27e",
"d1e6091caa4482d3142df3b958606c41ebf4698e",
"07c1116d8286fb665a1005de220eadc3d5999aaf",
"4afb0649488f6e6f7d3a2b8bf438d82f2c88f4d1",
NULL
};
static inline DWORD get_stride(BITMAPINFO *bmi)
{
return ((bmi->bmiHeader.biBitCount * bmi->bmiHeader.biWidth + 31) >> 3) & ~3;
@ -321,9 +356,11 @@ static char *hash_dib(BITMAPINFO *bmi, void *bits)
return buf;
}
static void compare_hash(BITMAPINFO *bmi, BYTE *bits, const char ***sha1, const char *info)
static void compare_hash_broken_todo(BITMAPINFO *bmi, BYTE *bits, const char ***sha1, const char *info, int num_broken, BOOL todo)
{
char *hash = hash_dib(bmi, bits);
BOOL ok_cond;
int i;
if(!hash)
{
@ -331,17 +368,37 @@ static void compare_hash(BITMAPINFO *bmi, BYTE *bits, const char ***sha1, const
return;
}
if(**sha1)
for(i = 0; i <= num_broken; i++)
{
ok(!strcmp(hash, **sha1), "%d: %s: expected hash %s got %s\n",
bmi->bmiHeader.biBitCount, info, **sha1, hash);
(*sha1)++;
if((*sha1)[i] == NULL)
{
ok((*sha1)[i] != NULL, "missing hash, got \"%s\",\n", hash);
return;
}
}
else ok(**sha1 != NULL, "missing hash, got \"%s\",\n", hash);
ok_cond = !strcmp(hash, **sha1);
for(i = 1; i <= num_broken; i++)
ok_cond = ok_cond || broken( !strcmp(hash, (*sha1)[i]) );
if(todo)
todo_wine ok( ok_cond, "%d: %s: expected hash %s got %s\n",
bmi->bmiHeader.biBitCount, info, **sha1, hash );
else
ok( ok_cond, "%d: %s: expected hash %s got %s\n",
bmi->bmiHeader.biBitCount, info, **sha1, hash );
*sha1 += num_broken + 1;
HeapFree(GetProcessHeap(), 0, hash);
}
static void compare_hash(BITMAPINFO *bmi, BYTE *bits, const char ***sha1, const char *info)
{
compare_hash_broken_todo(bmi, bits, sha1, info, 0, FALSE);
}
static const RECT bias_check[] =
{
{100, 100, 200, 150},
@ -458,6 +515,7 @@ static void draw_graphics(HDC hdc, BITMAPINFO *bmi, BYTE *bits, const char ***sh
BYTE dib_brush_buf[sizeof(BITMAPINFO) + 256 * sizeof(RGBQUAD) + 16 * 16 * sizeof(DWORD)]; /* Enough for 16 x 16 at 32 bpp */
BITMAPINFO *brush_bi = (BITMAPINFO*)dib_brush_buf;
BYTE *brush_bits;
BOOL dib_is_1bpp = (bmi->bmiHeader.biBitCount == 1);
memset(bits, 0xcc, dib_size);
compare_hash(bmi, bits, sha1, "empty");
@ -654,7 +712,7 @@ static void draw_graphics(HDC hdc, BITMAPINFO *bmi, BYTE *bits, const char ***sh
y += 25;
}
}
compare_hash(bmi, bits, sha1, "top-down 8888 dib brush patblt");
compare_hash_broken_todo(bmi, bits, sha1, "top-down 8888 dib brush patblt", dib_is_1bpp ? 1 : 0, dib_is_1bpp);
memset(bits, 0xcc, dib_size);
SelectObject(hdc, orig_brush);
@ -684,7 +742,7 @@ static void draw_graphics(HDC hdc, BITMAPINFO *bmi, BYTE *bits, const char ***sh
y += 25;
}
}
compare_hash(bmi, bits, sha1, "bottom-up 8888 dib brush patblt");
compare_hash_broken_todo(bmi, bits, sha1, "bottom-up 8888 dib brush patblt", dib_is_1bpp ? 1 : 0, dib_is_1bpp);
memset(bits, 0xcc, dib_size);
/* 24 bpp dib pattern brush */
@ -711,7 +769,7 @@ static void draw_graphics(HDC hdc, BITMAPINFO *bmi, BYTE *bits, const char ***sh
y += 25;
}
}
compare_hash(bmi, bits, sha1, "top-down 24 bpp brush patblt");
compare_hash_broken_todo(bmi, bits, sha1, "top-down 24 bpp brush patblt", dib_is_1bpp ? 1 : 0, dib_is_1bpp);
memset(bits, 0xcc, dib_size);
SelectObject(hdc, orig_brush);
@ -741,7 +799,7 @@ static void draw_graphics(HDC hdc, BITMAPINFO *bmi, BYTE *bits, const char ***sh
y += 25;
}
}
compare_hash(bmi, bits, sha1, "top-down 555 dib brush patblt");
compare_hash_broken_todo(bmi, bits, sha1, "top-down 555 dib brush patblt", dib_is_1bpp ? 1 : 0, dib_is_1bpp);
memset(bits, 0xcc, dib_size);
SelectObject(hdc, orig_brush);
@ -781,7 +839,7 @@ static void draw_graphics(HDC hdc, BITMAPINFO *bmi, BYTE *bits, const char ***sh
y += 25;
}
}
compare_hash(bmi, bits, sha1, "top-down 8 bpp dib brush patblt");
compare_hash_broken_todo(bmi, bits, sha1, "top-down 8 bpp dib brush patblt", dib_is_1bpp ? 1 : 0, dib_is_1bpp);
memset(bits, 0xcc, dib_size);
SelectObject(hdc, orig_brush);
@ -806,7 +864,7 @@ static void draw_graphics(HDC hdc, BITMAPINFO *bmi, BYTE *bits, const char ***sh
y += 25;
}
}
compare_hash(bmi, bits, sha1, "top-down 4 bpp dib brush patblt");
compare_hash_broken_todo(bmi, bits, sha1, "top-down 4 bpp dib brush patblt", dib_is_1bpp ? 1 : 0, dib_is_1bpp);
memset(bits, 0xcc, dib_size);
SelectObject(hdc, orig_brush);
@ -1062,6 +1120,29 @@ todo_wine
SelectObject(mem_dc, orig_bm);
DeleteObject(dib);
/* 1 */
trace("1\n");
bmi->bmiHeader.biBitCount = 1;
bmi->bmiHeader.biClrUsed = 2;
bmi->bmiColors[0].rgbRed = 0x00;
bmi->bmiColors[0].rgbGreen = 0x01;
bmi->bmiColors[0].rgbBlue = 0xff;
bmi->bmiColors[1].rgbRed = 0xff;
bmi->bmiColors[1].rgbGreen = 0x00;
bmi->bmiColors[1].rgbBlue = 0x00;
dib = CreateDIBSection(0, bmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0);
ok(dib != NULL, "ret NULL\n");
orig_bm = SelectObject(mem_dc, dib);
sha1 = sha1_graphics_1;
draw_graphics(mem_dc, bmi, bits, &sha1);
SelectObject(mem_dc, orig_bm);
DeleteObject(dib);
DeleteDC(mem_dc);
}