dsound compact fix with test
Robert Reif
reif at earthlink.net
Sun Jul 25 16:15:58 CDT 2004
Added error checking to IDirectSound_Compact.
Added tests for correct Compact behavior.
Refactored common test code into subroutines.
-------------- next part --------------
Index: dlls/dsound/dsound.c
===================================================================
RCS file: /home/wine/wine/dlls/dsound/dsound.c,v
retrieving revision 1.8
diff -u -r1.8 dsound.c
--- dlls/dsound/dsound.c 23 Jul 2004 19:06:31 -0000 1.8
+++ dlls/dsound/dsound.c 25 Jul 2004 21:06:56 -0000
@@ -612,6 +612,16 @@
ICOM_THIS(IDirectSoundImpl,iface);
TRACE("(%p)\n",This);
+ if (This->initialized == FALSE) {
+ WARN("not initialized\n");
+ return DSERR_UNINITIALIZED;
+ }
+
+ if (This->priolevel != DSSCL_PRIORITY) {
+ WARN("incorrect priority level\n");
+ return DSERR_PRIOLEVELNEEDED;
+ }
+
return DS_OK;
}
Index: dlls/dsound/tests/ds3d.c
===================================================================
RCS file: /home/wine/wine/dlls/dsound/tests/ds3d.c,v
retrieving revision 1.5
diff -u -r1.5 ds3d.c
--- dlls/dsound/tests/ds3d.c 23 Jul 2004 22:58:46 -0000 1.5
+++ dlls/dsound/tests/ds3d.c 25 Jul 2004 21:06:56 -0000
@@ -694,50 +694,6 @@
return rc;
}
-static HRESULT test_dsound(LPGUID lpGuid)
-{
- HRESULT rc;
- LPDIRECTSOUND dso=NULL;
- DWORD speaker_config, new_speaker_config;
- int ref;
-
- /* The basic DirectSound tests are performed in the playback test */
-
- /* Create the DirectSound object */
- rc=DirectSoundCreate(lpGuid,&dso,NULL);
- ok(rc==DS_OK,"DirectSoundCreate failed: 0x%lx\n",rc);
- if (rc!=DS_OK)
- return rc;
-
- rc=IDirectSound_GetSpeakerConfig(dso,0);
- ok(rc==DSERR_INVALIDPARAM,"GetSpeakerConfig should have failed: 0x%lx\n",rc);
-
- rc=IDirectSound_GetSpeakerConfig(dso,&speaker_config);
- ok(rc==DS_OK,"GetSpeakerConfig failed: 0x%lx\n",rc);
- if (rc==DS_OK) {
- trace(" DirectSound SpeakerConfig: 0x%08lx\n", speaker_config);
- }
-
- speaker_config = DSSPEAKER_COMBINED(DSSPEAKER_STEREO,DSSPEAKER_GEOMETRY_WIDE);
- rc=IDirectSound_SetSpeakerConfig(dso,speaker_config);
- ok(rc==DS_OK,"SetSpeakerConfig failed: 0x%lx\n",rc);
- if (rc==DS_OK) {
- rc=IDirectSound_GetSpeakerConfig(dso,&new_speaker_config);
- ok(rc==DS_OK,"GetSpeakerConfig failed: 0x%lx\n",rc);
- if (rc==DS_OK)
- ok(speaker_config==new_speaker_config,"SetSpeakerConfig failed to set speaker config: expected 0x%08lx, got 0x%08lx\n",
- speaker_config,new_speaker_config);
- }
-
- /* Release the DirectSound object */
- ref=IDirectSound_Release(dso);
- ok(ref==0,"IDirectSound_Release has %d references, should have 0\n",ref);
- if (ref!=0)
- return DSERR_GENERIC;
-
- return DS_OK;
-}
-
static HRESULT test_primary(LPGUID lpGuid)
{
HRESULT rc;
@@ -959,7 +915,6 @@
LPCSTR lpcstrModule, LPVOID lpContext)
{
trace("*** Testing %s - %s\n",lpcstrDescription,lpcstrModule);
- test_dsound(lpGuid);
trace(" Testing the primary buffer\n");
test_primary(lpGuid);
Index: dlls/dsound/tests/dsound.c
===================================================================
RCS file: /home/wine/wine/dlls/dsound/tests/dsound.c,v
retrieving revision 1.31
diff -u -r1.31 dsound.c
--- dlls/dsound/tests/dsound.c 22 Jul 2004 20:35:36 -0000 1.31
+++ dlls/dsound/tests/dsound.c 25 Jul 2004 21:06:57 -0000
@@ -40,411 +40,338 @@
#include "dsound_test.h"
-static void dsound_dsound_tests()
+static void dsound_test(LPDIRECTSOUND dso, BOOL initialized, LPCGUID lpGuid)
{
HRESULT rc;
- LPDIRECTSOUND dso=NULL;
DSCAPS dscaps;
int ref;
IUnknown * unknown;
IDirectSound * ds;
IDirectSound8 * ds8;
+ DWORD speaker_config, new_speaker_config;
- /* try the COM class factory method of creation */
- rc=CoCreateInstance(&CLSID_DirectSound, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectSound, (void**)&dso);
- ok(rc==S_OK,"CoCreateInstance failed: %s\n",DXGetErrorString8(rc));
- if (dso) {
- /* Try to Query for objects */
- rc=IDirectSound_QueryInterface(dso,&IID_IUnknown,(LPVOID*)&unknown);
- ok(rc==DS_OK,"IDirectSound_QueryInterface(IID_IUnknown) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound_Release(unknown);
+ /* Try to Query for objects */
+ rc=IDirectSound_QueryInterface(dso,&IID_IUnknown,(LPVOID*)&unknown);
+ ok(rc==DS_OK,"IDirectSound_QueryInterface(IID_IUnknown) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (rc==DS_OK)
+ IDirectSound_Release(unknown);
- rc=IDirectSound_QueryInterface(dso,&IID_IDirectSound,(LPVOID*)&ds);
- ok(rc==DS_OK,"IDirectSound_QueryInterface(IID_IDirectSound) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound_Release(ds);
+ rc=IDirectSound_QueryInterface(dso,&IID_IDirectSound,(LPVOID*)&ds);
+ ok(rc==DS_OK,"IDirectSound_QueryInterface(IID_IDirectSound) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (rc==DS_OK)
+ IDirectSound_Release(ds);
- rc=IDirectSound_QueryInterface(dso,&IID_IDirectSound8,(LPVOID*)&ds8);
- ok(rc==E_NOINTERFACE,"IDirectSound_QueryInterface(IID_IDirectSound8) should have failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound8_Release(ds8);
+ rc=IDirectSound_QueryInterface(dso,&IID_IDirectSound8,(LPVOID*)&ds8);
+ ok(rc==E_NOINTERFACE,"IDirectSound_QueryInterface(IID_IDirectSound8) "
+ "should have failed: %s\n",DXGetErrorString8(rc));
+ if (rc==DS_OK)
+ IDirectSound8_Release(ds8);
+ if (initialized == FALSE) {
/* try unitialized object */
rc=IDirectSound_GetCaps(dso,0);
- ok(rc==DSERR_UNINITIALIZED,"GetCaps should have returned DSERR_UNINITIALIZED, returned: %s\n",DXGetErrorString8(rc));
-
- rc=IDirectSound_Initialize(dso,NULL);
- ok(rc==DS_OK,"IDirectSound_Initialize(NULL) failed: %s\n",DXGetErrorString8(rc));
+ ok(rc==DSERR_UNINITIALIZED,"IDirectSound_GetCaps(NULL) "
+ "should have returned DSERR_UNINITIALIZED, returned: %s\n",
+ DXGetErrorString8(rc));
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound_GetCaps(dso,0);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
-
- ZeroMemory(&dscaps, sizeof(dscaps));
-
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound_GetCaps(dso,&dscaps);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
-
- dscaps.dwSize=sizeof(dscaps);
-
- /* DSOUND: Running on a certified driver */
rc=IDirectSound_GetCaps(dso,&dscaps);
- ok(rc==DS_OK,"GetCaps failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK) {
- trace(" DirectSound Caps: flags=0x%08lx secondary min=%ld max=%ld\n",
- dscaps.dwFlags,dscaps.dwMinSecondarySampleRate,
- dscaps.dwMaxSecondarySampleRate);
- }
-
- ref=IDirectSound_Release(dso);
- ok(ref==0,"IDirectSound_Release has %d references, should have 0\n",ref);
+ ok(rc==DSERR_UNINITIALIZED,"IDirectSound_GetCaps() "
+ "should have returned DSERR_UNINITIALIZED, returned: %s\n",
+ DXGetErrorString8(rc));
+
+ rc=IDirectSound_Compact(dso);
+ ok(rc==DSERR_UNINITIALIZED,"IDirectSound_Compact() "
+ "should have returned DSERR_UNINITIALIZED, returned: %s\n",
+ DXGetErrorString8(rc));
+
+ rc=IDirectSound_GetSpeakerConfig(dso,&speaker_config);
+ ok(rc==DSERR_UNINITIALIZED,"IDirectSound_GetSpeakerConfig() "
+ "should have returned DSERR_UNINITIALIZED, returned: %s\n",
+ DXGetErrorString8(rc));
+
+ rc=IDirectSound_Initialize(dso,lpGuid);
+ ok(rc==DS_OK,"IDirectSound_Initialize() failed: %s\n",
+ DXGetErrorString8(rc));
}
- /* try with no device specified */
- rc=DirectSoundCreate(NULL,&dso,NULL);
- ok(rc==S_OK,"DirectSoundCreate(NULL) failed: %s\n",DXGetErrorString8(rc));
- if (dso) {
- /* Try to Query for objects */
- rc=IDirectSound_QueryInterface(dso,&IID_IUnknown,(LPVOID*)&unknown);
- ok(rc==DS_OK,"IDirectSound_QueryInterface(IID_IUnknown) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound_Release(unknown);
-
- rc=IDirectSound_QueryInterface(dso,&IID_IDirectSound,(LPVOID*)&ds);
- ok(rc==DS_OK,"IDirectSound_QueryInterface(IID_IDirectSound) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound_Release(ds);
+ /* DSOUND: Error: Invalid caps buffer */
+ rc=IDirectSound_GetCaps(dso,0);
+ ok(rc==DSERR_INVALIDPARAM,"IDirectSound_GetCaps(NULL) "
+ "should have failed: %s\n",DXGetErrorString8(rc));
- rc=IDirectSound_QueryInterface(dso,&IID_IDirectSound8,(LPVOID*)&ds8);
- ok(rc==E_NOINTERFACE,"IDirectSound_QueryInterface(IID_IDirectSound8) should have failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound8_Release(ds8);
+ ZeroMemory(&dscaps, sizeof(dscaps));
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound_GetCaps(dso,0);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
+ /* DSOUND: Error: Invalid caps buffer */
+ rc=IDirectSound_GetCaps(dso,&dscaps);
+ ok(rc==DSERR_INVALIDPARAM,"IDirectSound_GetCaps() "
+ "should have failed: %s\n",DXGetErrorString8(rc));
- ZeroMemory(&dscaps, sizeof(dscaps));
+ dscaps.dwSize=sizeof(dscaps);
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound_GetCaps(dso,&dscaps);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
+ /* DSOUND: Running on a certified driver */
+ rc=IDirectSound_GetCaps(dso,&dscaps);
+ ok(rc==DS_OK,"IDirectSound_GetCaps() failed: %s\n",DXGetErrorString8(rc));
- dscaps.dwSize=sizeof(dscaps);
+ rc=IDirectSound_Compact(dso);
+ ok(rc==DSERR_PRIOLEVELNEEDED,"IDirectSound_Compact() failed: %s\n",DXGetErrorString8(rc));
- /* DSOUND: Running on a certified driver */
- rc=IDirectSound_GetCaps(dso,&dscaps);
- ok(rc==DS_OK,"GetCaps failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK) {
- trace(" DirectSound Caps: flags=0x%08lx secondary min=%ld max=%ld\n",
- dscaps.dwFlags,dscaps.dwMinSecondarySampleRate,
- dscaps.dwMaxSecondarySampleRate);
- }
+ rc=IDirectSound_SetCooperativeLevel(dso,get_hwnd(),DSSCL_PRIORITY);
+ ok(rc==DS_OK,"IDirectSound_SetCooperativeLevel() failed: %s\n",DXGetErrorString8(rc));
- ref=IDirectSound_Release(dso);
- ok(ref==0,"IDirectSound_Release has %d references, should have 0\n",ref);
+ rc=IDirectSound_Compact(dso);
+ ok(rc==DS_OK,"IDirectSound_Compact() failed: %s\n",DXGetErrorString8(rc));
+
+ rc=IDirectSound_GetSpeakerConfig(dso,0);
+ ok(rc==DSERR_INVALIDPARAM,"IDirectSound_GetSpeakerConfig(NULL) "
+ "should have failed: %s\n",DXGetErrorString8(rc));
+
+ rc=IDirectSound_GetSpeakerConfig(dso,&speaker_config);
+ ok(rc==DS_OK,"IDirectSound_GetSpeakerConfig() failed: %s\n",
+ DXGetErrorString8(rc));
+
+ speaker_config = DSSPEAKER_COMBINED(DSSPEAKER_STEREO,
+ DSSPEAKER_GEOMETRY_WIDE);
+ rc=IDirectSound_SetSpeakerConfig(dso,speaker_config);
+ ok(rc==DS_OK,"IDirectSound_SetSpeakerConfig() failed: %s\n",
+ DXGetErrorString8(rc));
+ if (rc==DS_OK) {
+ rc=IDirectSound_GetSpeakerConfig(dso,&new_speaker_config);
+ ok(rc==DS_OK,"IDirectSound_GetSpeakerConfig() failed: %s\n",
+ DXGetErrorString8(rc));
+ if (rc==DS_OK)
+ ok(speaker_config==new_speaker_config,
+ "IDirectSound_GetSpeakerConfig() failed to set speaker config: "
+ "expected 0x%08lx, got 0x%08lx\n",
+ speaker_config,new_speaker_config);
}
- /* try with default playback device specified */
- rc=DirectSoundCreate(&DSDEVID_DefaultPlayback,&dso,NULL);
- ok(rc==S_OK,"DirectSoundCreate(DSDEVID_DefaultPlayback) failed: %s\n",DXGetErrorString8(rc));
- if (dso) {
- /* Try to Query for objects */
- rc=IDirectSound_QueryInterface(dso,&IID_IUnknown,(LPVOID*)&unknown);
- ok(rc==DS_OK,"IDirectSound_QueryInterface(IID_IUnknown) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound_Release(unknown);
-
- rc=IDirectSound_QueryInterface(dso,&IID_IDirectSound,(LPVOID*)&ds);
- ok(rc==DS_OK,"IDirectSound_QueryInterface(IID_IDirectSound) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound_Release(ds);
-
- rc=IDirectSound_QueryInterface(dso,&IID_IDirectSound8,(LPVOID*)&ds8);
- ok(rc==E_NOINTERFACE,"IDirectSound_QueryInterface(IID_IDirectSound8) should have failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound8_Release(ds8);
-
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound_GetCaps(dso,0);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
+ ref=IDirectSound_Release(dso);
+ ok(ref==0,"IDirectSound_Release() has %d references, should have 0\n",ref);
+}
- ZeroMemory(&dscaps, sizeof(dscaps));
+static void dsound_dsound_tests()
+{
+ HRESULT rc;
+ LPDIRECTSOUND dso=NULL;
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound_GetCaps(dso,&dscaps);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
+ trace("Testing IDirectSound\n");
- dscaps.dwSize=sizeof(dscaps);
+ /* try the COM class factory method of creation with no device specified */
+ rc=CoCreateInstance(&CLSID_DirectSound, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IDirectSound, (void**)&dso);
+ ok(rc==S_OK,"CoCreateInstance(CLSID_DirectSound) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (dso)
+ dsound_test(dso, FALSE, NULL);
+
+ /* try the COM class factory method of creation with default playback
+ * device specified */
+ rc=CoCreateInstance(&CLSID_DirectSound, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IDirectSound, (void**)&dso);
+ ok(rc==S_OK,"CoCreateInstance(CLSID_DirectSound) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (dso)
+ dsound_test(dso, FALSE, &DSDEVID_DefaultPlayback);
+
+ /* try the COM class factory method of creation with default voice
+ * playback device specified */
+ rc=CoCreateInstance(&CLSID_DirectSound, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IDirectSound, (void**)&dso);
+ ok(rc==S_OK,"CoCreateInstance(CLSID_DirectSound) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (dso)
+ dsound_test(dso, FALSE, &DSDEVID_DefaultVoicePlayback);
- /* DSOUND: Running on a certified driver */
- rc=IDirectSound_GetCaps(dso,&dscaps);
- ok(rc==DS_OK,"GetCaps failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK) {
- trace(" DirectSound Caps: flags=0x%08lx secondary min=%ld max=%ld\n",
- dscaps.dwFlags,dscaps.dwMinSecondarySampleRate,
- dscaps.dwMaxSecondarySampleRate);
- }
+ /* try with no device specified */
+ rc=DirectSoundCreate(NULL,&dso,NULL);
+ ok(rc==S_OK,"DirectSoundCreate(NULL) failed: %s\n",DXGetErrorString8(rc));
+ if (dso)
+ dsound_test(dso, TRUE, NULL);
- ref=IDirectSound_Release(dso);
- ok(ref==0,"IDirectSound_Release has %d references, should have 0\n",ref);
- }
+ /* try with default playback device specified */
+ rc=DirectSoundCreate(&DSDEVID_DefaultPlayback,&dso,NULL);
+ ok(rc==S_OK,"DirectSoundCreate(DSDEVID_DefaultPlayback) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (dso)
+ dsound_test(dso, TRUE, NULL);
/* try with default voice playback device specified */
rc=DirectSoundCreate(&DSDEVID_DefaultVoicePlayback,&dso,NULL);
- ok(rc==S_OK,"DirectSoundCreate(DSDEVID_DefaultVoicePlayback) failed: %s\n",DXGetErrorString8(rc));
- if (dso) {
- /* Try to Query for objects */
- rc=IDirectSound_QueryInterface(dso,&IID_IUnknown,(LPVOID*)&unknown);
- ok(rc==DS_OK,"IDirectSound_QueryInterface(IID_IUnknown) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound_Release(unknown);
-
- rc=IDirectSound_QueryInterface(dso,&IID_IDirectSound,(LPVOID*)&ds);
- ok(rc==DS_OK,"IDirectSound_QueryInterface(IID_IDirectSound) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound_Release(ds);
-
- rc=IDirectSound_QueryInterface(dso,&IID_IDirectSound8,(LPVOID*)&ds8);
- ok(rc==E_NOINTERFACE,"IDirectSound_QueryInterface(IID_IDirectSound8) should have failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound8_Release(ds8);
-
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound_GetCaps(dso,0);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
-
- ZeroMemory(&dscaps, sizeof(dscaps));
-
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound_GetCaps(dso,&dscaps);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
-
- dscaps.dwSize=sizeof(dscaps);
-
- /* DSOUND: Running on a certified driver */
- rc=IDirectSound_GetCaps(dso,&dscaps);
- ok(rc==DS_OK,"GetCaps failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK) {
- trace(" DirectSound Caps: flags=0x%08lx secondary min=%ld max=%ld\n",
- dscaps.dwFlags,dscaps.dwMinSecondarySampleRate,
- dscaps.dwMaxSecondarySampleRate);
- }
-
- ref=IDirectSound_Release(dso);
- ok(ref==0,"IDirectSound_Release has %d references, should have 0\n",ref);
- }
+ ok(rc==S_OK,"DirectSoundCreate(DSDEVID_DefaultVoicePlayback) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (dso)
+ dsound_test(dso, TRUE, NULL);
}
-static void dsound_dsound8_tests()
+static void dsound8_test(LPDIRECTSOUND8 dso, BOOL initialized, LPCGUID lpGuid)
{
HRESULT rc;
- LPDIRECTSOUND8 dso=NULL;
DSCAPS dscaps;
int ref;
IUnknown * unknown;
IDirectSound * ds;
IDirectSound8 * ds8;
+ DWORD speaker_config, new_speaker_config;
- /* try the COM class factory method of creation */
- rc=CoCreateInstance(&CLSID_DirectSound8, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectSound8, (void**)&dso);
- ok(rc==S_OK,"CoCreateInstance failed: %s\n",DXGetErrorString8(rc));
- if (dso) {
- /* Try to Query for objects */
- rc=IDirectSound8_QueryInterface(dso,&IID_IUnknown,(LPVOID*)&unknown);
- ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IUnknown) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound8_Release(unknown);
+ /* Try to Query for objects */
+ rc=IDirectSound8_QueryInterface(dso,&IID_IUnknown,(LPVOID*)&unknown);
+ ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IUnknown) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (rc==DS_OK)
+ IDirectSound8_Release(unknown);
- rc=IDirectSound8_QueryInterface(dso,&IID_IDirectSound,(LPVOID*)&ds);
- ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IDirectSound) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound_Release(ds);
+ rc=IDirectSound8_QueryInterface(dso,&IID_IDirectSound,(LPVOID*)&ds);
+ ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IDirectSound) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (rc==DS_OK)
+ IDirectSound_Release(ds);
- rc=IDirectSound8_QueryInterface(dso,&IID_IDirectSound8,(LPVOID*)&ds8);
- ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IDirectSound8) should have failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound8_Release(ds8);
+ rc=IDirectSound8_QueryInterface(dso,&IID_IDirectSound8,(LPVOID*)&ds8);
+ ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IDirectSound8) "
+ "should have failed: %s\n",DXGetErrorString8(rc));
+ if (rc==DS_OK)
+ IDirectSound8_Release(ds8);
+ if (initialized == FALSE) {
/* try unitialized object */
rc=IDirectSound8_GetCaps(dso,0);
- ok(rc==DSERR_UNINITIALIZED,"GetCaps should have returned DSERR_UNINITIALIZED, returned: %s\n",DXGetErrorString8(rc));
+ ok(rc==DSERR_UNINITIALIZED,"IDirectSound8_GetCaps(NULL) "
+ "should have returned DSERR_UNINITIALIZED, returned: %s\n",
+ DXGetErrorString8(rc));
- rc=IDirectSound8_Initialize(dso,NULL);
- ok(rc==DS_OK,"IDirectSound_Initialize(NULL) failed: %s\n",DXGetErrorString8(rc));
-
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound8_GetCaps(dso,0);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
-
- ZeroMemory(&dscaps, sizeof(dscaps));
-
- /* DSOUND: Error: Invalid caps buffer */
rc=IDirectSound8_GetCaps(dso,&dscaps);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
-
- dscaps.dwSize=sizeof(dscaps);
-
- /* DSOUND: Running on a certified driver */
- rc=IDirectSound8_GetCaps(dso,&dscaps);
- ok(rc==DS_OK,"GetCaps failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK) {
- trace(" DirectSound Caps: flags=0x%08lx secondary min=%ld max=%ld\n",
- dscaps.dwFlags,dscaps.dwMinSecondarySampleRate,
- dscaps.dwMaxSecondarySampleRate);
- }
-
- ref=IDirectSound8_Release(dso);
- ok(ref==0,"IDirectSound8_Release has %d references, should have 0\n",ref);
+ ok(rc==DSERR_UNINITIALIZED,"IDirectSound8_GetCaps() "
+ "should have returned DSERR_UNINITIALIZED, returned: %s\n",
+ DXGetErrorString8(rc));
+
+ rc=IDirectSound8_Compact(dso);
+ ok(rc==DSERR_UNINITIALIZED,"IDirectSound8_Compact() "
+ "should have returned DSERR_UNINITIALIZED, returned: %s\n",
+ DXGetErrorString8(rc));
+
+ rc=IDirectSound8_GetSpeakerConfig(dso,&speaker_config);
+ ok(rc==DSERR_UNINITIALIZED,"IDirectSound8_GetSpeakerConfig() "
+ "should have returned DSERR_UNINITIALIZED, returned: %s\n",
+ DXGetErrorString8(rc));
+
+ rc=IDirectSound8_Initialize(dso,lpGuid);
+ ok(rc==DS_OK,"IDirectSound8_Initialize() failed: %s\n",
+ DXGetErrorString8(rc));
}
- /* try with no device specified */
- rc=DirectSoundCreate8(NULL,&dso,NULL);
- ok(rc==S_OK,"DirectSoundCreate8 failed: %s\n",DXGetErrorString8(rc));
- if (dso) {
- /* Try to Query for objects */
- rc=IDirectSound8_QueryInterface(dso,&IID_IUnknown,(LPVOID*)&unknown);
- ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IUnknown) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound8_Release(unknown);
-
- rc=IDirectSound8_QueryInterface(dso,&IID_IDirectSound,(LPVOID*)&ds);
- ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IDirectSound) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound_Release(ds);
+ /* DSOUND: Error: Invalid caps buffer */
+ rc=IDirectSound8_GetCaps(dso,0);
+ ok(rc==DSERR_INVALIDPARAM,"IDirectSound8_GetCaps() "
+ "should have failed: %s\n", DXGetErrorString8(rc));
- rc=IDirectSound8_QueryInterface(dso,&IID_IDirectSound8,(LPVOID*)&ds8);
- ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IDirectSound8) should have failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound8_Release(ds8);
+ ZeroMemory(&dscaps, sizeof(dscaps));
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound8_GetCaps(dso,0);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
+ /* DSOUND: Error: Invalid caps buffer */
+ rc=IDirectSound8_GetCaps(dso,&dscaps);
+ ok(rc==DSERR_INVALIDPARAM,"IDirectSound8_GetCaps() "
+ "should have failed: %s\n", DXGetErrorString8(rc));
- ZeroMemory(&dscaps, sizeof(dscaps));
+ dscaps.dwSize=sizeof(dscaps);
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound8_GetCaps(dso,&dscaps);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
+ /* DSOUND: Running on a certified driver */
+ rc=IDirectSound8_GetCaps(dso,&dscaps);
+ ok(rc==DS_OK,"IDirectSound8_GetCaps() failed: %s\n",DXGetErrorString8(rc));
- dscaps.dwSize=sizeof(dscaps);
+ rc=IDirectSound_Compact(dso);
+ ok(rc==DSERR_PRIOLEVELNEEDED,"IDirectSound_Compact() failed: %s\n",DXGetErrorString8(rc));
- /* DSOUND: Running on a certified driver */
- rc=IDirectSound8_GetCaps(dso,&dscaps);
- ok(rc==DS_OK,"GetCaps failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK) {
- trace(" DirectSound Caps: flags=0x%08lx secondary min=%ld max=%ld\n",
- dscaps.dwFlags,dscaps.dwMinSecondarySampleRate,
- dscaps.dwMaxSecondarySampleRate);
- }
+ rc=IDirectSound_SetCooperativeLevel(dso,get_hwnd(),DSSCL_PRIORITY);
+ ok(rc==DS_OK,"IDirectSound_SetCooperativeLevel() failed: %s\n",DXGetErrorString8(rc));
- ref=IDirectSound8_Release(dso);
- ok(ref==0,"IDirectSound_Release has %d references, should have 0\n",ref);
+ rc=IDirectSound8_Compact(dso);
+ ok(rc==DS_OK,"IDirectSound8_Compact() failed: %s\n",DXGetErrorString8(rc));
+
+ rc=IDirectSound8_GetSpeakerConfig(dso,0);
+ ok(rc==DSERR_INVALIDPARAM,"IDirectSound8_GetSpeakerConfig(NULL) "
+ "should have failed: %s\n",DXGetErrorString8(rc));
+
+ rc=IDirectSound8_GetSpeakerConfig(dso,&speaker_config);
+ ok(rc==DS_OK,"IDirectSound8_GetSpeakerConfig() failed: %s\n",
+ DXGetErrorString8(rc));
+
+ speaker_config = DSSPEAKER_COMBINED(DSSPEAKER_STEREO,
+ DSSPEAKER_GEOMETRY_WIDE);
+ rc=IDirectSound8_SetSpeakerConfig(dso,speaker_config);
+ ok(rc==DS_OK,"IDirectSound8_SetSpeakerConfig() failed: %s\n",
+ DXGetErrorString8(rc));
+ if (rc==DS_OK) {
+ rc=IDirectSound8_GetSpeakerConfig(dso,&new_speaker_config);
+ ok(rc==DS_OK,"IDirectSound8_GetSpeakerConfig() failed: %s\n",
+ DXGetErrorString8(rc));
+ if (rc==DS_OK)
+ ok(speaker_config==new_speaker_config,
+ "IDirectSound8_GetSpeakerConfig() failed to set speaker config: "
+ "expected 0x%08lx, got 0x%08lx\n",
+ speaker_config,new_speaker_config);
}
- /* try with default playback device specified */
- rc=DirectSoundCreate8(&DSDEVID_DefaultPlayback,&dso,NULL);
- ok(rc==S_OK,"DirectSoundCreate8 failed: %s\n",DXGetErrorString8(rc));
- if (dso) {
- /* Try to Query for objects */
- rc=IDirectSound8_QueryInterface(dso,&IID_IUnknown,(LPVOID*)&unknown);
- ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IUnknown) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound8_Release(unknown);
-
- rc=IDirectSound8_QueryInterface(dso,&IID_IDirectSound,(LPVOID*)&ds);
- ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IDirectSound) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound_Release(ds);
-
- rc=IDirectSound8_QueryInterface(dso,&IID_IDirectSound8,(LPVOID*)&ds8);
- ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IDirectSound8) should have failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound8_Release(ds8);
+ ref=IDirectSound8_Release(dso);
+ ok(ref==0,"IDirectSound8_Release() has %d references, should have 0\n",ref);
+}
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound8_GetCaps(dso,0);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
+static void dsound_dsound8_tests()
+{
+ HRESULT rc;
+ LPDIRECTSOUND8 dso=NULL;
- ZeroMemory(&dscaps, sizeof(dscaps));
+ trace("Testing IDirectSound8\n");
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound8_GetCaps(dso,&dscaps);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
+ /* try the COM class factory method of creation with no device specified */
+ rc=CoCreateInstance(&CLSID_DirectSound8, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IDirectSound8, (void**)&dso);
+ ok(rc==S_OK,"CoCreateInstance failed: %s\n",DXGetErrorString8(rc));
+ if (dso)
+ dsound8_test(dso, FALSE, NULL);
- dscaps.dwSize=sizeof(dscaps);
+ /* try the COM class factory method of creation with default playback
+ * device specified */
+ rc=CoCreateInstance(&CLSID_DirectSound8, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IDirectSound8, (void**)&dso);
+ ok(rc==S_OK,"CoCreateInstance(CLSID_DirectSound8) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (dso)
+ dsound8_test(dso, FALSE, &DSDEVID_DefaultPlayback);
+
+ /* try the COM class factory method of creation with default voice
+ * playback device specified */
+ rc=CoCreateInstance(&CLSID_DirectSound8, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IDirectSound8, (void**)&dso);
+ ok(rc==S_OK,"CoCreateInstance(CLSID_DirectSound8) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (dso)
+ dsound8_test(dso, FALSE, &DSDEVID_DefaultVoicePlayback);
- /* DSOUND: Running on a certified driver */
- rc=IDirectSound8_GetCaps(dso,&dscaps);
- ok(rc==DS_OK,"GetCaps failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK) {
- trace(" DirectSound Caps: flags=0x%08lx secondary min=%ld max=%ld\n",
- dscaps.dwFlags,dscaps.dwMinSecondarySampleRate,
- dscaps.dwMaxSecondarySampleRate);
- }
+ /* try with no device specified */
+ rc=DirectSoundCreate8(NULL,&dso,NULL);
+ ok(rc==S_OK,"DirectSoundCreate8 failed: %s\n",DXGetErrorString8(rc));
+ if (dso)
+ dsound8_test(dso, TRUE, NULL);
- ref=IDirectSound8_Release(dso);
- ok(ref==0,"IDirectSound_Release has %d references, should have 0\n",ref);
- }
+ /* try with default playback device specified */
+ rc=DirectSoundCreate8(&DSDEVID_DefaultPlayback,&dso,NULL);
+ ok(rc==S_OK,"DirectSoundCreate8 failed: %s\n",DXGetErrorString8(rc));
+ if (dso)
+ dsound8_test(dso, TRUE, NULL);
/* try with default voice playback device specified */
rc=DirectSoundCreate8(&DSDEVID_DefaultVoicePlayback,&dso,NULL);
ok(rc==S_OK,"DirectSoundCreate8 failed: %s\n",DXGetErrorString8(rc));
- if (dso) {
- /* Try to Query for objects */
- rc=IDirectSound8_QueryInterface(dso,&IID_IUnknown,(LPVOID*)&unknown);
- ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IUnknown) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound8_Release(unknown);
-
- rc=IDirectSound8_QueryInterface(dso,&IID_IDirectSound,(LPVOID*)&ds);
- ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IDirectSound) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound_Release(ds);
-
- rc=IDirectSound8_QueryInterface(dso,&IID_IDirectSound8,(LPVOID*)&ds8);
- ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IDirectSound8) should have failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound8_Release(ds8);
-
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound8_GetCaps(dso,0);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
-
- ZeroMemory(&dscaps, sizeof(dscaps));
-
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound8_GetCaps(dso,&dscaps);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
-
- dscaps.dwSize=sizeof(dscaps);
-
- /* DSOUND: Running on a certified driver */
- rc=IDirectSound8_GetCaps(dso,&dscaps);
- ok(rc==DS_OK,"GetCaps failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK) {
- trace(" DirectSound Caps: flags=0x%08lx secondary min=%ld max=%ld\n",
- dscaps.dwFlags,dscaps.dwMinSecondarySampleRate,
- dscaps.dwMaxSecondarySampleRate);
- }
-
- ref=IDirectSound8_Release(dso);
- ok(ref==0,"IDirectSound_Release has %d references, should have 0\n",ref);
- }
+ if (dso)
+ dsound8_test(dso, TRUE, NULL);
}
static HRESULT test_dsound(LPGUID lpGuid)
{
HRESULT rc;
LPDIRECTSOUND dso=NULL;
- DSCAPS dscaps;
int ref;
- IUnknown * unknown;
- IDirectSound * ds;
- IDirectSound8 * ds8;
/* DSOUND: Error: Invalid interface buffer */
rc=DirectSoundCreate(lpGuid,0,NULL);
@@ -456,48 +383,8 @@
if (rc!=DS_OK)
return rc;
- /* Try to Query for objects */
- rc=IDirectSound_QueryInterface(dso,&IID_IUnknown,(LPVOID*)&unknown);
- ok(rc==DS_OK,"IDirectSound_QueryInterface(IID_IUnknown) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound_Release(unknown);
-
- rc=IDirectSound_QueryInterface(dso,&IID_IDirectSound,(LPVOID*)&ds);
- ok(rc==DS_OK,"IDirectSound_QueryInterface(IID_IDirectSound) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound_Release(ds);
-
- rc=IDirectSound_QueryInterface(dso,&IID_IDirectSound8,(LPVOID*)&ds8);
- ok(rc==E_NOINTERFACE,"IDirectSound_QueryInterface(IID_IDirectSound8) should have failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound8_Release(ds8);
-
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound_GetCaps(dso,0);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
-
- ZeroMemory(&dscaps, sizeof(dscaps));
-
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound_GetCaps(dso,&dscaps);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
-
- dscaps.dwSize=sizeof(dscaps);
-
- /* DSOUND: Running on a certified driver */
- rc=IDirectSound_GetCaps(dso,&dscaps);
- ok(rc==DS_OK,"GetCaps failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK) {
- trace(" DirectSound Caps: flags=0x%08lx secondary min=%ld max=%ld\n",
- dscaps.dwFlags,dscaps.dwMinSecondarySampleRate,
- dscaps.dwMaxSecondarySampleRate);
- }
-
- /* Release the DirectSound object */
- ref=IDirectSound_Release(dso);
- ok(ref==0,"IDirectSound_Release has %d references, should have 0\n",ref);
- if (ref!=0)
- return DSERR_GENERIC;
+ /* Try an enumerated device */
+ dsound_test(dso, TRUE, NULL);
/* Create a DirectSound object */
rc=DirectSoundCreate(lpGuid,&dso,NULL);
@@ -565,11 +452,7 @@
{
HRESULT rc;
LPDIRECTSOUND8 dso=NULL;
- DSCAPS dscaps;
int ref;
- IUnknown * unknown;
- IDirectSound * ds;
- IDirectSound8 * ds8;
/* DSOUND: Error: Invalid interface buffer */
rc=DirectSoundCreate8(lpGuid,0,NULL);
@@ -581,48 +464,8 @@
if (rc!=DS_OK)
return rc;
- /* Try to Query for objects */
- rc=IDirectSound8_QueryInterface(dso,&IID_IUnknown,(LPVOID*)&unknown);
- ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IUnknown) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound8_Release(unknown);
-
- rc=IDirectSound8_QueryInterface(dso,&IID_IDirectSound,(LPVOID*)&ds);
- ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IDirectSound) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound_Release(ds);
-
- rc=IDirectSound8_QueryInterface(dso,&IID_IDirectSound8,(LPVOID*)&ds8);
- ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IDirectSound8) failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK)
- IDirectSound8_Release(ds8);
-
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound8_GetCaps(dso,0);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
-
- ZeroMemory(&dscaps, sizeof(dscaps));
-
- /* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound8_GetCaps(dso,&dscaps);
- ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %s\n",DXGetErrorString8(rc));
-
- dscaps.dwSize=sizeof(dscaps);
-
- /* DSOUND: Running on a certified driver */
- rc=IDirectSound8_GetCaps(dso,&dscaps);
- ok(rc==DS_OK,"GetCaps failed: %s\n",DXGetErrorString8(rc));
- if (rc==DS_OK) {
- trace(" DirectSound Caps: flags=0x%08lx secondary min=%ld max=%ld\n",
- dscaps.dwFlags,dscaps.dwMinSecondarySampleRate,
- dscaps.dwMaxSecondarySampleRate);
- }
-
- /* Release the DirectSound8 object */
- ref=IDirectSound8_Release(dso);
- ok(ref==0,"IDirectSound_Release has %d references, should have 0\n",ref);
- if (ref!=0)
- return DSERR_GENERIC;
+ /* Try an enumerated device */
+ dsound8_test(dso, TRUE, NULL);
/* Create a DirectSound8 object */
rc=DirectSoundCreate8(lpGuid,&dso,NULL);
More information about the wine-patches
mailing list