Disable some misleading service tests because a test cannot determine wheter or not...
[reactos.git] / apitests / user32 / DeferWindowPos.c
1 /*
2 * PROJECT: ReactOS API tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for DeferWindowPos function family
5 * PROGRAMMERS: Thomas Faber
6 */
7
8 #include <stdio.h>
9 #include <wine/test.h>
10 #include <windows.h>
11
12 #define ok_windowpos(hwnd, x, y, w, h, wnd) do { RECT rt; GetWindowRect(hwnd, &rt); \
13 ok(rt.left == (x) && rt.top == (y) && rt.right == (x)+(w) && rt.bottom == (y)+(h), \
14 "Unexpected %s position: (%ld, %ld) - (%ld, %ld)\n", wnd, rt.left, rt.top, rt.right, rt.bottom); } while (0)
15
16 #define ok_lasterr(err, s) ok(GetLastError() == (err), "%s error = %lu\n", s, GetLastError())
17
18 static void Test_DeferWindowPos(HWND hWnd, HWND hWnd2)
19 {
20 HDWP hDwp;
21 BOOL ret;
22
23 /* close invalid handles */
24 SetLastError(DNS_ERROR_RCODE_NXRRSET);
25 ret = EndDeferWindowPos(NULL);
26 ok(ret == 0, "EndDeferWindowPos succeeded with invalid handle\n");
27 ok_lasterr(ERROR_INVALID_DWP_HANDLE, "EndDeferWindowPos");
28
29 SetLastError(DNS_ERROR_RCODE_NXRRSET);
30 ret = EndDeferWindowPos((HDWP)-1);
31 ok(ret == 0, "EndDeferWindowPos succeeded with invalid handle\n");
32 ok_lasterr(ERROR_INVALID_DWP_HANDLE, "EndDeferWindowPos");
33
34 /* negative window count */
35 SetLastError(DNS_ERROR_RCODE_NXRRSET);
36 hDwp = BeginDeferWindowPos(-1);
37 ok(hDwp == NULL, "BeginDeferWindowPos failed\n");
38 ok_lasterr(ERROR_INVALID_PARAMETER, "BeginDeferWindowPos");
39
40 /* zero windows */
41 SetLastError(DNS_ERROR_RCODE_NXRRSET);
42 hDwp = BeginDeferWindowPos(0);
43 ok(hDwp != NULL, "BeginDeferWindowPos failed\n");
44 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "BeginDeferWindowPos");
45 ret = EndDeferWindowPos(hDwp);
46 ok(ret != 0, "EndDeferWindowPos failed\n");
47 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "EndDeferWindowPos");
48
49 /* more windows than expected */
50 SetLastError(DNS_ERROR_RCODE_NXRRSET);
51 hDwp = BeginDeferWindowPos(0);
52 ok(hDwp != NULL, "BeginDeferWindowPos failed\n");
53 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "BeginDeferWindowPos");
54 hDwp = DeferWindowPos(hDwp, hWnd, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER);
55 ok(hDwp != NULL, "DeferWindowPos failed\n");
56 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "DeferWindowPos");
57 ret = EndDeferWindowPos(hDwp);
58 ok(ret != 0, "EndDeferWindowPos failed\n");
59 ok(GetLastError() == ERROR_SUCCESS /* win7 sp1/x64 */
60 || GetLastError() == ERROR_INVALID_WINDOW_HANDLE /* 2k3 sp1/x86 */,
61 "EndDeferWindowPos error = %lu\n", GetLastError());
62 ok_windowpos(hWnd, 10, 20, 200, 210, "Window 1");
63
64 /* more windows than expected 2 */
65 SetLastError(DNS_ERROR_RCODE_NXRRSET);
66 hDwp = BeginDeferWindowPos(1);
67 ok(hDwp != NULL, "BeginDeferWindowPos failed\n");
68 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "BeginDeferWindowPos");
69 hDwp = DeferWindowPos(hDwp, hWnd, NULL, 30, 20, 190, 195, SWP_NOZORDER);
70 ok(hDwp != NULL, "DeferWindowPos failed\n");
71 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "DeferWindowPos");
72 hDwp = DeferWindowPos(hDwp, hWnd2, NULL, 20, 30, 195, 190, SWP_NOZORDER);
73 ok(hDwp != NULL, "DeferWindowPos failed\n");
74 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "DeferWindowPos");
75 ret = EndDeferWindowPos(hDwp);
76 ok(ret != 0, "EndDeferWindowPos failed\n");
77 ok_lasterr(ERROR_SUCCESS, "EndDeferWindowPos");
78 ok_windowpos(hWnd, 30, 20, 190, 195, "Window 1");
79 ok_windowpos(hWnd2, 20, 30, 195, 190, "Window 2");
80
81 /* fewer windows than expected */
82 MoveWindow(hWnd, 10, 20, 200, 210, FALSE);
83 SetLastError(DNS_ERROR_RCODE_NXRRSET);
84 hDwp = BeginDeferWindowPos(2);
85 ok(hDwp != NULL, "BeginDeferWindowPos failed\n");
86 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "BeginDeferWindowPos");
87 hDwp = DeferWindowPos(hDwp, hWnd, NULL, 20, 10, 210, 200, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER);
88 ok(hDwp != NULL, "DeferWindowPos failed\n");
89 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "DeferWindowPos");
90 ret = EndDeferWindowPos(hDwp);
91 ok(ret != 0, "EndDeferWindowPos failed\n");
92 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "EndDeferWindowPos");
93 ok_windowpos(hWnd, 10, 20, 200, 210, "Window 1");
94
95 /* no operation, 1 window */
96 SetLastError(DNS_ERROR_RCODE_NXRRSET);
97 hDwp = BeginDeferWindowPos(1);
98 ok(hDwp != NULL, "BeginDeferWindowPos failed\n");
99 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "BeginDeferWindowPos");
100 hDwp = DeferWindowPos(hDwp, hWnd, NULL, 20, 10, 210, 200, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER);
101 ok(hDwp != NULL, "DeferWindowPos failed\n");
102 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "DeferWindowPos");
103 ret = EndDeferWindowPos(hDwp);
104 ok(ret != 0, "EndDeferWindowPos failed\n");
105 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "EndDeferWindowPos");
106 ok_windowpos(hWnd, 10, 20, 200, 210, "Window 1");
107
108 /* same window twice */
109 SetLastError(DNS_ERROR_RCODE_NXRRSET);
110 hDwp = BeginDeferWindowPos(2);
111 ok(hDwp != NULL, "BeginDeferWindowPos failed\n");
112 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "BeginDeferWindowPos");
113 hDwp = DeferWindowPos(hDwp, hWnd, NULL, 80, 90, 220, 210, SWP_NOZORDER);
114 ok(hDwp != NULL, "DeferWindowPos failed\n");
115 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "DeferWindowPos");
116 hDwp = DeferWindowPos(hDwp, hWnd, NULL, 100, 110, 230, 250, SWP_NOZORDER);
117 ok(hDwp != NULL, "DeferWindowPos failed\n");
118 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "DeferWindowPos");
119 ret = EndDeferWindowPos(hDwp);
120 ok(ret != 0, "EndDeferWindowPos failed\n");
121 ok_lasterr(ERROR_SUCCESS, "EndDeferWindowPos");
122 ok_windowpos(hWnd, 100, 110, 230, 250, "Window 1");
123
124 /* move & resize operation, 1 window */
125 SetLastError(DNS_ERROR_RCODE_NXRRSET);
126 hDwp = BeginDeferWindowPos(1);
127 ok(hDwp != NULL, "BeginDeferWindowPos failed\n");
128 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "BeginDeferWindowPos");
129 hDwp = DeferWindowPos(hDwp, hWnd, NULL, 20, 10, 210, 200, SWP_NOZORDER);
130 ok(hDwp != NULL, "DeferWindowPos failed\n");
131 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "DeferWindowPos");
132 ret = EndDeferWindowPos(hDwp);
133 ok(ret != 0, "EndDeferWindowPos failed\n");
134 ok_lasterr(ERROR_SUCCESS, "EndDeferWindowPos");
135 ok_windowpos(hWnd, 20, 10, 210, 200, "Window 1");
136
137 /* move & resize operation, 2 windows */
138 SetLastError(DNS_ERROR_RCODE_NXRRSET);
139 hDwp = BeginDeferWindowPos(2);
140 ok(hDwp != NULL, "BeginDeferWindowPos failed\n");
141 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "BeginDeferWindowPos");
142 hDwp = DeferWindowPos(hDwp, hWnd, NULL, 50, 60, 230, 240, SWP_NOZORDER);
143 ok(hDwp != NULL, "DeferWindowPos failed\n");
144 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "DeferWindowPos");
145 hDwp = DeferWindowPos(hDwp, hWnd2, NULL, 70, 80, 250, 260, SWP_NOZORDER);
146 ok(hDwp != NULL, "DeferWindowPos failed\n");
147 ok_lasterr(DNS_ERROR_RCODE_NXRRSET, "DeferWindowPos");
148 ret = EndDeferWindowPos(hDwp);
149 ok(ret != 0, "EndDeferWindowPos failed\n");
150 ok_lasterr(ERROR_SUCCESS, "EndDeferWindowPos");
151 ok_windowpos(hWnd, 50, 60, 230, 240, "Window 1");
152 ok_windowpos(hWnd2, 70, 80, 250, 260, "Window 2");
153 }
154
155 START_TEST(DeferWindowPos)
156 {
157 HWND hWnd = CreateWindowExW(0, L"EDIT", L"abc", 0, 10, 20,
158 200, 210, NULL, NULL, GetModuleHandle(NULL), NULL);
159 HWND hWnd2 = CreateWindowExW(0, L"EDIT", L"def", 0, 30, 40,
160 220, 230, NULL, NULL, GetModuleHandle(NULL), NULL);
161 ok(hWnd != NULL, "CreateWindow failed\n");
162 ok(hWnd2 != NULL, "CreateWindow failed\n");
163 ok_windowpos(hWnd, 10, 20, 200, 210, "Window 1");
164 ok_windowpos(hWnd2, 30, 40, 220, 230, "Window 2");
165
166 Test_DeferWindowPos(hWnd, hWnd2);
167
168 DestroyWindow(hWnd2);
169 DestroyWindow(hWnd);
170 }