[GDI32_APITEST]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Wed, 24 Sep 2014 08:35:30 +0000 (08:35 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Wed, 24 Sep 2014 08:35:30 +0000 (08:35 +0000)
Add tests for ExcludeClipRect, convert tabs to spaces

svn path=/trunk/; revision=64254

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

index 3eb6d4f..7ba7879 100644 (file)
@@ -22,6 +22,7 @@ list(APPEND SOURCE
     EngCreateSemaphore.c
     EngDeleteSemaphore.c
     EngReleaseSemaphore.c
+    ExcludeClipRect.c
     ExtCreatePen.c
     GdiConvertBitmap.c
     GdiConvertBrush.c
diff --git a/rostests/apitests/gdi32/ExcludeClipRect.c b/rostests/apitests/gdi32/ExcludeClipRect.c
new file mode 100644 (file)
index 0000000..cca97a8
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * PROJECT:         ReactOS api tests
+ * LICENSE:         GPL - See COPYING in the top level directory
+ * PURPOSE:         Test for ExcludeClipRect
+ * PROGRAMMERS:     Timo Kreuzer
+ */
+
+#include <apitest.h>
+
+#include <wingdi.h>
+#include <winuser.h>
+
+#define CLIPRGN 1
+
+#define ok_rect(_prc, _left, _top, _right, _bottom) \
+    ok_int((_prc)->left, _left); \
+    ok_int((_prc)->top, _top); \
+    ok_int((_prc)->right, _right); \
+    ok_int((_prc)->bottom, _bottom); \
+
+void Test_ExcludeClipRect()
+{
+    HDC hdc;
+    HRGN hrgn, hrgn2;
+
+    hdc = CreateCompatibleDC(NULL);
+    ok(hdc != 0, "CreateCompatibleDC failed, skipping tests.\n");
+    if (!hdc) return;
+
+    hrgn2 = CreateRectRgn(0, 0, 0, 0);
+
+    /* Test NULL DC */
+    SetLastError(0x12345);
+    ok_int(ExcludeClipRect(NULL, 0, 0, 0, 0), ERROR);
+    ok_int(GetLastError(), ERROR_INVALID_HANDLE);
+
+    /* Test invalid DC */
+    SetLastError(0x12345);
+    ok_int(ExcludeClipRect((HDC)(ULONG_PTR)0x12345, 0, 0, 0, 0), ERROR);
+    ok_int(GetLastError(), ERROR_INVALID_HANDLE);
+    SetLastError(0x12345);
+
+    /* Set a clip region */
+    hrgn = CreateRectRgn(10, 10, 20, 30);
+    ok_int(SelectClipRgn(hdc, hrgn), NULLREGION); // yeah... it's NULLREGION
+    ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 1);
+    ok_int(CombineRgn(hrgn2, hrgn2, hrgn, RGN_XOR), NULLREGION); // but in fact it's a rect region!
+
+    /* Exclude something outside of the clip region */
+    ok_int(ExcludeClipRect(hdc, 0, 0, 1, 1), COMPLEXREGION); // in reality it's a rect region
+    ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 1);
+    ok_int(CombineRgn(hrgn2, hrgn2, hrgn, RGN_XOR), NULLREGION);
+
+    /* Now exclude something for real */
+    ok_int(ExcludeClipRect(hdc, 0, 0, 15, 15), COMPLEXREGION);
+    ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 1);
+    ok_int(CombineRgn(hrgn, hrgn2, NULL, RGN_COPY), COMPLEXREGION);
+
+    /* Exclude everything left */
+    ok_int(ExcludeClipRect(hdc, 0, 0, 100, 100), NULLREGION);
+    ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 1);
+    ok_int(CombineRgn(hrgn, hrgn2, NULL, RGN_COPY), NULLREGION);
+
+    /* Reset the clip region */
+    ok_int(SelectClipRgn(hdc, NULL), SIMPLEREGION); // makes sense, it's actually the whole region
+    ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 0); // return value says region is NULL
+    ok_int(ExcludeClipRect(hdc, 0, 0, 1, 1), NULLREGION);
+    ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 1); // but now we have a region
+    ok_int(CombineRgn(hrgn, hrgn2, NULL, RGN_COPY), NULLREGION); // but it's a NULLREGION (aka empty)?
+
+    /* Test negative rect */
+    ok_int(SelectClipRgn(hdc, NULL), SIMPLEREGION);
+    ok_int(ExcludeClipRect(hdc, -10, -10, 0, 0), COMPLEXREGION); // this time it's a complex region?
+    ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 1);
+    hrgn = CreateRectRgn(0, 0, 1, 1);
+    ok_int(CombineRgn(hrgn2, hrgn2, hrgn, RGN_XOR), NULLREGION);
+
+    /* Test rect with high coordinates */
+    ok_int(SelectClipRgn(hdc, NULL), SIMPLEREGION);
+    ok_int(ExcludeClipRect(hdc, 100000, 100000, 100010, 100010), COMPLEXREGION); // this time it's a complex region?
+    ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 1);
+    hrgn = CreateRectRgn(0, 0, 1, 1);
+    ok_int(CombineRgn(hrgn2, hrgn2, hrgn, RGN_XOR), NULLREGION);
+
+    /* Test reversed rect negative, but still above 0 */
+    ok_int(SelectClipRgn(hdc, NULL), SIMPLEREGION);
+    ok_int(ExcludeClipRect(hdc, 1, 1, -10, -20), NULLREGION);
+    ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 1);
+    hrgn = CreateRectRgn(0, 0, 0, 0);
+    ok_int(CombineRgn(hrgn, hrgn2, NULL, RGN_COPY), NULLREGION);
+
+    ok_int(GetLastError(), 0x12345);
+
+}
+
+
+START_TEST(ExcludeClipRect)
+{
+    Test_ExcludeClipRect();
+}
index 4c6e168..d0e1a33 100644 (file)
 
 void Test_GetClipBox()
 {
-       HWND hWnd;
-       HDC hdc;
-       RECT rect;
-       HRGN hrgn, hrgn2;
-       int ret;
-
-       /* Create a window */
-       hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
-                           CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,
-                           NULL, NULL, 0, 0);
+    HWND hWnd;
+    HDC hdc;
+    RECT rect;
+    HRGN hrgn, hrgn2;
+    int ret;
+
+    /* Create a window */
+    hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
+                        CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,
+                        NULL, NULL, 0, 0);
     ok(hWnd != NULL, "CreateWindowW failed\n");
     if (hWnd == NULL)
     {
         return;
     }
 
