static void test_notification_dbg(HWND hwnd, const char* command, WPARAM type, int line) { /* Use type 0 as meaning no message */ MSG msg; BOOL seen; do { seen = PeekMessageA(&msg, hwnd, 0, 0, PM_REMOVE); } while(seen && spurious_message(&msg)); if(type && !seen) { /* We observe transient delayed notification, mostly on native. * Notification is not always present right when mciSend returns. */ trace_(__FILE__,line)("Waiting for delayed notification from %s\n", command); MsgWaitForMultipleObjects(0, NULL, FALSE, 3000, QS_POSTMESSAGE); seen = PeekMessageA(&msg, hwnd, MM_MCINOTIFY, MM_MCINOTIFY, PM_REMOVE); } if(!seen) ok_(__FILE__,line)(type==0, "Expect message %04lx from %s\n", type, command); else if(msg.hwnd != hwnd) ok_(__FILE__,line)(msg.hwnd == hwnd, "Didn't get the handle to our test window\n"); else if(msg.message != MM_MCINOTIFY) ok_(__FILE__,line)(msg.message == MM_MCINOTIFY, "got %04x instead of MM_MCINOTIFY from command %s\n", msg.message, command); else ok_(__FILE__,line)(msg.wParam == type, "got %04lx instead of MCI_NOTIFY_xyz %04lx from command %s\n", msg.wParam, type, command); }
static void test_notification_dbg(HWND hwnd, const char* command, UINT m1, DWORD_PTR p2, int line) { /* Use message type 0 as meaning no message */ MSG msg; if (hwnd) { /* msg.wParam is hmidiout, msg.lParam is the mhdr (or 0) */ BOOL seen; do { seen = PeekMessageA(&msg, hwnd, 0, 0, PM_REMOVE); } while(seen && spurious_message(&msg)); if (m1 && !seen) { /* We observe transient delayed notification, mostly on native. * Perhaps the OS preempts the player thread after setting MHDR_DONE * or clearing MHDR_INQUEUE, before calling DriverCallback. */ DWORD rc; trace_(__FILE__,line)("Waiting for delayed message %x from %s\n", m1, command); SetLastError(0xDEADBEEF); rc = MsgWaitForMultipleObjects(0, NULL, FALSE, 3000, QS_POSTMESSAGE); ok_(__FILE__,line)(rc==WAIT_OBJECT_0, "Wait failed: %04x %d\n", rc, GetLastError()); seen = PeekMessageA(&msg, hwnd, 0, 0, PM_REMOVE); } if (seen) { trace_(__FILE__,line)("Message %x, wParam=%lx, lParam=%lx from %s\n", msg.message, msg.wParam, msg.lParam, command); ok_(__FILE__,line)(msg.hwnd==hwnd, "Didn't get the handle to our test window\n"); ok_(__FILE__,line)(msg.message==m1 && msg.lParam==p2, "bad message %x/%lx from %s, expect %x/%lx\n", msg.message, msg.lParam, command, m1, p2); } else ok_(__FILE__,line)(m1==0, "Expect message %x from %s\n", m1, command); } else { /* FIXME: MOM_POSITIONCB and MOM_DONE are so close that a queue is needed. */ if (cbmsg) { ok_(__FILE__,line)(cbmsg==m1 && cbval1==p2 && cbval2==0, "bad callback %x/%lx/%lx from %s, expect %x/%lx\n", cbmsg, cbval1, cbval2, command, m1, p2); cbmsg = 0; /* Mark as read */ cbval1 = cbval2 = WHATEVER; ok_(__FILE__,line)(cbinst==MYCBINST, "callback dwInstance changed to %lx\n", cbinst); } else ok_(__FILE__,line)(m1==0, "Expect callback %x from %s\n", m1, command); } }