Dmitry Timoshkov : gdiplus/tests: Test GdipGetRegionData behaviour with an integer path that can' t be stored as an array of shorts.
Alexandre Julliard
julliard at winehq.org
Wed Nov 13 13:34:40 CST 2013
Module: wine
Branch: master
Commit: 8dc170e2ca686ea22f8e5ccb5bc9793ed8dfa3b7
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8dc170e2ca686ea22f8e5ccb5bc9793ed8dfa3b7
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Wed Nov 13 14:00:22 2013 +0900
gdiplus/tests: Test GdipGetRegionData behaviour with an integer path that can't be stored as an array of shorts.
---
dlls/gdiplus/tests/region.c | 97 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 97 insertions(+), 0 deletions(-)
diff --git a/dlls/gdiplus/tests/region.c b/dlls/gdiplus/tests/region.c
index 8e0dc9f..dcf5092 100644
--- a/dlls/gdiplus/tests/region.c
+++ b/dlls/gdiplus/tests/region.c
@@ -567,6 +567,103 @@ todo_wine
expect(Ok, status);
status = GdipDeleteRegion(region);
expect(Ok, status);
+
+ /* Test how shorts are stored in the region path data */
+ status = GdipCreatePath(FillModeAlternate, &path);
+ ok(status == Ok, "status %08x\n", status);
+ GdipAddPathRectangleI(path, -1969, -1974, 1995, 1997);
+
+ status = GdipCreateRegionPath(path, ®ion);
+ ok(status == Ok, "status %08x\n", status);
+ needed = 0;
+ status = GdipGetRegionDataSize(region, &needed);
+ ok(status == Ok, "status %08x\n", status);
+ expect(56, needed);
+ memset(buf, 0xee, sizeof(buf));
+ needed = 0;
+ status = GdipGetRegionData(region, (BYTE*)buf, sizeof(buf), &needed);
+ ok(status == Ok, "status %08x\n", status);
+ expect(56, needed);
+ expect_dword(buf, 48);
+ trace("buf[1] = %08x\n", buf[1]);
+ expect_magic(buf + 2);
+ expect_dword(buf + 3, 0);
+ expect_dword(buf + 4, RGNDATA_PATH);
+ expect_dword(buf + 5, 32);
+ expect_magic(buf + 6);
+ expect_dword(buf + 7, 4);
+ /* flags 0x4000 means that a path is an array of shorts instead of FLOATs */
+ expect_dword(buf + 8, 0x4000);
+ point = (RegionDataPoint*)(buf + 9);
+ expect(-1969, point[0].X);
+ expect(-1974, point[0].Y);
+ expect(26, point[1].X); /* buf + 10 */
+ expect(-1974, point[1].Y);
+ expect(26, point[2].X); /* buf + 11 */
+ expect(23, point[2].Y);
+ expect(-1969, point[3].X); /* buf + 12 */
+ expect(23, point[3].Y);
+ expect_dword(buf + 13, 0x81010100); /* 0x01010100 if we don't close the path */
+
+ status = GdipDeletePath(path);
+ expect(Ok, status);
+ status = GdipDeleteRegion(region);
+ expect(Ok, status);
+
+ /* Test with integers that can't be stored as shorts */
+ status = GdipCreatePath(FillModeAlternate, &path);
+ ok(status == Ok, "status %08x\n", status);
+ GdipAddPathRectangleI(path, -196900, -197400, 199500, 199700);
+
+ status = GdipCreateRegionPath(path, ®ion);
+ ok(status == Ok, "status %08x\n", status);
+ needed = 0;
+ status = GdipGetRegionDataSize(region, &needed);
+ ok(status == Ok, "status %08x\n", status);
+todo_wine
+ expect(72, needed);
+ memset(buf, 0xee, sizeof(buf));
+ needed = 0;
+ status = GdipGetRegionData(region, (BYTE*)buf, sizeof(buf), &needed);
+ ok(status == Ok, "status %08x\n", status);
+todo_wine
+ expect(72, needed);
+todo_wine
+ expect_dword(buf, 64);
+ trace("buf[1] = %08x\n", buf[1]);
+ expect_magic(buf + 2);
+ expect_dword(buf + 3, 0);
+ expect_dword(buf + 4, RGNDATA_PATH);
+todo_wine
+ expect_dword(buf + 5, 48);
+ expect_magic(buf + 6);
+ expect_dword(buf + 7, 4);
+ /* flags 0 means that a path is an array of FLOATs */
+todo_wine
+ expect_dword(buf + 8, 0);
+todo_wine
+ expect_float(buf + 9, -196900.0);
+todo_wine
+ expect_float(buf + 10, -197400.0);
+todo_wine
+ expect_float(buf + 11, 2600.0);
+todo_wine
+ expect_float(buf + 12, -197400.0);
+todo_wine
+ expect_float(buf + 13, 2600.0);
+todo_wine
+ expect_float(buf + 14, 2300.0);
+todo_wine
+ expect_float(buf + 15, -196900.0);
+todo_wine
+ expect_float(buf + 16, 2300.0);
+todo_wine
+ expect_dword(buf + 17, 0x81010100); /* 0x01010100 if we don't close the path */
+
+ status = GdipDeletePath(path);
+ expect(Ok, status);
+ status = GdipDeleteRegion(region);
+ expect(Ok, status);
}
static void test_isinfinite(void)
More information about the wine-cvs
mailing list