-       hdc = GetDC(hWnd);
+    hdc = GetDC(hWnd);
 
-       /* Test invalid DC */
-       SetLastError(ERROR_SUCCESS);
-       ret = GetClipBox((HDC)0x12345, &rect);
-       ok(ret == ERROR, "Expected ERROR, got %d\n", ret);
-       ok(GetLastError() == 0, "Expected 0, got %ld\n", GetLastError());
+    /* Test invalid DC */
+    SetLastError(ERROR_SUCCESS);
+    ret = GetClipBox((HDC)0x12345, &rect);
+    ok(ret == ERROR, "Expected ERROR, got %d\n", ret);
+    ok(GetLastError() == 0, "Expected 0, got %ld\n", GetLastError());
 
-       //ret = GetClipBox(hdc, &rect);
-       //ok_int(ret, SIMPLEREGION);
-       //ok_rect(&rect, 0, 0, 132, 68);
+    //ret = GetClipBox(hdc, &rect);
+    //ok_int(ret, SIMPLEREGION);
+    //ok_rect(&rect, 0, 0, 132, 68);
 
     /* Create a clip region */
-       hrgn = CreateRectRgn(5, 7, 50, 50);
+    hrgn = CreateRectRgn(5, 7, 50, 50);
     SelectClipRgn(hdc, hrgn);
     DeleteObject(hrgn);
-       ret = GetClipBox(hdc, &rect);
-       ok_int(ret, SIMPLEREGION);
-       ok_rect(&rect, 5, 7, 50, 50);
+    ret = GetClipBox(hdc, &rect);
+    ok_int(ret, SIMPLEREGION);
+    ok_rect(&rect, 5, 7, 50, 50);
 
     /* Set clip region as meta region */
     SetMetaRgn(hdc);
 
     /* Create a new clip region */
-       hrgn = CreateRectRgn(10, 10, 100, 100);
+    hrgn = CreateRectRgn(10, 10, 100, 100);
     SelectClipRgn(hdc, hrgn);
     DeleteObject(hrgn);
-       ret = GetClipBox(hdc, &rect);
-       ok_int(ret, SIMPLEREGION);
-       ok_rect(&rect, 10, 10, 50, 50);
+    ret = GetClipBox(hdc, &rect);
+    ok_int(ret, SIMPLEREGION);
+    ok_rect(&rect, 10, 10, 50, 50);
 
     /* Create an empty clip region */
-       hrgn = CreateRectRgn(10, 10, 10, 30);
+    hrgn = CreateRectRgn(10, 10, 10, 30);
     SelectClipRgn(hdc, hrgn);
     DeleteObject(hrgn);
-       ret = GetClipBox(hdc, &rect);
-       ok_int(ret, NULLREGION);
-       ok_rect(&rect, 0, 0, 0, 0);
+    ret = GetClipBox(hdc, &rect);
+    ok_int(ret, NULLREGION);
+    ok_rect(&rect, 0, 0, 0, 0);
 
     /* Create a complex region */
-       hrgn = CreateRectRgn(10, 10, 30, 30);
-       hrgn2 = CreateRectRgn(20, 20, 60, 60);
-       ok_int(CombineRgn(hrgn, hrgn, hrgn2, RGN_OR), COMPLEXREGION);
+    hrgn = CreateRectRgn(10, 10, 30, 30);
+    hrgn2 = CreateRectRgn(20, 20, 60, 60);
+    ok_int(CombineRgn(hrgn, hrgn, hrgn2, RGN_OR), COMPLEXREGION);
     SelectClipRgn(hdc, hrgn);
     DeleteObject(hrgn2);
