[PATCH 2/2] winmm/tests: Test using a device handle in wave{In,Out}GetDevCaps and wave{In,Out}Open

Andrew Eikum aeikum at codeweavers.com
Fri May 8 08:46:04 CDT 2020


Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
---
 dlls/winmm/tests/capture.c | 17 ++++++++++++++++-
 dlls/winmm/tests/wave.c    | 17 ++++++++++++++++-
 2 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/dlls/winmm/tests/capture.c b/dlls/winmm/tests/capture.c
index 4290c358a9f..cd28ba867d2 100644
--- a/dlls/winmm/tests/capture.c
+++ b/dlls/winmm/tests/capture.c
@@ -130,7 +130,7 @@ static void check_position(int device, HWAVEIN win, DWORD bytes,
 static void wave_in_test_deviceIn(int device, WAVEFORMATEX *pwfx, DWORD format, DWORD flags,
         WAVEINCAPSA *pcaps)
 {
-    HWAVEIN win;
+    HWAVEIN win, win2;
     HANDLE hevent = CreateEventW(NULL, FALSE, FALSE, NULL);
     WAVEHDR frag;
     MMRESULT rc;
@@ -139,6 +139,7 @@ static void wave_in_test_deviceIn(int device, WAVEFORMATEX *pwfx, DWORD format,
     WORD nChannels = pwfx->nChannels;
     WORD wBitsPerSample = pwfx->wBitsPerSample;
     DWORD nSamplesPerSec = pwfx->nSamplesPerSec;
+    WAVEINCAPSW capsW;
 
     win=NULL;
     flags |= CALLBACK_EVENT;
@@ -181,6 +182,20 @@ static void wave_in_test_deviceIn(int device, WAVEFORMATEX *pwfx, DWORD format,
        pwfx->nSamplesPerSec, pwfx->wBitsPerSample,
        pwfx->nChannels, nSamplesPerSec, wBitsPerSample, nChannels);
 
+    /* waveInGetDevCaps allows an open handle instead of a device id */
+    rc=waveInGetDevCapsW((UINT)(UINT_PTR)win,&capsW,sizeof(capsW));
+    ok(rc==MMSYSERR_NOERROR,
+       "waveInGetDevCapsW(%s): MMSYSERR_NOERROR "
+       "expected, got %s\n",dev_name(device),wave_in_error(rc));
+
+    /* waveInOpen does not allow an open handle instead of a device id */
+    rc=waveInOpen(&win2,(UINT)(UINT_PTR)win,pwfx,0,0,CALLBACK_NULL);
+    ok(rc==MMSYSERR_BADDEVICEID,
+       "waveInOpen(%s): MMSYSERR_BADDEVICEID "
+       "expected, got %s\n",dev_name(device),wave_in_error(rc));
+    if(rc==MMSYSERR_NOERROR)
+        waveInClose(win2);
+
     /* Check that the position is 0 at start */
     check_position(device, win, 0, pwfx);
 
diff --git a/dlls/winmm/tests/wave.c b/dlls/winmm/tests/wave.c
index f9fc5c5aad1..98d32d9b48f 100644
--- a/dlls/winmm/tests/wave.c
+++ b/dlls/winmm/tests/wave.c
@@ -599,9 +599,10 @@ static void wave_out_test_deviceOut(int device, double duration, int headers, in
         WAVEFORMATEX *pwfx, DWORD format, DWORD flags, WAVEOUTCAPSA *pcaps, BOOL interactive,
         BOOL sine, BOOL pause)
 {
-    HWAVEOUT wout;
+    HWAVEOUT wout, wout2;
     HANDLE hevent = CreateEventW(NULL, FALSE, FALSE, NULL);
     WAVEHDR *frags = 0;
+    WAVEOUTCAPSW capsW;
     MMRESULT rc;
     DWORD volume;
     WORD nChannels = pwfx->nChannels;
@@ -705,6 +706,20 @@ static void wave_out_test_deviceOut(int device, double duration, int headers, in
     ok(has_volume ? rc==MMSYSERR_NOERROR : rc==MMSYSERR_NOTSUPPORTED,
        "waveOutGetVolume(%s): rc=%s\n",dev_name(device),wave_out_error(rc));
 
+    /* waveOutGetDevCaps allows an open handle instead of a device id */
+    rc=waveOutGetDevCapsW((UINT)(UINT_PTR)wout,&capsW,sizeof(capsW));
+    ok(rc==MMSYSERR_NOERROR,
+       "waveOutGetDevCapsW(%s): MMSYSERR_NOERROR "
+       "expected, got %s\n",dev_name(device),wave_out_error(rc));
+
+    /* waveOutOpen does not allow an open handle instead of a device id */
+    rc=waveOutOpen(&wout2,(UINT)(UINT_PTR)wout,pwfx,0,0,CALLBACK_NULL);
+    ok(rc==MMSYSERR_BADDEVICEID,
+       "waveOutOpen(%s): MMSYSERR_BADDEVICEID "
+       "expected, got %s\n",dev_name(device),wave_out_error(rc));
+    if(rc==MMSYSERR_NOERROR)
+        waveOutClose(wout2);
+
     /* make sure fragment length is a multiple of block size */
     frag_length = ((length / headers) / pwfx->nBlockAlign) * pwfx->nBlockAlign;
 
-- 
2.26.2




More information about the wine-devel mailing list