1 /* 2 * PROJECT: ReactOS api tests 3 * LICENSE: GPL - See COPYING in the top level directory 4 * PURPOSE: Test for ExcludeClipRect 5 * PROGRAMMERS: Timo Kreuzer 6 */ 7 8 #include <apitest.h> 9 10 #include <wingdi.h> 11 #include <winuser.h> 12 13 #define CLIPRGN 1 14 15 #define ok_rect(_prc, _left, _top, _right, _bottom) \ 16 ok_int((_prc)->left, _left); \ 17 ok_int((_prc)->top, _top); \ 18 ok_int((_prc)->right, _right); \ 19 ok_int((_prc)->bottom, _bottom); \ 20 21 void Test_ExcludeClipRect() 22 { 23 HDC hdc; 24 HRGN hrgn, hrgn2; 25 26 hdc = CreateCompatibleDC(NULL); 27 ok(hdc != 0, "CreateCompatibleDC failed, skipping tests.\n"); 28 if (!hdc) return; 29 30 hrgn2 = CreateRectRgn(0, 0, 0, 0); 31 32 /* Test NULL DC */ 33 SetLastError(0x12345); 34 ok_int(ExcludeClipRect(NULL, 0, 0, 0, 0), ERROR); 35 ok_int(GetLastError(), ERROR_INVALID_HANDLE); 36 37 /* Test invalid DC */ 38 SetLastError(0x12345); 39 ok_int(ExcludeClipRect((HDC)(ULONG_PTR)0x12345, 0, 0, 0, 0), ERROR); 40 ok_int(GetLastError(), ERROR_INVALID_HANDLE); 41 SetLastError(0x12345); 42 43 /* Set a clip region */ 44 hrgn = CreateRectRgn(10, 10, 20, 30); 45 ok_int(SelectClipRgn(hdc, hrgn), NULLREGION); // yeah... it's NULLREGION 46 ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 1); 47 ok_int(EqualRgn(hrgn, hrgn2), TRUE); // but in fact it's the region we set 48 49 /* Exclude something outside of the clip region */ 50 ok_int(ExcludeClipRect(hdc, 0, 0, 1, 1), COMPLEXREGION); // in reality it's a rect region 51 ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 1); 52 ok_int(EqualRgn(hrgn, hrgn2), TRUE); 53 54 /* Exclude something on one side of the clip rect */ 55 ok_int(ExcludeClipRect(hdc, 0, 0, 13, 50), COMPLEXREGION); 56 ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 1); 57 ok_int(CombineRgn(hrgn, hrgn2, NULL, RGN_COPY), SIMPLEREGION); 58 59 /* Exclude something on the edge of the clip rect */ 60 ok_int(ExcludeClipRect(hdc, 0, 0, 15, 15), COMPLEXREGION); 61 ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 1); 62 ok_int(CombineRgn(hrgn, hrgn2, NULL, RGN_COPY), COMPLEXREGION); 63 64 /* Exclude everything left */ 65 ok_int(ExcludeClipRect(hdc, 0, 0, 100, 100), NULLREGION); 66 ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 1); 67 ok_int(CombineRgn(hrgn, hrgn2, NULL, RGN_COPY), NULLREGION); 68 69 /* Reset the clip region */ 70 ok_int(SelectClipRgn(hdc, NULL), SIMPLEREGION); // makes sense, it's actually the whole region 71 ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 0); // return value says region is NULL 72 ok_int(ExcludeClipRect(hdc, 0, 0, 1, 1), NULLREGION); 73 ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 1); // but now we have a region 74 ok_int(CombineRgn(hrgn, hrgn2, NULL, RGN_COPY), NULLREGION); // but it's a NULLREGION (aka empty)? 75 76 /* Test negative rect */ 77 ok_int(SelectClipRgn(hdc, NULL), SIMPLEREGION); 78 ok_int(ExcludeClipRect(hdc, -10, -10, 0, 0), COMPLEXREGION); // this time it's a complex region? 79 ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 1); 80 hrgn = CreateRectRgn(0, 0, 1, 1); 81 ok_int(CombineRgn(hrgn2, hrgn2, hrgn, RGN_XOR), NULLREGION); 82 83 /* Test rect with high coordinates */ 84 ok_int(SelectClipRgn(hdc, NULL), SIMPLEREGION); 85 ok_int(ExcludeClipRect(hdc, 100000, 100000, 100010, 100010), COMPLEXREGION); // this time it's a complex region? 86 ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 1); 87 hrgn = CreateRectRgn(0, 0, 1, 1); 88 ok_int(EqualRgn(hrgn, hrgn2), TRUE); 89 DeleteObject(hrgn); 90 91 /* Test reversed rect negative, but still above 0 */ 92 ok_int(SelectClipRgn(hdc, NULL), SIMPLEREGION); 93 ok_int(ExcludeClipRect(hdc, 1, 1, -10, -20), NULLREGION); 94 ok_int(GetRandomRgn(hdc, hrgn2, CLIPRGN), 1); 95 hrgn = CreateRectRgn(0, 0, 0, 0); 96 ok_int(CombineRgn(hrgn, hrgn2, NULL, RGN_COPY), NULLREGION); 97 98 ok_int(GetLastError(), 0x12345); 99 100 } 101 102 103 START_TEST(ExcludeClipRect) 104 { 105 Test_ExcludeClipRect(); 106 } 107