[GDI32_APITEST]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Wed, 12 Nov 2014 09:49:32 +0000 (09:49 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Wed, 12 Nov 2014 09:49:32 +0000 (09:49 +0000)
Add tests for ExtCreateRegion

svn path=/trunk/; revision=65380

rostests/apitests/gdi32/CMakeLists.txt
rostests/apitests/gdi32/ExtCreateRegion.c [new file with mode: 0644]
rostests/apitests/gdi32/testlist.c

index b44193a..28e0f28 100644 (file)
@@ -25,6 +25,7 @@ list(APPEND SOURCE
     EnumFontFamilies.c
     ExcludeClipRect.c
     ExtCreatePen.c
+    ExtCreateRegion.c
     GdiConvertBitmap.c
     GdiConvertBrush.c
     GdiConvertDC.c
diff --git a/rostests/apitests/gdi32/ExtCreateRegion.c b/rostests/apitests/gdi32/ExtCreateRegion.c
new file mode 100644 (file)
index 0000000..0047459
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+ * PROJECT:         ReactOS api tests
+ * LICENSE:         GPL - See COPYING in the top level directory
+ * PURPOSE:         Test for ExtCeateRegion
+ * PROGRAMMERS:     Timo Kreuzer
+ */
+
+#include <apitest.h>
+
+#include <windows.h>
+#include <math.h>
+
+VOID
+InitXFORM(
+    PXFORM pxform,
+    FLOAT eM11,
+    FLOAT eM12,
+    FLOAT eM21,
+    FLOAT eM22,
+    FLOAT eDx,
+    FLOAT eDy)
+{
+    pxform->eM11 = eM11;
+    pxform->eM12 = eM12;
+    pxform->eM21 = eM21;
+    pxform->eM22 = eM22;
+    pxform->eDx = eDx;
+    pxform->eDy = eDy;
+}
+
+#if 0
+void Test_ExtCreateRegion_Parameters()
+{
+    hrgn = ExtCreateRegion(NULL, 1, pRgnData);
+    ok(hrgn != NULL, "ExtCreateRegion failed \n");
+}
+#endif // 0
+
+#define CheckRect(prect, _left, _top, _right, _bottom) \
+do { \
+    ok(((prect)->left == _left) && ((prect)->top == _top) && \
+       ((prect)->right == _right) && ((prect)->bottom == _bottom), \
+       "Region does not match, expected (%ld,%ld,%ld,%ld) got (%ld,%ld,%ld,%ld)\n", \
+       _left, _top, _right, _bottom, \
+       (prect)->left, (prect)->top, (prect)->right, (prect)->bottom); \
+} while (0)
+
+#define CheckRectRegion(hrgn, _left, _top, _right, _bottom) \
+do { \
+    HRGN hrgnTemp = CreateRectRgn(_left, _top, _right, _bottom); \
+    RECT rcTemp; \
+    ok(GetRgnBox(hrgn, &rcTemp) == SIMPLEREGION, "Region is not SIMPLEREGION\n"); \
+    CheckRect(&rcTemp, _left, _top, _right, _bottom); \
+    ok(EqualRgn(hrgn, hrgnTemp), "Region does not match\n"); \
+    DeleteObject(hrgnTemp); \
+} while (0)
+
+void Test_ExtCreateRegion_Transform()
+{
+    struct
+    {
+        RGNDATA rgndata;
+        CHAR data[sizeof(RECT) - 1];
+    } RgnDataBuffer;
+    PRECT prect = (PRECT)&RgnDataBuffer.rgndata.Buffer;
+    const RGNDATA *pRgnData = (const RGNDATA *)&RgnDataBuffer;
+    XFORM xform;
+    FLOAT eAngle;
+    HRGN hrgn;
+    RECT rcTemp;
+
+    RgnDataBuffer.rgndata.rdh.dwSize = sizeof(RGNDATAHEADER);
+    RgnDataBuffer.rgndata.rdh.iType = RDH_RECTANGLES;
+    RgnDataBuffer.rgndata.rdh.nCount = 1;
+    RgnDataBuffer.rgndata.rdh.nRgnSize = sizeof(RGNDATAHEADER) + sizeof(RECT);
+    RgnDataBuffer.rgndata.rdh.rcBound.left = 0;
+    RgnDataBuffer.rgndata.rdh.rcBound.top = 0;
+    RgnDataBuffer.rgndata.rdh.rcBound.right = 10;
+    RgnDataBuffer.rgndata.rdh.rcBound.bottom = 10;
+    prect->left = 0;
+    prect->top = 0;
+    prect->right = 10;
+    prect->bottom = 10;
+
+    SetRectEmpty(&RgnDataBuffer.rgndata.rdh.rcBound);
+
+    hrgn = ExtCreateRegion(NULL, sizeof(RgnDataBuffer), pRgnData);
+    ok(hrgn != NULL, "ExtCreateRegion failed with without transform\n");
+    CheckRectRegion(hrgn, 0, 0, 10, 10);
+
+    InitXFORM(&xform, 1., 0., 0., 1., 0., 0.);
+    hrgn = ExtCreateRegion(&xform, sizeof(RgnDataBuffer), pRgnData);
+    ok(hrgn != NULL, "ExtCreateRegion failed with identity transform\n");
+    CheckRectRegion(hrgn, 0, 0, 10, 10);
+
+    InitXFORM(&xform, 1., 0., 0., 1., 10., 10.);
+    hrgn = ExtCreateRegion(&xform, sizeof(RgnDataBuffer), pRgnData);
+    ok(hrgn != NULL, "ExtCreateRegion failed with offset transform\n");
+    CheckRectRegion(hrgn, 10, 10, 20, 20);
+
+    InitXFORM(&xform, 2.5, 0., 0., 1.5, 0., 0.);
+    hrgn = ExtCreateRegion(&xform, sizeof(RgnDataBuffer), pRgnData);
+    ok(hrgn != NULL, "ExtCreateRegion failed with scaling transform\n");
+    CheckRectRegion(hrgn, 0, 0, 25, 15);
+
+    InitXFORM(&xform, 2.5, 0., 0., 1.5, 20., 40.);
+    hrgn = ExtCreateRegion(&xform, sizeof(RgnDataBuffer), pRgnData);
+    ok(hrgn != NULL, "ExtCreateRegion failed with scaling+offset transform\n");
+    CheckRectRegion(hrgn, 20, 40, 45, 55);
+
+    InitXFORM(&xform, 1., 10., 0., 1., 0., 0.);
+    hrgn = ExtCreateRegion(&xform, sizeof(RgnDataBuffer), pRgnData);
+    ok(hrgn != NULL, "ExtCreateRegion failed with shearing transform\n");
+    ok(GetRgnBox(hrgn, &rcTemp) == COMPLEXREGION, "not a complex region\n");
+    CheckRect(&rcTemp, 0, 1, 10, 101);
+
+    eAngle = 23.6f;
+    InitXFORM(&xform, cosf(eAngle), -sinf(eAngle), sinf(eAngle), cosf(eAngle), 10., 10.);
+    hrgn = ExtCreateRegion(&xform, sizeof(RgnDataBuffer), pRgnData);
+    ok(hrgn != NULL, "ExtCreateRegion failed with rotating transform\n");
+    CheckRectRegion(hrgn, 0, 10, 10, 20);
+
+}
+
+START_TEST(ExtCreateRegion)
+{
+    Test_ExtCreateRegion_Transform();
+}
+
index 2c2b847..b5bafac 100644 (file)
@@ -26,6 +26,7 @@ extern void func_EngReleaseSemaphore(void);
 extern void func_EnumFontFamilies(void);
 extern void func_ExcludeClipRect(void);
 extern void func_ExtCreatePen(void);
+extern void func_ExtCreateRegion(void);
 extern void func_GdiConvertBitmap(void);
 extern void func_GdiConvertBrush(void);
 extern void func_GdiConvertDC(void);
@@ -89,6 +90,7 @@ const struct test winetest_testlist[] =
     { "EnumFontFamilies", func_EnumFontFamilies },
     { "ExcludeClipRect", func_ExcludeClipRect },
     { "ExtCreatePen", func_ExtCreatePen },
+    { "ExtCreateRegion", func_ExtCreateRegion },
     { "GdiConvertBitmap", func_GdiConvertBitmap },
     { "GdiConvertBrush", func_GdiConvertBrush },
     { "GdiConvertDC", func_GdiConvertDC },