user32/tests: Test MDI child order changing caused by WM_MDINEXT.

This commit is contained in:
Sergey Guralnik 2013-06-05 09:12:03 +03:00 committed by Alexandre Julliard
parent c34b7b1313
commit fe2f877678
1 changed files with 74 additions and 0 deletions

View File

@ -1507,6 +1507,69 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT_PTR first_id)
DestroyWindow(mdi_child);
}
static void test_MDI_child_stack(HWND mdi_client)
{
HWND child_1, child_2, child_3, child_4;
HWND stack[4];
MDICREATESTRUCTA cs;
cs.szClass = "MDI_child_Class_1";
cs.szTitle = "MDI child";
cs.hOwner = GetModuleHandleA(0);
cs.x = CW_USEDEFAULT;
cs.y = CW_USEDEFAULT;
cs.cx = CW_USEDEFAULT;
cs.cy = CW_USEDEFAULT;
cs.style = 0;
cs.lParam = (LPARAM)mdi_lParam_test_message;
assert(child_1 = (HWND)SendMessageA(mdi_client, WM_MDICREATE, 0, (LPARAM)&cs));
assert(child_2 = (HWND)SendMessageA(mdi_client, WM_MDICREATE, 0, (LPARAM)&cs));
assert(child_3 = (HWND)SendMessageA(mdi_client, WM_MDICREATE, 0, (LPARAM)&cs));
assert(child_4 = (HWND)SendMessageA(mdi_client, WM_MDICREATE, 0, (LPARAM)&cs));
stack[0] = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, 0);
stack[1] = GetWindow(stack[0], GW_HWNDNEXT);
stack[2] = GetWindow(stack[1], GW_HWNDNEXT);
stack[3] = GetWindow(stack[2], GW_HWNDNEXT);
trace("Initial MDI child stack: %p->%p->%p->%p\n", stack[0], stack[1], stack[2], stack[3]);
ok(stack[0] == child_4 && stack[1] == child_3 &&
stack[2] == child_2 && stack[3] == child_1,
"Unexpected initial order, should be: %p->%p->%p->%p\n",
child_4, child_3, child_2, child_1);
trace("Activate child next to %p\n", child_3);
SendMessage(mdi_client, WM_MDINEXT, (WPARAM)child_3, 0);
stack[0] = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, 0);
stack[1] = GetWindow(stack[0], GW_HWNDNEXT);
stack[2] = GetWindow(stack[1], GW_HWNDNEXT);
stack[3] = GetWindow(stack[2], GW_HWNDNEXT);
todo_wine
ok(stack[0] == child_2 && stack[1] == child_4 &&
stack[2] == child_1 && stack[3] == child_3,
"Broken MDI child stack:\nexpected: %p->%p->%p->%p, but got: %p->%p->%p->%p\n",
child_2, child_4, child_1, child_3, stack[0], stack[1], stack[2], stack[3]);
trace("Activate child previous to %p\n", child_1);
SendMessage(mdi_client, WM_MDINEXT, (WPARAM)child_1, 1);
stack[0] = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, 0);
stack[1] = GetWindow(stack[0], GW_HWNDNEXT);
stack[2] = GetWindow(stack[1], GW_HWNDNEXT);
stack[3] = GetWindow(stack[2], GW_HWNDNEXT);
todo_wine
ok(stack[0] == child_4 && stack[1] == child_2 &&
stack[2] == child_1 && stack[3] == child_3,
"Broken MDI child stack:\nexpected: %p->%p->%p->%p, but got: %p->%p->%p->%p\n",
child_4, child_2, child_1, child_3, stack[0], stack[1], stack[2], stack[3]);
DestroyWindow(child_1);
DestroyWindow(child_2);
DestroyWindow(child_3);
DestroyWindow(child_4);
}
/**********************************************************************
* MDI_ChildGetMinMaxInfo (copied from windows/mdi.c)
*
@ -1788,6 +1851,17 @@ static LRESULT WINAPI mdi_main_wnd_procA(HWND hwnd, UINT msg, WPARAM wparam, LPA
assert(mdi_client);
test_MDI_create(hwnd, mdi_client, client_cs.idFirstChild);
DestroyWindow(mdi_client);
/* Test child window stack management */
mdi_client = CreateWindowExA(0, "mdiclient",
NULL,
WS_CHILD,
0, 0, rc.right, rc.bottom,
hwnd, 0, GetModuleHandle(0),
&client_cs);
assert(mdi_client);
test_MDI_child_stack(mdi_client);
DestroyWindow(mdi_client);
break;
}