-       ret = GetClipBox(hdc, &rect);
-       ok_int(ret, COMPLEXREGION);
-       ok_rect(&rect, 10, 10, 50, 50);
+    ret = GetClipBox(hdc, &rect);
+    ok_int(ret, COMPLEXREGION);
+    ok_rect(&rect, 10, 10, 50, 50);
 
     /* Set scaling but keep the mapping mode (viewport should not be changed) */
     ok_int(SetViewportExtEx(hdc, 1000, 1000, NULL), 1);
-       ret = GetClipBox(hdc, &rect);
-       ok_int(ret, COMPLEXREGION);
-       ok_rect(&rect, 10, 10, 50, 50);
+    ret = GetClipBox(hdc, &rect);
+    ok_int(ret, COMPLEXREGION);
+    ok_rect(&rect, 10, 10, 50, 50);
 
     /* Set unisotropic mode, ClipBox should be unchanged */
     ok_int(SetMapMode(hdc, MM_ANISOTROPIC), 1);
-       ret = GetClipBox(hdc, &rect);
-       ok_int(ret, COMPLEXREGION);
-       ok_rect(&rect, 10, 10, 50, 50);
+    ret = GetClipBox(hdc, &rect);
+    ok_int(ret, COMPLEXREGION);
+    ok_rect(&rect, 10, 10, 50, 50);
 
     /* Now set viewport again */
     ok_int(SetViewportExtEx(hdc, 200, 400, NULL), 1);
-       ret = GetClipBox(hdc, &rect);
-       ok_int(ret, COMPLEXREGION); // obviously some special secret feature...
-       ok_rect(&rect, 0, 0, 0, 0);
+    ret = GetClipBox(hdc, &rect);
+    ok_int(ret, COMPLEXREGION); // obviously some special secret feature...
+    ok_rect(&rect, 0, 0, 0, 0);
 
     /* Reset clip region */
     SelectClipRgn(hdc, NULL);
     SetMetaRgn(hdc);
-       ret = GetClipBox(hdc, &rect);
-       ok_int(ret, SIMPLEREGION);
-       ok_rect(&rect, 0, 0, 0, 0);
+    ret = GetClipBox(hdc, &rect);
+    ok_int(ret, SIMPLEREGION);
+    ok_rect(&rect, 0, 0, 0, 0);
 
-       hrgn = CreateRectRgn(10, 10, 190, 190);
+    hrgn = CreateRectRgn(10, 10, 190, 190);
     SelectClipRgn(hdc, hrgn);
-       ret = GetClipBox(hdc, &rect);
-       ok_int(ret, SIMPLEREGION);
-       ok_rect(&rect, 0, 0, 0, 0);
+    ret = GetClipBox(hdc, &rect);
+    ok_int(ret, SIMPLEREGION);
+    ok_rect(&rect, 0, 0, 0, 0);
 
     /* Now also set the window extension */
     ok_int(SetWindowExtEx(hdc, 400, 600, NULL), 1);
-       ret = GetClipBox(hdc, &rect);
-       ok_int(ret, SIMPLEREGION);
-       ok_rect(&rect, 20, 15, 100, 75);
+    ret = GetClipBox(hdc, &rect);
+    ok_int(ret, SIMPLEREGION);
+    ok_rect(&rect, 20, 15, 100, 75);
 
-       hrgn = CreateRectRgn(30, 30, 300, 300);
+    hrgn = CreateRectRgn(30, 30, 300, 300);
     SelectClipRgn(hdc, hrgn);
     SetMetaRgn(hdc);
-       ret = GetClipBox(hdc, &rect);
-       ok_int(ret, SIMPLEREGION);
-       ok_rect(&rect, 60, 45, 100, 75);
+    ret = GetClipBox(hdc, &rect);
+    ok_int(ret, SIMPLEREGION);
+    ok_rect(&rect, 60, 45, 100, 75);
 
-       ReleaseDC(hWnd, hdc);
-       DestroyWindow(hWnd);
+    ReleaseDC(hWnd, hdc);
+    DestroyWindow(hWnd);
 }
 
 START_TEST(GetClipBox)
index 3eacd3f..35d0a1a 100644 (file)
@@ -23,6 +23,7 @@ extern void func_EngAcquireSemaphore(void);
 extern void func_EngCreateSemaphore(void);
 extern void func_EngDeleteSemaphore(void);
 extern void func_EngReleaseSemaphore(void);
+extern void func_ExcludeClipRect(void);
 extern void func_ExtCreatePen(void);
 extern void func_GdiConvertBitmap(void);
 extern void func_GdiConvertBrush(void);
@@ -83,6 +84,7 @@ const struct test winetest_testlist[] =
     { "EngCreateSemaphore", func_EngCreateSemaphore },
     { "EngDeleteSemaphore", func_EngDeleteSemaphore },
     { "EngReleaseSemaphore", func_EngReleaseSemaphore },
+    { "ExcludeClipRect", func_ExcludeClipRect },
     { "ExtCreatePen", func_ExtCreatePen },
     { "GdiConvertBitmap", func_GdiConvertBitmap },
     { "GdiConvertBrush", func_GdiConvertBrush },