[PATCH 2/2] dmime/tests: Add more InitAudio() tests.

Michael Stefaniuc mstefani at winehq.org
Thu May 4 10:17:03 CDT 2017


Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
---
 dlls/dmime/tests/Makefile.in   |   2 +-
 dlls/dmime/tests/performance.c | 124 ++++++++++++++++++++++++++++++++++++++---
 2 files changed, 118 insertions(+), 8 deletions(-)

diff --git a/dlls/dmime/tests/Makefile.in b/dlls/dmime/tests/Makefile.in
index 4d4e718..f4c4703 100644
--- a/dlls/dmime/tests/Makefile.in
+++ b/dlls/dmime/tests/Makefile.in
@@ -1,5 +1,5 @@
 TESTDLL   = dmime.dll
-IMPORTS   = user32 ole32
+IMPORTS   = user32 ole32 dsound
 
 C_SRCS = \
 	dmime.c \
diff --git a/dlls/dmime/tests/performance.c b/dlls/dmime/tests/performance.c
index 8531e38..0932cd9 100644
--- a/dlls/dmime/tests/performance.c
+++ b/dlls/dmime/tests/performance.c
@@ -31,13 +31,59 @@
 DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
 DEFINE_GUID(GUID_Bunk,0xFFFFFFFF,0xFFFF,0xFFFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);
 
