1 /* 2 * PROJECT: ReactOS API tests 3 * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory 4 * PURPOSE: Test for GetWindowPlacement 5 * PROGRAMMERS: Thomas Faber <thomas.faber@reactos.org> 6 */ 7 8 #include "precomp.h" 9 10 #define ALIGN_DOWN_BY(size, align) \ 11 ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1)) 12 13 #define ALIGN_UP_BY(size, align) \ 14 (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align)) 15 16 START_TEST(GetWindowPlacement) 17 { 18 BYTE buffer[sizeof(WINDOWPLACEMENT) + 16]; 19 PWINDOWPLACEMENT wp = (PVOID)buffer; 20 DWORD error; 21 BOOL ret; 22 23 SetLastError(0xfeedfab1); 24 ret = GetWindowPlacement(NULL, NULL); 25 error = GetLastError(); 26 ok(ret == FALSE, "ret = %d\n", ret); 27 ok(error == ERROR_INVALID_WINDOW_HANDLE, "error = %lu\n", error); 28 29 SetLastError(0xfeedfab1); 30 ret = GetWindowPlacement(GetDesktopWindow(), NULL); 31 error = GetLastError(); 32 ok(ret == FALSE, "ret = %d\n", ret); 33 ok(error == ERROR_NOACCESS, "error = %lu\n", error); 34 35 SetLastError(0xfeedfab1); 36 ret = GetWindowPlacement(GetDesktopWindow(), (PVOID)(UINT_PTR)-4); 37 error = GetLastError(); 38 ok(ret == FALSE, "ret = %d\n", ret); 39 ok(error == ERROR_NOACCESS, "error = %lu\n", error); 40 41 FillMemory(buffer, sizeof(buffer), 0x55); 42 SetLastError(0xfeedfab1); 43 ret = GetWindowPlacement(GetDesktopWindow(), (PVOID)(ALIGN_UP_BY(buffer, 16) + 1)); 44 error = GetLastError(); 45 ok(ret == TRUE, "ret = %d\n", ret); 46 ok(error == 0xfeedfab1, "error = %lu\n", error); 47 48 FillMemory(wp, sizeof(*wp), 0x55); 49 wp->length = 0; 50 SetLastError(0xfeedfab1); 51 ret = GetWindowPlacement(NULL, wp); 52 error = GetLastError(); 53 ok(ret == FALSE, "ret = %d\n", ret); 54 ok(error == ERROR_INVALID_WINDOW_HANDLE, "error = %lu\n", error); 55 ok(wp->length == 0, "wp.length = %u\n", wp->length); 56 57 FillMemory(wp, sizeof(*wp), 0x55); 58 wp->length = 0; 59 SetLastError(0xfeedfab1); 60 ret = GetWindowPlacement(GetDesktopWindow(), wp); 61 error = GetLastError(); 62 ok(ret == TRUE, "ret = %d\n", ret); 63 ok(error == 0xfeedfab1, "error = %lu\n", error); 64 ok(wp->length == sizeof(*wp), "wp.length = %u\n", wp->length); 65 ok(wp->flags == 0, "wp.flags = %x\n", wp->flags); 66 67 FillMemory(wp, sizeof(*wp), 0x55); 68 wp->length = 1; 69 SetLastError(0xfeedfab1); 70 ret = GetWindowPlacement(GetDesktopWindow(), wp); 71 error = GetLastError(); 72 ok(ret == TRUE, "ret = %d\n", ret); 73 ok(error == 0xfeedfab1, "error = %lu\n", error); 74 ok(wp->length == sizeof(*wp), "wp.length = %u\n", wp->length); 75 ok(wp->flags == 0, "wp.flags = %x\n", wp->flags); 76 77 FillMemory(wp, sizeof(*wp), 0x55); 78 wp->length = sizeof(*wp) - 1; 79 SetLastError(0xfeedfab1); 80 ret = GetWindowPlacement(GetDesktopWindow(), wp); 81 error = GetLastError(); 82 ok(ret == TRUE, "ret = %d\n", ret); 83 ok(error == 0xfeedfab1, "error = %lu\n", error); 84 ok(wp->length == sizeof(*wp), "wp.length = %u\n", wp->length); 85 ok(wp->flags == 0, "wp.flags = %x\n", wp->flags); 86 87 FillMemory(wp, sizeof(*wp), 0x55); 88 wp->length = sizeof(*wp) + 1; 89 SetLastError(0xfeedfab1); 90 ret = GetWindowPlacement(GetDesktopWindow(), wp); 91 error = GetLastError(); 92 ok(ret == TRUE, "ret = %d\n", ret); 93 ok(error == 0xfeedfab1, "error = %lu\n", error); 94 ok(wp->length == sizeof(*wp), "wp.length = %u\n", wp->length); 95 ok(wp->flags == 0, "wp.flags = %x\n", wp->flags); 96 97 FillMemory(wp, sizeof(*wp), 0x55); 98 wp->length = sizeof(*wp); 99 SetLastError(0xfeedfab1); 100 ret = GetWindowPlacement(GetDesktopWindow(), wp); 101 error = GetLastError(); 102 ok(ret == TRUE, "ret = %d\n", ret); 103 ok(error == 0xfeedfab1, "error = %lu\n", error); 104 ok(wp->length == sizeof(*wp), "wp.length = %u\n", wp->length); 105 ok(wp->flags == 0, "wp.flags = %x\n", wp->flags); 106 ok(wp->showCmd == SW_SHOWNORMAL, "wp.showCmd = %u\n", wp->showCmd); 107 ok(wp->ptMinPosition.x == -1, "wp.ptMinPosition.x = %ld\n", wp->ptMinPosition.x); 108 ok(wp->ptMinPosition.y == -1, "wp.ptMinPosition.x = %ld\n", wp->ptMinPosition.y); 109 ok(wp->ptMaxPosition.x == -1, "wp.ptMaxPosition.x = %ld\n", wp->ptMaxPosition.x); 110 ok(wp->ptMaxPosition.y == -1, "wp.ptMaxPosition.y = %ld\n", wp->ptMaxPosition.y); 111 ok(wp->rcNormalPosition.left == 0, "wp.rcNormalPosition.left = %ld\n", wp->rcNormalPosition.left); 112 ok(wp->rcNormalPosition.top == 0, "wp.rcNormalPosition.top = %ld\n", wp->rcNormalPosition.top); 113 ok(wp->rcNormalPosition.right != 0 && 114 wp->rcNormalPosition.right != 0x55555555, "wp.rcNormalPosition.right = %ld\n", wp->rcNormalPosition.right); 115 ok(wp->rcNormalPosition.bottom != 0 && 116 wp->rcNormalPosition.bottom != 0x55555555, "wp.rcNormalPosition.bottom = %ld\n", wp->rcNormalPosition.bottom); 117 } 118