user32/tests: Add tests for MsgWaitForMultipleObjectsEx.
This commit is contained in:
parent
ebd1b86bbb
commit
3326cad0dd
|
@ -4542,6 +4542,11 @@ static const struct message WmZOrder[] = {
|
||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void CALLBACK apc_test_proc(ULONG_PTR param)
|
||||||
|
{
|
||||||
|
/* nothing */
|
||||||
|
}
|
||||||
|
|
||||||
static void test_MsgWaitForMultipleObjects(HWND hwnd)
|
static void test_MsgWaitForMultipleObjects(HWND hwnd)
|
||||||
{
|
{
|
||||||
DWORD ret;
|
DWORD ret;
|
||||||
|
@ -4583,6 +4588,37 @@ static void test_MsgWaitForMultipleObjects(HWND hwnd)
|
||||||
ok(msg.message == WM_USER, "got %04x instead of WM_USER\n", msg.message);
|
ok(msg.message == WM_USER, "got %04x instead of WM_USER\n", msg.message);
|
||||||
ok(PeekMessageA( &msg, 0, 0, 0, PM_REMOVE ), "PeekMessage should succeed\n");
|
ok(PeekMessageA( &msg, 0, 0, 0, PM_REMOVE ), "PeekMessage should succeed\n");
|
||||||
ok(msg.message == WM_USER, "got %04x instead of WM_USER\n", msg.message);
|
ok(msg.message == WM_USER, "got %04x instead of WM_USER\n", msg.message);
|
||||||
|
|
||||||
|
/* MWMO_INPUTAVAILABLE should succeed even if the message was already seen */
|
||||||
|
PostMessageA( hwnd, WM_USER, 0, 0 );
|
||||||
|
ok(PeekMessageA( &msg, 0, 0, 0, PM_NOREMOVE ), "PeekMessage should succeed\n");
|
||||||
|
ok(msg.message == WM_USER, "got %04x instead of WM_USER\n", msg.message);
|
||||||
|
|
||||||
|
ret = MsgWaitForMultipleObjectsEx( 0, NULL, 0, QS_POSTMESSAGE, MWMO_INPUTAVAILABLE );
|
||||||
|
ok(ret == WAIT_OBJECT_0, "MsgWaitForMultipleObjectsEx returned %x\n", ret);
|
||||||
|
|
||||||
|
ok(PeekMessageA( &msg, 0, 0, 0, PM_REMOVE ), "PeekMessage should succeed\n");
|
||||||
|
ok(msg.message == WM_USER, "got %04x instead of WM_USER\n", msg.message);
|
||||||
|
|
||||||
|
/* without MWMO_ALERTABLE the result is never WAIT_IO_COMPLETION */
|
||||||
|
ret = QueueUserAPC( apc_test_proc, GetCurrentThread(), 0 );
|
||||||
|
ok(ret, "QueueUserAPC failed %u\n", GetLastError());
|
||||||
|
|
||||||
|
ret = MsgWaitForMultipleObjectsEx( 0, NULL, 0, QS_POSTMESSAGE, 0 );
|
||||||
|
ok(ret == WAIT_TIMEOUT, "MsgWaitForMultipleObjectsEx returned %x\n", ret);
|
||||||
|
|
||||||
|
/* but even with MWMO_ALERTABLE window events are preferred */
|
||||||
|
PostMessageA( hwnd, WM_USER, 0, 0 );
|
||||||
|
|
||||||
|
ret = MsgWaitForMultipleObjectsEx( 0, NULL, 0, QS_POSTMESSAGE, MWMO_ALERTABLE );
|
||||||
|
ok(ret == WAIT_OBJECT_0, "MsgWaitForMultipleObjectsEx returned %x\n", ret);
|
||||||
|
|
||||||
|
ok(PeekMessageA( &msg, 0, 0, 0, PM_REMOVE ), "PeekMessage should succeed\n");
|
||||||
|
ok(msg.message == WM_USER, "got %04x instead of WM_USER\n", msg.message);
|
||||||
|
|
||||||
|
/* the APC call is still queued */
|
||||||
|
ret = MsgWaitForMultipleObjectsEx( 0, NULL, 0, QS_POSTMESSAGE, MWMO_ALERTABLE );
|
||||||
|
ok(ret == WAIT_IO_COMPLETION, "MsgWaitForMultipleObjectsEx returned %x\n", ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* test if we receive the right sequence of messages */
|
/* test if we receive the right sequence of messages */
|
||||||
|
|
Loading…
Reference in New Issue