Alexandre Julliard : user32/tests: Add some tests for the contents of the clipboard data.
Alexandre Julliard
julliard at winehq.org
Thu Sep 15 10:42:48 CDT 2016
Module: wine
Branch: master
Commit: 08aa64e38ea06d95f6997ac9ab66e6abb276fc57
URL: http://source.winehq.org/git/wine.git/?a=commit;h=08aa64e38ea06d95f6997ac9ab66e6abb276fc57
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Sep 15 16:39:52 2016 +0900
user32/tests: Add some tests for the contents of the clipboard data.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/user32/tests/clipboard.c | 107 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 105 insertions(+), 2 deletions(-)
diff --git a/dlls/user32/tests/clipboard.c b/dlls/user32/tests/clipboard.c
index 61b0d2c..9f54818 100644
--- a/dlls/user32/tests/clipboard.c
+++ b/dlls/user32/tests/clipboard.c
@@ -1600,7 +1600,7 @@ static BOOL is_freed( HANDLE handle )
static UINT format_id;
static HBITMAP bitmap, bitmap2;
static HPALETTE palette;
-static const LOGPALETTE logpalette = { 0x300, 1 };
+static const LOGPALETTE logpalette = { 0x300, 1, {{ 0x12, 0x34, 0x56, 0x78 }}};
static void test_handles( HWND hwnd )
{
@@ -1609,6 +1609,7 @@ static void test_handles( HWND hwnd )
UINT format_id2 = RegisterClipboardFormatA( "another format" );
BOOL r;
HANDLE data;
+ HBITMAP bitmap_temp;
DWORD process;
BOOL is_owner = (GetWindowThreadProcessId( hwnd, &process ) && process == GetCurrentProcessId());
@@ -1648,9 +1649,14 @@ static void test_handles( HWND hwnd )
h = SetClipboardData( format_id, htext2 );
ok( h == htext2, "got %p\n", h );
ok( is_moveable( h ), "expected moveable mem %p\n", h );
+ bitmap_temp = CreateBitmap( 10, 10, 1, 1, NULL );
+ h = SetClipboardData( CF_BITMAP, bitmap_temp );
+ ok( h == bitmap_temp, "got %p\n", h );
+ ok( GetObjectType( h ) == OBJ_BITMAP, "expected bitmap %p\n", h );
h = SetClipboardData( CF_BITMAP, bitmap );
ok( h == bitmap, "got %p\n", h );
ok( GetObjectType( h ) == OBJ_BITMAP, "expected bitmap %p\n", h );
+ ok( !GetObjectType( bitmap_temp ), "expected free object %p\n", bitmap_temp );
h = SetClipboardData( CF_DSPBITMAP, bitmap2 );
ok( h == bitmap2, "got %p\n", h );
ok( GetObjectType( h ) == OBJ_BITMAP, "expected bitmap %p\n", h );
@@ -1923,6 +1929,9 @@ static void test_handles_process( const char *str )
BOOL r;
HANDLE h;
char *ptr;
+ BITMAP bm;
+ PALETTEENTRY entry;
+ BYTE buffer[1024];
format_id = RegisterClipboardFormatA( "my_cool_clipboard_format" );
r = OpenClipboard( 0 );
@@ -1951,13 +1960,44 @@ static void test_handles_process( const char *str )
trace( "private %p\n", h );
h = GetClipboardData( CF_BITMAP );
todo_wine ok( GetObjectType( h ) == OBJ_BITMAP, "expected bitmap %p\n", h );
+ todo_wine ok( GetObjectW( h, sizeof(bm), &bm ) == sizeof(bm), "GetObject %p failed\n", h );
+ todo_wine ok( bm.bmWidth == 13 && bm.bmHeight == 17, "wrong bitmap %ux%u\n", bm.bmWidth, bm.bmHeight );
trace( "bitmap %p\n", h );
h = GetClipboardData( CF_DSPBITMAP );
ok( !GetObjectType( h ), "expected invalid object %p\n", h );
trace( "bitmap2 %p\n", h );
h = GetClipboardData( CF_PALETTE );
todo_wine ok( GetObjectType( h ) == OBJ_PAL, "expected palette %p\n", h );
+ todo_wine ok( GetPaletteEntries( h, 0, 1, &entry ) == 1, "GetPaletteEntries %p failed\n", h );
+ todo_wine ok( entry.peRed == 0x12 && entry.peGreen == 0x34 && entry.peBlue == 0x56,
+ "wrong color %02x,%02x,%02x\n", entry.peRed, entry.peGreen, entry.peBlue );
trace( "palette %p\n", h );
+ h = GetClipboardData( CF_METAFILEPICT );
+ todo_wine ok( is_fixed( h ), "expected fixed mem %p\n", h );
+ if (h)
+ ok( GetObjectType( ((METAFILEPICT *)h)->hMF ) == OBJ_METAFILE,
+ "wrong object %p\n", ((METAFILEPICT *)h)->hMF );
+ trace( "metafile %p\n", h );
+ h = GetClipboardData( CF_DSPMETAFILEPICT );
+ todo_wine ok( is_fixed( h ), "expected fixed mem %p\n", h );
+ if (h)
+ ok( GetObjectType( ((METAFILEPICT *)h)->hMF ) == OBJ_METAFILE,
+ "wrong object %p\n", ((METAFILEPICT *)h)->hMF );
+ trace( "metafile2 %p\n", h );
+ h = GetClipboardData( CF_ENHMETAFILE );
+ todo_wine ok( GetObjectType( h ) == OBJ_ENHMETAFILE, "expected enhmetafile %p\n", h );
+ todo_wine ok( GetEnhMetaFileBits( h, sizeof(buffer), buffer ) > sizeof(ENHMETAHEADER),
+ "GetEnhMetaFileBits failed on %p\n", h );
+ todo_wine ok( ((ENHMETAHEADER *)buffer)->nRecords == 3,
+ "wrong records %u\n", ((ENHMETAHEADER *)buffer)->nRecords );
+ trace( "enhmetafile %p\n", h );
+ h = GetClipboardData( CF_DSPENHMETAFILE );
+ todo_wine ok( GetObjectType( h ) == OBJ_ENHMETAFILE, "expected enhmetafile %p\n", h );
+ todo_wine ok( GetEnhMetaFileBits( h, sizeof(buffer), buffer ) > sizeof(ENHMETAHEADER),
+ "GetEnhMetaFileBits failed on %p\n", h );
+ todo_wine ok( ((ENHMETAHEADER *)buffer)->nRecords == 3,
+ "wrong records %u\n", ((ENHMETAHEADER *)buffer)->nRecords );
+ trace( "enhmetafile2 %p\n", h );
h = GetClipboardData( CF_DIB );
todo_wine ok( is_fixed( h ), "expected fixed mem %p\n", h );
h = GetClipboardData( CF_DIBV5 );
@@ -1980,12 +2020,28 @@ static void test_handles_process_open( const char *str )
ok( is_moveable( h ), "expected moveable mem %p\n", h );
}
+static void test_handles_process_dib( const char *str )
+{
+ BOOL r;
+ HANDLE h;
+
+ r = OpenClipboard( 0 );
+ ok( r, "gle %d\n", GetLastError() );
+ h = GetClipboardData( CF_BITMAP );
+ ok( !GetObjectType( h ), "expected invalid object %p\n", h );
+ trace( "dibsection %p\n", h );
+ r = CloseClipboard();
+ ok( r, "gle %d\n", GetLastError() );
+}
+
static void test_data_handles(void)
{
BOOL r;
char *ptr;
HANDLE h, text;
HWND hwnd = CreateWindowA( "static", NULL, WS_POPUP, 0, 0, 10, 10, 0, 0, 0, NULL );
+ BITMAPINFO bmi;
+ void *bits;
ok( hwnd != 0, "window creation failed\n" );
format_id = RegisterClipboardFormatA( "my_cool_clipboard_format" );
@@ -1994,7 +2050,7 @@ static void test_data_handles(void)
test_handles( hwnd );
run_thread( test_handles_thread, hwnd, __LINE__ );
- bitmap = CreateBitmap( 10, 10, 1, 1, NULL );
+ bitmap = CreateBitmap( 13, 17, 1, 1, NULL );
bitmap2 = CreateBitmap( 10, 10, 1, 1, NULL );
palette = CreatePalette( &logpalette );
@@ -2012,6 +2068,18 @@ static void test_data_handles(void)
ok( GetObjectType( h ) == OBJ_BITMAP, "expected bitmap %p\n", h );
h = SetClipboardData( CF_PALETTE, palette );
ok( GetObjectType( h ) == OBJ_PAL, "expected palette %p\n", h );
+ h = SetClipboardData( CF_METAFILEPICT, create_metafile() );
+ ok( is_moveable( h ), "expected moveable mem %p\n", h );
+ trace( "metafile %p\n", h );
+ h = SetClipboardData( CF_DSPMETAFILEPICT, create_metafile() );
+ ok( is_moveable( h ), "expected moveable mem %p\n", h );
+ trace( "metafile2 %p\n", h );
+ h = SetClipboardData( CF_ENHMETAFILE, create_emf() );
+ ok( GetObjectType( h ) == OBJ_ENHMETAFILE, "expected enhmetafile %p\n", h );
+ trace( "enhmetafile %p\n", h );
+ h = SetClipboardData( CF_DSPENHMETAFILE, create_emf() );
+ ok( GetObjectType( h ) == OBJ_ENHMETAFILE, "expected enhmetafile %p\n", h );
+ trace( "enhmetafile2 %p\n", h );
h = SetClipboardData( CF_GDIOBJFIRST + 3, create_textA() );
ok( is_moveable( h ), "expected moveable mem %p\n", h );
h = SetClipboardData( CF_PRIVATEFIRST + 7, create_textA() );
@@ -2057,6 +2125,36 @@ static void test_data_handles(void)
r = CloseClipboard();
ok( r, "gle %d\n", GetLastError() );
+ /* test CF_BITMAP with a DIB section */
+ memset( &bmi, 0, sizeof(bmi) );
+ bmi.bmiHeader.biSize = sizeof( bmi.bmiHeader );
+ bmi.bmiHeader.biWidth = 29;
+ bmi.bmiHeader.biHeight = 13;
+ bmi.bmiHeader.biPlanes = 1;
+ bmi.bmiHeader.biBitCount = 32;
+ bitmap = CreateDIBSection( 0, &bmi, DIB_RGB_COLORS, &bits, 0, 0 );
+
+ r = OpenClipboard( hwnd );
+ ok( r, "gle %d\n", GetLastError() );
+ r = EmptyClipboard();
+ ok( r, "gle %d\n", GetLastError() );
+ h = SetClipboardData( CF_BITMAP, bitmap );
+ ok( GetObjectType( h ) == OBJ_BITMAP, "expected bitmap %p\n", h );
+ trace( "dibsection %p\n", h );
+ r = CloseClipboard();
+ ok( r, "gle %d\n", GetLastError() );
+
+ run_process( "handles_dib dummy" );
+
+ r = OpenClipboard( hwnd );
+ ok( r, "gle %d\n", GetLastError() );
+ ok( GetObjectType( bitmap ) == OBJ_BITMAP, "expected bitmap %p\n", bitmap );
+ r = EmptyClipboard();
+ ok( r, "gle %d\n", GetLastError() );
+ ok( !GetObjectType( bitmap ), "expected deleted %p\n", bitmap );
+ r = CloseClipboard();
+ ok( r, "gle %d\n", GetLastError() );
+
DestroyWindow( hwnd );
}
@@ -2202,6 +2300,11 @@ START_TEST(clipboard)
test_handles_process_open( argv[3] );
return;
}
+ if (argc == 4 && !strcmp( argv[2], "handles_dib" ))
+ {
+ test_handles_process_dib( argv[3] );
+ return;
+ }
test_RegisterClipboardFormatA();
test_ClipboardOwner();
More information about the wine-cvs
mailing list