Module: wine Branch: master Commit: 57e2b75c02f905d2118c089975e35857f67b9ab3 URL: http://source.winehq.org/git/wine.git/?a=commit;h=57e2b75c02f905d2118c089975...
Author: Alexandre Julliard julliard@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@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] );