+static void create_performance(IDirectMusicPerformance8 **performance, IDirectMusic **dmusic,
+        IDirectSound **dsound, BOOL set_cooplevel)
+{
+    HRESULT hr;
+
+    hr = CoCreateInstance(&CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC_SERVER,
+            &IID_IDirectMusicPerformance8, (void **)performance);
+    ok(hr == S_OK, "DirectMusicPerformance create failed: %08x\n", hr);
+    if (dmusic) {
+        hr = CoCreateInstance(&CLSID_DirectMusic, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusic8,
+                (void **)dmusic);
+        ok(hr == S_OK, "DirectMusic create failed: %08x\n", hr);
+    }
+    if (dsound) {
+        hr = DirectSoundCreate8(NULL, (IDirectSound8 **)dsound, NULL);
+        ok(hr == S_OK, "DirectSoundCreate failed: %08x\n", hr);
+        if (set_cooplevel) {
+            hr = IDirectSound_SetCooperativeLevel(*dsound, GetForegroundWindow(), DSSCL_PRIORITY);
+            ok(hr == S_OK, "SetCooperativeLevel failed: %08x\n", hr);
+        }
+    }
+}
+
+static void destroy_performance(IDirectMusicPerformance8 *performance, IDirectMusic *dmusic,
+        IDirectSound *dsound)
+{
+    HRESULT hr;
+
+    hr = IDirectMusicPerformance8_CloseDown(performance);
+    ok(hr == S_OK, "CloseDown failed: %08x\n", hr);
+    IDirectMusicPerformance8_Release(performance);
+    if (dmusic)
+        IDirectMusic_Release(dmusic);
+    if (dsound)
+        IDirectSound_Release(dsound);
+}
+
+static ULONG get_refcount(void *iface)
+{
+    IUnknown *unknown = iface;
+    IUnknown_AddRef(unknown);
+    return IUnknown_Release(unknown);
+}
+
 static HRESULT test_InitAudio(void)
 {
     IDirectMusicPerformance8 *performance;
+    IDirectMusic *dmusic;
     IDirectSound *dsound;
     IDirectMusicPort *port;
     IDirectMusicAudioPath *path;
     HRESULT hr;
+    ULONG ref;
 
     hr = CoCreateInstance(&CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC_SERVER,
             &IID_IDirectMusicPerformance8, (void **)&performance);
@@ -70,17 +116,81 @@ static HRESULT test_InitAudio(void)
 
     IDirectMusicPerformance8_Release(performance);
 
-    hr = CoCreateInstance(&CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC_SERVER,
-            &IID_IDirectMusicPerformance8, (void**)&performance);
-    ok(hr == S_OK, "CoCreateInstance failed: %08x\n", hr);
-
+    /* Auto generated dmusic and dsound */
+    create_performance(&performance, NULL, NULL, FALSE);
     hr = IDirectMusicPerformance8_InitAudio(performance, NULL, NULL, NULL, 0, 64, 0, NULL);
     ok(hr == S_OK, "InitAudio failed: %08x\n", hr);
+    destroy_performance(performance, NULL, NULL);
+
+    /* dsound without SetCooperativeLevel() */
+    create_performance(&performance, NULL, &dsound, FALSE);
+    hr = IDirectMusicPerformance8_InitAudio(performance, NULL, &dsound, NULL, 0, 0, 0, NULL);
+    todo_wine ok(hr == DSERR_PRIOLEVELNEEDED, "InitAudio failed: %08x\n", hr);
+    destroy_performance(performance, NULL, dsound);
+
+    /* Using the wrong CLSID_DirectSound */
+    create_performance(&performance, NULL, NULL, FALSE);
+    hr = DirectSoundCreate(NULL, &dsound, NULL);
+    ok(hr == S_OK, "DirectSoundCreate failed: %08x\n", hr);
+    hr = IDirectMusicPerformance8_InitAudio(performance, NULL, &dsound, NULL, 0, 0, 0, NULL);
+    todo_wine ok(hr == E_NOINTERFACE, "InitAudio failed: %08x\n", hr);
+    destroy_performance(performance, NULL, dsound);
+
+    /* Init() works with just a CLSID_DirectSound */
+    create_performance(&performance, NULL, NULL, FALSE);
+    hr = DirectSoundCreate(NULL, &dsound, NULL);
+    ok(hr == S_OK, "DirectSoundCreate failed: %08x\n", hr);
+    hr = IDirectSound_SetCooperativeLevel(dsound, GetForegroundWindow(), DSSCL_PRIORITY);
+    ok(hr == S_OK, "SetCooperativeLevel failed: %08x\n", hr);
+    hr = IDirectMusicPerformance8_Init(performance, NULL, dsound, NULL);
+    ok(hr == S_OK, "Init failed: %08x\n", hr);
+    destroy_performance(performance, NULL, dsound);
 
-    hr = IDirectMusicPerformance8_CloseDown(performance);
-    ok(hr == S_OK, "CloseDown failed: %08x\n", hr);
+    /* Init() followed by InitAudio() */
+    create_performance(&performance, NULL, &dsound, TRUE);
+    hr = IDirectMusicPerformance8_Init(performance, NULL, dsound, NULL);
+    ok(hr == S_OK, "Init failed: %08x\n", hr);
+    hr = IDirectMusicPerformance8_InitAudio(performance, NULL, &dsound, NULL, 0, 0, 0, NULL);
+    ok(hr == DMUS_E_ALREADY_INITED, "InitAudio failed: %08x\n", hr);
+    destroy_performance(performance, NULL, dsound);
 
-    IDirectMusicPerformance8_Release(performance);
+    /* Provided dmusic and dsound */
+    create_performance(&performance, &dmusic, &dsound, TRUE);
+    hr = IDirectMusicPerformance8_InitAudio(performance, &dmusic, &dsound, NULL, 0, 64, 0, NULL);
+    ok(hr == S_OK, "InitAudio failed: %08x\n", hr);
+    ref = get_refcount(dsound);
+    ok(ref == 2, "dsound ref count got %d expected 2\n", ref);
+    ref = get_refcount(dmusic);
+    ok(ref == 2, "dmusic ref count got %d expected 2\n", ref);
+    destroy_performance(performance, dmusic, dsound);
+
+    /* Provided dmusic initialized with SetDirectSound */
+    create_performance(&performance, &dmusic, &dsound, TRUE);
+    IDirectMusic_SetDirectSound(dmusic, dsound, NULL);
+    ok(hr == S_OK, "SetDirectSound failed: %08x\n", hr);
+    ref = get_refcount(dsound);
+    todo_wine ok(ref == 2, "dsound ref count got %d expected 2\n", ref);
+    hr = IDirectMusicPerformance8_InitAudio(performance, &dmusic, NULL, NULL, 0, 64, 0, NULL);
+    ok(hr == S_OK, "InitAudio failed: %08x\n", hr);
+    ref = get_refcount(dsound);
+    todo_wine ok(ref == 2, "dsound ref count got %d expected 2\n", ref);
+    ref = get_refcount(dmusic);
+    ok(ref == 2, "dmusic ref count got %d expected 2\n", ref);
+    destroy_performance(performance, dmusic, dsound);
+
+    /* Provided dmusic and dsound, dmusic initialized with SetDirectSound */
+    create_performance(&performance, &dmusic, &dsound, TRUE);
+    IDirectMusic_SetDirectSound(dmusic, dsound, NULL);
+    ok(hr == S_OK, "SetDirectSound failed: %08x\n", hr);
+    ref = get_refcount(dsound);
+    todo_wine ok(ref == 2, "dsound ref count got %d expected 2\n", ref);
+    hr = IDirectMusicPerformance8_InitAudio(performance, &dmusic, &dsound, NULL, 0, 64, 0, NULL);
+    ok(hr == S_OK, "InitAudio failed: %08x\n", hr);
+    ref = get_refcount(dsound);
+    todo_wine ok(ref == 3, "dsound ref count got %d expected 3\n", ref);
+    ref = get_refcount(dmusic);
+    ok(ref == 2, "dmusic ref count got %d expected 2\n", ref);
+    destroy_performance(performance, dmusic, dsound);
 
     return S_OK;
 }
-- 
2.9.3




More information about the wine-patches mailing list