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

Alexandre Julliard julliard at winehq.org
Thu Jun 17 11:17:16 CDT 2010


Module: wine
Branch: master
Commit: d8867fa7180a64ed5a1f366e1564e03f9a0d73bb
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d8867fa7180a64ed5a1f366e1564e03f9a0d73bb

Author: Alexandre Julliard <julliard at 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 */
 




More information about the wine-cvs mailing list