Module: wine Branch: master Commit: 32c23cbc80a3ce9690e255f0fb31e1d27114b99d URL: http://source.winehq.org/git/wine.git/?a=commit;h=32c23cbc80a3ce9690e255f0fb...
Author: Jörg Höhle hoehle@users.sourceforge.net Date: Wed Jan 18 20:30:31 2012 +0100
winmm/tests: Properly recover from the WAVERR_STILLPLAYING case.
---
dlls/winmm/tests/wave.c | 43 +++++++++++++++++++++++++++++++------------ 1 files changed, 31 insertions(+), 12 deletions(-)
diff --git a/dlls/winmm/tests/wave.c b/dlls/winmm/tests/wave.c index a7614a5..a96d088 100644 --- a/dlls/winmm/tests/wave.c +++ b/dlls/winmm/tests/wave.c @@ -684,7 +684,8 @@ static void wave_out_test_deviceOut(int device, double duration, if (rc!=MMSYSERR_NOERROR) goto EXIT;
- WaitForSingleObject(hevent,10000); + rc=WaitForSingleObject(hevent,9000); + ok(rc==WAIT_OBJECT_0, "missing WOM_OPEN notification\n");
ok(pwfx->nChannels==nChannels && pwfx->wBitsPerSample==wBitsPerSample && @@ -787,7 +788,8 @@ static void wave_out_test_deviceOut(int device, double duration, ok(rc==MMSYSERR_NOERROR,"waveOutWrite(%s, header[%d]): rc=%s\n", dev_name(device),(i+1)%headers,wave_out_error(rc)); } - WaitForSingleObject(hevent,10000); + rc=WaitForSingleObject(hevent,8000); + ok(rc==WAIT_OBJECT_0, "missing WOM_DONE notification\n"); } }
@@ -807,12 +809,29 @@ static void wave_out_test_deviceOut(int device, double duration, "waveOutUnprepareHeader(%s): rc=%s\n",dev_name(device), wave_out_error(rc)); } - HeapFree(GetProcessHeap(), 0, buffer); - rc=waveOutClose(wout); ok(rc==MMSYSERR_NOERROR,"waveOutClose(%s): rc=%s\n",dev_name(device), wave_out_error(rc)); - WaitForSingleObject(hevent,10000); + if (rc==WAVERR_STILLPLAYING) { + /* waveOutReset ought to return all buffers s.t. waveOutClose succeeds */ + rc=waveOutReset(wout); + ok(rc==MMSYSERR_NOERROR,"waveOutReset(%s): rc=%s\n",dev_name(device), + wave_out_error(rc)); + + for (i = 0; i < headers; i++) { + rc=waveOutUnprepareHeader(wout, &frags[i], sizeof(frags[0])); + ok(rc==MMSYSERR_NOERROR, + "waveOutUnprepareHeader(%s): rc=%s\n",dev_name(device), + wave_out_error(rc)); + } + rc=waveOutClose(wout); + ok(rc==MMSYSERR_NOERROR,"waveOutClose(%s): rc=%s\n",dev_name(device), + wave_out_error(rc)); + } + rc=WaitForSingleObject(hevent,1500); + ok(rc==WAIT_OBJECT_0, "missing WOM_CLOSE notification\n"); + + HeapFree(GetProcessHeap(), 0, buffer); EXIT: if ((flags & CALLBACK_TYPEMASK) == CALLBACK_THREAD) { PostThreadMessage(thread_id, WM_APP, 0, 0); @@ -970,20 +989,20 @@ static void wave_out_test_device(UINT_PTR device) format.nBlockAlign=format.nChannels*format.wBitsPerSample/8; format.nAvgBytesPerSec=format.nSamplesPerSec*format.nBlockAlign; format.cbSize=0; - wave_out_test_deviceOut(device,1.0,1,0,&format,WAVE_FORMAT_2M08, + wave_out_test_deviceOut(device,0.6,1,0,&format,WAVE_FORMAT_2M08, CALLBACK_EVENT,&capsA,TRUE,FALSE,FALSE); - wave_out_test_deviceOut(device,1.0,1,0,&format,WAVE_FORMAT_2M08, + wave_out_test_deviceOut(device,0.6,1,0,&format,WAVE_FORMAT_2M08, CALLBACK_EVENT,&capsA,TRUE,FALSE,TRUE); - wave_out_test_deviceOut(device,1.0,1,0,&format,WAVE_FORMAT_2M08, + wave_out_test_deviceOut(device,0.6,1,0,&format,WAVE_FORMAT_2M08, CALLBACK_FUNCTION,&capsA,TRUE,FALSE,FALSE); - wave_out_test_deviceOut(device,1.0,1,0,&format,WAVE_FORMAT_2M08, + wave_out_test_deviceOut(device,0.6,1,0,&format,WAVE_FORMAT_2M08, CALLBACK_FUNCTION,&capsA,TRUE,FALSE,TRUE); - wave_out_test_deviceOut(device,1.0,1,0,&format,WAVE_FORMAT_2M08, + wave_out_test_deviceOut(device,0.6,1,0,&format,WAVE_FORMAT_2M08, CALLBACK_THREAD,&capsA,TRUE,FALSE,FALSE); - wave_out_test_deviceOut(device,1.0,1,0,&format,WAVE_FORMAT_2M08, + wave_out_test_deviceOut(device,0.6,1,0,&format,WAVE_FORMAT_2M08, CALLBACK_THREAD,&capsA,TRUE,FALSE,TRUE);
- wave_out_test_deviceOut(device,1.0,10,0,&format,WAVE_FORMAT_2M08, + wave_out_test_deviceOut(device,0.8,10,0,&format,WAVE_FORMAT_2M08, CALLBACK_EVENT,&capsA,TRUE,FALSE,FALSE); wave_out_test_deviceOut(device,1.0,5,1,&format,WAVE_FORMAT_2M08, CALLBACK_EVENT,&capsA,TRUE,FALSE,FALSE);