Nathan Beckmann : gdiplus: Tests for GdipLockBitmapBits/ GdipUnlockBitmapBits.
Alexandre Julliard
julliard at winehq.org
Mon Mar 10 07:16:53 CDT 2008
Module: wine
Branch: master
Commit: 738e74a14bbda4bb55f366e2290a26b5dd0c8267
URL: http://source.winehq.org/git/wine.git/?a=commit;h=738e74a14bbda4bb55f366e2290a26b5dd0c8267
Author: Nathan Beckmann <nathan.beckmann at gmail.com>
Date: Fri Mar 7 01:19:02 2008 -0800
gdiplus: Tests for GdipLockBitmapBits/GdipUnlockBitmapBits.
---
dlls/gdiplus/tests/image.c | 106 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 106 insertions(+), 0 deletions(-)
diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c
index 895ff35..4047fee 100644
--- a/dlls/gdiplus/tests/image.c
+++ b/dlls/gdiplus/tests/image.c
@@ -171,6 +171,111 @@ static void test_encoders(void)
GdipFree(codecs);
}
+static void test_LockBits(void)
+{
+ GpStatus stat;
+ GpBitmap *bm;
+ GpRect rect;
+ BitmapData bd;
+ const REAL WIDTH = 10.0, HEIGHT = 20.0;
+
+ bm = NULL;
+ stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB, NULL, &bm);
+ expect(Ok, stat);
+
+ rect.X = 2;
+ rect.Y = 3;
+ rect.Width = 4;
+ rect.Height = 5;
+
+ /* read-only */
+ stat = GdipBitmapLockBits(bm, &rect, ImageLockModeRead, PixelFormat24bppRGB, &bd);
+ expect(Ok, stat);
+
+ if (stat == Ok) {
+ stat = GdipBitmapUnlockBits(bm, &bd);
+ expect(Ok, stat);
+ }
+
+ /* read-only, consecutive */
+ stat = GdipBitmapLockBits(bm, &rect, ImageLockModeRead, PixelFormat24bppRGB, &bd);
+ expect(Ok, stat);
+
+ if (stat == Ok) {
+ stat = GdipBitmapUnlockBits(bm, &bd);
+ expect(Ok, stat);
+ }
+
+ stat = GdipDisposeImage((GpImage*)bm);
+ expect(Ok, stat);
+ stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB, NULL, &bm);
+ expect(Ok, stat);
+
+ /* read x2 */
+ stat = GdipBitmapLockBits(bm, &rect, ImageLockModeRead, PixelFormat24bppRGB, &bd);
+ expect(Ok, stat);
+ todo_wine {
+ stat = GdipBitmapLockBits(bm, &rect, ImageLockModeRead, PixelFormat24bppRGB, &bd);
+ expect(WrongState, stat);
+ }
+
+ stat = GdipBitmapUnlockBits(bm, &bd);
+ expect(Ok, stat);
+
+ stat = GdipDisposeImage((GpImage*)bm);
+ expect(Ok, stat);
+ stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB, NULL, &bm);
+ expect(Ok, stat);
+
+ /* write, no modification */
+ stat = GdipBitmapLockBits(bm, &rect, ImageLockModeWrite, PixelFormat24bppRGB, &bd);
+ expect(Ok, stat);
+
+ if (stat == Ok) {
+ stat = GdipBitmapUnlockBits(bm, &bd);
+ expect(Ok, stat);
+ }
+
+ /* write, consecutive */
+ todo_wine {
+ stat = GdipBitmapLockBits(bm, &rect, ImageLockModeWrite, PixelFormat24bppRGB, &bd);
+ expect(Ok, stat);
+ }
+
+ if (stat == Ok) {
+ stat = GdipBitmapUnlockBits(bm, &bd);
+ expect(Ok, stat);
+ }
+
+ stat = GdipDisposeImage((GpImage*)bm);
+ expect(Ok, stat);
+ stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB, NULL, &bm);
+ expect(Ok, stat);
+
+ /* write, modify */
+ stat = GdipBitmapLockBits(bm, &rect, ImageLockModeWrite, PixelFormat24bppRGB, &bd);
+ expect(Ok, stat);
+
+ if (stat == Ok) {
+ if (bd.Scan0)
+ ((char*)bd.Scan0)[2] = 0xff;
+
+ stat = GdipBitmapUnlockBits(bm, &bd);
+ expect(Ok, stat);
+ }
+
+ stat = GdipDisposeImage((GpImage*)bm);
+ expect(Ok, stat);
+
+ /* dispose locked */
+ stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB, NULL, &bm);
+ expect(Ok, stat);
+ stat = GdipBitmapLockBits(bm, &rect, ImageLockModeRead, PixelFormat24bppRGB, &bd);
+ expect(Ok, stat);
+ stat = GdipDisposeImage((GpImage*)bm);
+ expect(Ok, stat);
+}
+
START_TEST(image)
{
struct GdiplusStartupInput gdiplusStartupInput;
@@ -187,6 +292,7 @@ START_TEST(image)
test_GetImageDimension();
test_LoadingImages();
test_encoders();
+ test_LockBits();
GdiplusShutdown(gdiplusToken);
}
More information about the wine-cvs
mailing list