Module: wine Branch: master Commit: d8867fa7180a64ed5a1f366e1564e03f9a0d73bb URL: http://source.winehq.org/git/wine.git/?a=commit;h=d8867fa7180a64ed5a1f366e15...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Jun 17 12:56:25 2010 +0200
user32/tests: Expand the DCX_NORESETATTR test to make sure we check the correct DC.
---
dlls/user32/tests/dce.c | 75 ++++++++++++++++++++++++++++++++++------------ 1 files changed, 55 insertions(+), 20 deletions(-)
diff --git a/dlls/user32/tests/dce.c b/dlls/user32/tests/dce.c index 31c6ec0..cfa07e5 100644 --- a/dlls/user32/tests/dce.c +++ b/dlls/user32/tests/dce.c @@ -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 ); - rop = GetROP2( hdc ); - /* Win9x seems to silently ignore DCX_NORESETATTRS */ - ok( rop == def_rop || rop == R2_WHITE, "wrong ROP2 %d\n", rop ); - - SetROP2( hdc, R2_WHITE ); - rop = GetROP2( hdc ); - ok( rop == R2_WHITE, "wrong ROP2 %d\n", rop ); - - ReleaseDC( hwnd_cache, hdc ); - hdc = GetDCEx( hwnd_cache, 0, DCX_USESTYLE | DCX_NORESETATTRS ); - rop = GetROP2( hdc ); - ok( rop == def_rop || rop == R2_WHITE, "wrong ROP2 %d after release\n", rop ); - ReleaseDC( hwnd_cache, hdc ); - - hdc = GetDCEx( hwnd_cache, 0, DCX_USESTYLE ); - rop = GetROP2( hdc ); - ok( rop == def_rop, "wrong ROP2 %d after release\n", rop ); - ReleaseDC( hwnd_cache, hdc ); + 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 ); + 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 ); + } + } + 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] ); + + for (i = 0; i < 20; i++) + { + hdc = hdcs[i] = GetDCEx( hwnd_cache, 0, DCX_USESTYLE | DCX_NORESETATTRS ); + if (!hdc) break; + rop = GetROP2( 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] ); + + for (i = 0; i < 20; i++) + { + hdc = hdcs[i] = GetDCEx( hwnd_cache, 0, DCX_USESTYLE ); + if (!hdc) break; + rop = GetROP2( 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 */