Alexandre Julliard : gdi32/tests: Add a test case for calling WriteFile with the DIB section bits as buffer.
Alexandre Julliard
julliard at winehq.org
Thu Jan 15 08:50:57 CST 2009
Module: wine
Branch: master
Commit: d2b217e90a3222506605037263fd57222c639543
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d2b217e90a3222506605037263fd57222c639543
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Jan 14 20:19:42 2009 +0100
gdi32/tests: Add a test case for calling WriteFile with the DIB section bits as buffer.
---
dlls/gdi32/tests/bitmap.c | 58 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 58 insertions(+), 0 deletions(-)
diff --git a/dlls/gdi32/tests/bitmap.c b/dlls/gdi32/tests/bitmap.c
index 3f8a674..b4dc09e 100644
--- a/dlls/gdi32/tests/bitmap.c
+++ b/dlls/gdi32/tests/bitmap.c
@@ -396,6 +396,62 @@ static void test_dib_info(HBITMAP hbm, const void *bits, const BITMAPINFOHEADER
test_color_todo(c, exp, GetPixel, todo_getp); \
}
+static void test_dib_bits_access( HBITMAP hdib, void *bits )
+{
+ MEMORY_BASIC_INFORMATION info;
+ char bmibuf[sizeof(BITMAPINFO) + 256 * sizeof(RGBQUAD)];
+ DWORD data[256];
+ BITMAPINFO *pbmi = (BITMAPINFO *)bmibuf;
+ HDC hdc = GetDC(0);
+ char filename[MAX_PATH];
+ HANDLE file;
+ DWORD written;
+ INT ret;
+
+ ok(VirtualQuery(bits, &info, sizeof(info)) == sizeof(info),
+ "VirtualQuery failed\n");
+ ok(info.BaseAddress == bits, "%p != %p\n", info.BaseAddress, bits);
+ ok(info.AllocationBase == bits, "%p != %p\n", info.AllocationBase, bits);
+ ok(info.AllocationProtect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.AllocationProtect);
+ ok(info.State == MEM_COMMIT, "%x != MEM_COMMIT\n", info.State);
+ ok(info.Protect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.Protect);
+ ok(info.Type == MEM_PRIVATE, "%x != MEM_PRIVATE\n", info.Type);
+
+ memset( pbmi, 0, sizeof(bmibuf) );
+ memset( data, 0xcc, sizeof(data) );
+ pbmi->bmiHeader.biSize = sizeof(pbmi->bmiHeader);
+ pbmi->bmiHeader.biHeight = 16;
+ pbmi->bmiHeader.biWidth = 16;
+ pbmi->bmiHeader.biBitCount = 32;
+ pbmi->bmiHeader.biPlanes = 1;
+ pbmi->bmiHeader.biCompression = BI_RGB;
+
+ ret = SetDIBits( hdc, hdib, 0, 16, data, pbmi, DIB_RGB_COLORS );
+ ok( ret == 16, "SetDIBits failed\n" );
+
+ ok(VirtualQuery(bits, &info, sizeof(info)) == sizeof(info),
+ "VirtualQuery failed\n");
+ ok(info.BaseAddress == bits, "%p != %p\n", info.BaseAddress, bits);
+ ok(info.AllocationBase == bits, "%p != %p\n", info.AllocationBase, bits);
+ ok(info.AllocationProtect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.AllocationProtect);
+ ok(info.State == MEM_COMMIT, "%x != MEM_COMMIT\n", info.State);
+ ok(info.Type == MEM_PRIVATE, "%x != MEM_PRIVATE\n", info.Type);
+ /* it has been protected now */
+ todo_wine ok(info.Protect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.Protect);
+
+ /* try writing protected bits to a file */
+
+ GetTempFileNameA( ".", "dib", 0, filename );
+ file = CreateFileA( filename, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,
+ CREATE_ALWAYS, 0, 0 );
+ ok( file != INVALID_HANDLE_VALUE, "failed to open %s error %u\n", filename, GetLastError() );
+ ret = WriteFile( file, bits, 8192, &written, NULL );
+ ok( ret, "WriteFile failed error %u\n", GetLastError() );
+ if (ret) ok( written == 8192, "only wrote %u bytes\n", written );
+ CloseHandle( file );
+ DeleteFileA( filename );
+}
+
static void test_dibsections(void)
{
HDC hdc, hdcmem, hdcmem2;
@@ -455,6 +511,8 @@ static void test_dibsections(void)
ok(info.Protect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.Protect);
ok(info.Type == MEM_PRIVATE, "%x != MEM_PRIVATE\n", info.Type);
+ test_dib_bits_access( hdib, bits );
+
test_dib_info(hdib, bits, &pbmi->bmiHeader);
DeleteObject(hdib);
More information about the wine-cvs
mailing list