user32/tests: Expand the DCX_NORESETATTR test to make sure we check the correct DC.

This commit is contained in:
Alexandre Julliard 2010-06-17 12:56:25 +02:00
parent d47628739e
commit d8867fa718
1 changed files with 53 additions and 18 deletions

View File

@ -40,7 +40,8 @@ static HWND hwnd_cache, hwnd_owndc, hwnd_classdc, hwnd_classdc2;
static void test_dc_attributes(void)
{
HDC hdc, old_hdc;
INT rop, def_rop;
HDC hdcs[20];
INT i, rop, def_rop, found_dc;
/* test cache DC */
@ -57,26 +58,60 @@ static void test_dc_attributes(void)
ok( rop == def_rop, "wrong ROP2 %d after release\n", rop );
SetROP2( hdc, R2_WHITE );
ReleaseDC( hwnd_cache, hdc );
old_hdc = hdc;
hdc = GetDCEx( hwnd_cache, 0, DCX_USESTYLE | DCX_NORESETATTRS );
found_dc = 0;
for (i = 0; i < 20; i++)
{
hdc = hdcs[i] = GetDCEx( hwnd_cache, 0, DCX_USESTYLE | DCX_NORESETATTRS );
if (!hdc) break;
rop = GetROP2( hdc );
/* Win9x seems to silently ignore DCX_NORESETATTRS */
ok( rop == def_rop || rop == R2_WHITE, "wrong ROP2 %d\n", rop );
if (hdc == old_hdc)
todo_wine ok( rop == def_rop, "wrong ROP2 %d after release %p/%p\n", rop, old_hdc, hdc );
else
ok( rop == def_rop, "wrong ROP2 %d after release %p/%p\n", rop, old_hdc, hdc );
if (hdc == old_hdc)
{
found_dc = 1;
SetROP2( hdc, R2_WHITE );
rop = GetROP2( hdc );
ok( rop == R2_WHITE, "wrong ROP2 %d\n", rop );
}
}
if (!found_dc)
{
trace( "hdc %p not found in cache using %p\n", old_hdc, hdcs[0] );
old_hdc = hdcs[0];
SetROP2( old_hdc, R2_WHITE );
}
while (i >= 0) ReleaseDC( hwnd_cache, hdcs[--i] );
ReleaseDC( hwnd_cache, hdc );
hdc = GetDCEx( hwnd_cache, 0, DCX_USESTYLE | DCX_NORESETATTRS );
for (i = 0; i < 20; i++)
{
hdc = hdcs[i] = GetDCEx( hwnd_cache, 0, DCX_USESTYLE | DCX_NORESETATTRS );
if (!hdc) break;
rop = GetROP2( hdc );
ok( rop == def_rop || rop == R2_WHITE, "wrong ROP2 %d after release\n", rop );
ReleaseDC( hwnd_cache, hdc );
if (hdc == old_hdc)
ok( rop == R2_WHITE || broken( rop == def_rop), /* win9x doesn't support DCX_NORESETATTRS */
"wrong ROP2 %d after release %p/%p\n", rop, old_hdc, hdc );
else
ok( rop == def_rop, "wrong ROP2 %d after release %p/%p\n", rop, old_hdc, hdc );
}
while (i >= 0) ReleaseDC( hwnd_cache, hdcs[--i] );
hdc = GetDCEx( hwnd_cache, 0, DCX_USESTYLE );
for (i = 0; i < 20; i++)
{
hdc = hdcs[i] = GetDCEx( hwnd_cache, 0, DCX_USESTYLE );
if (!hdc) break;
rop = GetROP2( hdc );
ok( rop == def_rop, "wrong ROP2 %d after release\n", rop );
ReleaseDC( hwnd_cache, hdc );
if (hdc == old_hdc)
{
todo_wine ok( rop == R2_WHITE || broken( rop == def_rop),
"wrong ROP2 %d after release %p/%p\n", rop, old_hdc, hdc );
SetROP2( old_hdc, def_rop );
}
else
ok( rop == def_rop, "wrong ROP2 %d after release %p/%p\n", rop, old_hdc, hdc );
}
while (i >= 0) ReleaseDC( hwnd_cache, hdcs[--i] );
/* test own DC */