Pedro Perdigão : user32/tests: Test an out-of-order RECT in RedrawWindow().

Alexandre Julliard julliard at winehq.org
Fri May 13 15:45:12 CDT 2022


Module: wine
Branch: master
Commit: 06b3471605dc1e7d1466774b745435ecef845be4
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=06b3471605dc1e7d1466774b745435ecef845be4

Author: Pedro Perdigão <pperdigao at codeweavers.com>
Date:   Fri May  6 17:56:28 2022 +0100

user32/tests: Test an out-of-order RECT in RedrawWindow().

Signed-off-by: Pedro Perdigão <pperdigao at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/tests/msg.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 62 insertions(+), 3 deletions(-)

diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index c0a74d8edbe..84833e8b1be 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -8174,8 +8174,9 @@ void dump_region(HRGN hrgn)
     HeapFree( GetProcessHeap(), 0, data );
 }
 
-#define check_update_rgn( hwnd, hrgn ) check_update_rgn_( __LINE__, hwnd, hrgn )
-static void check_update_rgn_( int line, HWND hwnd, HRGN hrgn )
+#define todo_check_update_rgn( hwnd, hrgn ) check_update_rgn_( __LINE__, TRUE, hwnd, hrgn )
+#define check_update_rgn( hwnd, hrgn ) check_update_rgn_( __LINE__, FALSE, hwnd, hrgn )
+static void check_update_rgn_( int line, BOOL todo, HWND hwnd, HRGN hrgn )
 {
     INT ret;
     RECT r1, r2;
@@ -8186,7 +8187,10 @@ static void check_update_rgn_( int line, HWND hwnd, HRGN hrgn )
     ok( ret != ERROR, "GetUpdateRgn failed\n" );
     if (ret == NULLREGION)
     {
-        ok_(__FILE__,line)( !hrgn, "Update region shouldn't be empty\n" );
+        if(todo)
+            todo_wine ok_(__FILE__,line)( !hrgn, "Update region shouldn't be empty\n" );
+        else
+            ok_(__FILE__,line)( !hrgn, "Update region shouldn't be empty\n" );
     }
     else
     {
@@ -8393,6 +8397,61 @@ static void test_paint_messages(void)
     ok(ret, "RedrawWindow returned %d instead of TRUE\n", ret);
     check_update_rgn( hwnd, 0 );
 
+    /* test a zeroed rectangle */
+    RedrawWindow( hwnd, NULL, 0, RDW_VALIDATE|RDW_NOFRAME|RDW_NOERASE );
+    SetRect( &rect, 0, 0, 0, 0 );
+    ret = RedrawWindow( hwnd, &rect, NULL, RDW_INVALIDATE );
+    ok(ret, "RedrawWindow returned %d instead of TRUE\n", ret);
+    check_update_rgn( hwnd, 0 );
+
+    /* a well ordered rectangle */
+    RedrawWindow( hwnd, NULL, 0, RDW_VALIDATE|RDW_NOFRAME|RDW_NOERASE );
+    SetRect( &rect, 10, 5, 17, 21 );
+    ret = RedrawWindow( hwnd, &rect, NULL, RDW_INVALIDATE );
+    ok(ret, "RedrawWindow returned %d instead of TRUE\n", ret);
+    SetRectRgn( hrgn, 10, 5, 17, 21 );
+    check_update_rgn( hwnd, hrgn );
+
+    /* empty rectangle, top and bottom are swapped but left and right have
+       the same value */
+    RedrawWindow( hwnd, NULL, 0, RDW_VALIDATE|RDW_NOFRAME|RDW_NOERASE );
+    SetRect( &rect, 5, 30, 5, 10 );
+    ret = RedrawWindow( hwnd, &rect, NULL, RDW_INVALIDATE );
+    ok(ret, "RedrawWindow returned %d instead of TRUE\n", ret);
+    check_update_rgn( hwnd, 0 );
+
+    /* empty rectangle, left and right are swapped but top and bottom have
+       the same value */
+    RedrawWindow( hwnd, NULL, 0, RDW_VALIDATE|RDW_NOFRAME|RDW_NOERASE );
+    SetRect( &rect, 17, 10, 5, 10 );
+    ret = RedrawWindow( hwnd, &rect, NULL, RDW_INVALIDATE );
+    ok(ret, "RedrawWindow returned %d instead of TRUE\n", ret);
+    check_update_rgn( hwnd, 0 );
+
+    /* Left and right are swapped */
+    RedrawWindow( hwnd, NULL, 0, RDW_VALIDATE|RDW_NOFRAME|RDW_NOERASE );
+    SetRect( &rect, 21, 12, 7, 30 );
+    ret = RedrawWindow( hwnd, &rect, NULL, RDW_INVALIDATE );
+    ok(ret, "RedrawWindow returned %d instead of TRUE\n", ret);
+    SetRectRgn( hrgn, 7, 12, 21, 30 );
+    todo_check_update_rgn( hwnd, hrgn );
+
+    /* Top and bottom are swapped */
+    RedrawWindow( hwnd, NULL, 0, RDW_VALIDATE|RDW_NOFRAME|RDW_NOERASE );
+    SetRect( &rect, 7, 30, 21, 12 );
+    ret = RedrawWindow( hwnd, &rect, NULL, RDW_INVALIDATE );
+    ok(ret, "RedrawWindow returned %d instead of TRUE\n", ret);
+    SetRectRgn( hrgn, 7, 12, 21, 30 );
+    todo_check_update_rgn( hwnd, hrgn );
+
+    /* both reference points are swapped */
+    RedrawWindow( hwnd, NULL, 0, RDW_VALIDATE|RDW_NOFRAME|RDW_NOERASE );
+    SetRect( &rect, 21, 30, 7, 12 );
+    ret = RedrawWindow( hwnd, &rect, NULL, RDW_INVALIDATE );
+    ok(ret, "RedrawWindow returned %d instead of TRUE\n", ret);
+    SetRectRgn( hrgn, 7, 12, 21, 30 );
+    todo_check_update_rgn( hwnd, hrgn );
+
     /* flush pending messages */
     flush_events();
     flush_sequence();




More information about the wine-cvs mailing list