Alexandre Julliard : user32/tests: Add some tests for inter-process clipboard viewer notifications.

Alexandre Julliard julliard at winehq.org
Thu Aug 25 10:39:37 CDT 2016


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Aug 25 21:32:00 2016 +0900

user32/tests: Add some tests for inter-process clipboard viewer notifications.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/tests/clipboard.c | 144 +++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 142 insertions(+), 2 deletions(-)

diff --git a/dlls/user32/tests/clipboard.c b/dlls/user32/tests/clipboard.c
index b6914da..d162e33 100644
--- a/dlls/user32/tests/clipboard.c
+++ b/dlls/user32/tests/clipboard.c
@@ -113,6 +113,22 @@ static void set_clipboard_data_process( int arg )
     }
 }
 
+static void grab_clipboard_process( int arg )
+{
+    BOOL ret;
+
+    SetLastError( 0xdeadbeef );
+    ret = OpenClipboard( 0 );
+    ok( ret, "OpenClipboard failed\n" );
+    ret = EmptyClipboard();
+    ok( ret, "EmptyClipboard failed\n" );
+    if (arg)
+    {
+        HANDLE ret = SetClipboardData( CF_WAVE, GlobalAlloc( GMEM_DDESHARE | GMEM_ZEROINIT, 100 ));
+        ok( ret != 0, "process %u: SetClipboardData failed err %u\n", arg, GetLastError() );
+    }
+}
+
 static void run_thread( LPTHREAD_START_ROUTINE func, void *arg, int line )
 {
     DWORD ret;
@@ -733,11 +749,10 @@ static DWORD WINAPI clipboard_thread(void *param)
     ok( !count, "WM_DRAWCLIPBOARD received\n" );
     count = SendMessageA( win, WM_USER+2, 0, 0 );
     ok( !count, "WM_CLIPBOARDUPDATE received\n" );
-
-    formats = CountClipboardFormats();
     count = SendMessageA( win, WM_USER+3, 0, 0 );
     ok( !count, "WM_DESTROYCLIPBOARD received\n" );
 
+    formats = CountClipboardFormats();
     r = OpenClipboard(0);
     ok(r, "OpenClipboard failed: %d\n", GetLastError());
     r = EmptyClipboard();
@@ -745,11 +760,131 @@ static DWORD WINAPI clipboard_thread(void *param)
     r = CloseClipboard();
     ok(r, "CloseClipboard failed: %d\n", GetLastError());
 
+    count = SendMessageA( win, WM_USER+1, 0, 0 );
+    ok( count, "WM_DRAWCLIPBOARD not received\n" );
+    count = SendMessageA( win, WM_USER+2, 0, 0 );
+    todo_wine ok( count || broken(!pAddClipboardFormatListener), "WM_CLIPBOARDUPDATE not received\n" );
     count = SendMessageA( win, WM_USER+3, 0, 0 );
     ok( count, "WM_DESTROYCLIPBOARD not received\n" );
     count = SendMessageA( win, WM_USER+4, 0, 0 );
     ok( count == formats, "wrong format count %u on WM_DESTROYCLIPBOARD\n", count );
 
+    r = OpenClipboard(win);
+    ok(r, "OpenClipboard failed: %d\n", GetLastError());
+    SetClipboardData( CF_WAVE, GlobalAlloc( GMEM_FIXED, 1 ));
+    if (pGetClipboardSequenceNumber)
+    {
+        seq = pGetClipboardSequenceNumber();
+        ok( (int)(seq - old_seq) > 0, "sequence unchanged\n" );
+        old_seq = seq;
+    }
+    count = SendMessageA( win, WM_USER+2, 0, 0 );
+    ok( !count, "WM_CLIPBOARDUPDATE received\n" );
+    count = SendMessageA( win, WM_USER+3, 0, 0 );
+    ok( !count, "WM_DESTROYCLIPBOARD received\n" );
+
+    EnterCriticalSection(&clipboard_cs);
+    r = CloseClipboard();
+    ok(r, "CloseClipboard failed: %d\n", GetLastError());
+    LeaveCriticalSection(&clipboard_cs);
+
+    if (pGetClipboardSequenceNumber)
+    {
+        seq = pGetClipboardSequenceNumber();
+        todo_wine ok( seq == old_seq, "sequence changed\n" );
+        old_seq = seq;
+    }
+    count = SendMessageA( win, WM_USER+1, 0, 0 );
+    ok( count, "WM_DRAWCLIPBOARD not received\n" );
+    count = SendMessageA( win, WM_USER+2, 0, 0 );
+    todo_wine ok( count || broken(!pAddClipboardFormatListener), "WM_CLIPBOARDUPDATE not received\n" );
+
+    run_process( "grab_clipboard 0" );
+
+    if (pGetClipboardSequenceNumber)
+    {
+        seq = pGetClipboardSequenceNumber();
+        ok( (int)(seq - old_seq) > 0, "sequence unchanged\n" );
+        old_seq = seq;
+    }
+    count = SendMessageA( win, WM_USER+1, 0, 0 );
+    todo_wine ok( count, "WM_DRAWCLIPBOARD not received\n" );
+    count = SendMessageA( win, WM_USER+2, 0, 0 );
+    todo_wine ok( count || broken(!pAddClipboardFormatListener), "WM_CLIPBOARDUPDATE not received\n" );
+
+    r = OpenClipboard(0);
+    ok(r, "OpenClipboard failed: %d\n", GetLastError());
+    SetClipboardData( CF_WAVE, GlobalAlloc( GMEM_FIXED, 1 ));
+    if (pGetClipboardSequenceNumber)
+    {
+        seq = pGetClipboardSequenceNumber();
+        todo_wine ok( (int)(seq - old_seq) > 0, "sequence unchanged\n" );
+        old_seq = seq;
+    }
+    count = SendMessageA( win, WM_USER+1, 0, 0 );
+    ok( !count, "WM_DRAWCLIPBOARD received\n" );
+    count = SendMessageA( win, WM_USER+2, 0, 0 );
+    ok( !count, "WM_CLIPBOARDUPDATE received\n" );
+
+    EnterCriticalSection(&clipboard_cs);
+    r = CloseClipboard();
+    ok(r, "CloseClipboard failed: %d\n", GetLastError());
+    LeaveCriticalSection(&clipboard_cs);
+
+    if (pGetClipboardSequenceNumber)
+    {
+        seq = pGetClipboardSequenceNumber();
+        todo_wine ok( seq == old_seq, "sequence changed\n" );
+        old_seq = seq;
+    }
+    count = SendMessageA( win, WM_USER+1, 0, 0 );
+    todo_wine ok( count, "WM_DRAWCLIPBOARD not received\n" );
+    count = SendMessageA( win, WM_USER+2, 0, 0 );
+    todo_wine ok( count || broken(!pAddClipboardFormatListener), "WM_CLIPBOARDUPDATE not received\n" );
+
+    run_process( "grab_clipboard 1" );
+
+    if (pGetClipboardSequenceNumber)
+    {
+        seq = pGetClipboardSequenceNumber();
+        ok( (int)(seq - old_seq) > 0, "sequence unchanged\n" );
+        old_seq = seq;
+    }
+    count = SendMessageA( win, WM_USER+1, 0, 0 );
+    todo_wine ok( count, "WM_DRAWCLIPBOARD not received\n" );
+    count = SendMessageA( win, WM_USER+2, 0, 0 );
+    todo_wine ok( count || broken(!pAddClipboardFormatListener), "WM_CLIPBOARDUPDATE not received\n" );
+
+    r = OpenClipboard(0);
+    ok(r, "OpenClipboard failed: %d\n", GetLastError());
+    SetClipboardData( CF_WAVE, GlobalAlloc( GMEM_FIXED, 1 ));
+    if (pGetClipboardSequenceNumber)
+    {
+        seq = pGetClipboardSequenceNumber();
+        todo_wine ok( (int)(seq - old_seq) > 0, "sequence unchanged\n" );
+        old_seq = seq;
+    }
+    count = SendMessageA( win, WM_USER+1, 0, 0 );
+    ok( !count, "WM_DRAWCLIPBOARD received\n" );
+    count = SendMessageA( win, WM_USER+2, 0, 0 );
+    ok( !count, "WM_CLIPBOARDUPDATE received\n" );
+
+    EnterCriticalSection(&clipboard_cs);
+    r = CloseClipboard();
+    ok(r, "CloseClipboard failed: %d\n", GetLastError());
+    LeaveCriticalSection(&clipboard_cs);
+
+    if (pGetClipboardSequenceNumber)
+    {
+        seq = pGetClipboardSequenceNumber();
+        todo_wine ok( seq == old_seq, "sequence changed\n" );
+        old_seq = seq;
+    }
+    count = SendMessageA( win, WM_USER+1, 0, 0 );
+    todo_wine ok( count, "WM_DRAWCLIPBOARD not received\n" );
+    count = SendMessageA( win, WM_USER+2, 0, 0 );
+    todo_wine ok( count || broken(!pAddClipboardFormatListener), "WM_CLIPBOARDUPDATE not received\n" );
+
     r = PostMessageA(win, WM_USER, 0, 0);
     ok(r, "PostMessage failed: %d\n", GetLastError());
     return 0;
@@ -1110,6 +1245,11 @@ START_TEST(clipboard)
         set_clipboard_data_process( atoi( argv[3] ));
         return;
     }
+    if (argc == 4 && !strcmp( argv[2], "grab_clipboard" ))
+    {
+        grab_clipboard_process( atoi( argv[3] ));
+        return;
+    }
     if (argc == 4 && !strcmp( argv[2], "handles" ))
     {
         test_handles_process( argv[3] );




More information about the wine-cvs mailing list