Added tests for buffer property sets.
diff --git a/dlls/dsound/tests/propset.c b/dlls/dsound/tests/propset.c
index e2727cc..47fddd7 100644
--- a/dlls/dsound/tests/propset.c
+++ b/dlls/dsound/tests/propset.c
@@ -29,6 +29,15 @@
#include "dsound.h"
#include "dsconf.h"
+#include "initguid.h"
+
+DEFINE_GUID(DSPROPSETID_VoiceManager,0x62A69BAE,0xDF9D,0x11D1,0x99,0xA6,0x00,0xC0,0x4F,0xC9,0x9D,0x46);
+DEFINE_GUID(DSPROPSETID_EAX20_ListenerProperties,0x306a6a8,0xb224,0x11d2,0x99,0xe5,0x0,0x0,0xe8,0xd8,0xc7,0x22);
+DEFINE_GUID(DSPROPSETID_EAX20_BufferProperties,0x306a6a7,0xb224,0x11d2,0x99,0xe5,0x0,0x0,0xe8,0xd8,0xc7,0x22);
+DEFINE_GUID(DSPROPSETID_I3DL2_ListenerProperties,0xDA0F0520,0x300A,0x11D3,0x8A,0x2B,0x00,0x60,0x97,0x0D,0xB0,0x11);
+DEFINE_GUID(DSPROPSETID_I3DL2_BufferProperties,0xDA0F0521,0x300A,0x11D3,0x8A,0x2B,0x00,0x60,0x97,0x0D,0xB0,0x11);
+DEFINE_GUID(DSPROPSETID_ZOOMFX_BufferProperties,0xCD5368E0,0x3450,0x11D3,0x8B,0x6E,0x00,0x10,0x5A,0x9B,0x7B,0xBC);
+
typedef HRESULT (CALLBACK * MYPROC)(REFCLSID, REFIID, LPVOID FAR*);
BOOL CALLBACK callback(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA data, LPVOID context)
@@ -53,7 +62,7 @@
return TRUE;
}
-static void propset_tests()
+static void propset_private_tests()
{
HMODULE hDsound;
HRESULT hr;
@@ -183,7 +192,128 @@
FreeLibrary(hDsound);
}
+static HWND get_hwnd()
+{
+ HWND hwnd=GetForegroundWindow();
+ if (!hwnd)
+ hwnd=GetDesktopWindow();
+ return hwnd;
+}
+
+static BOOL WINAPI dsenum_callback(LPGUID lpGuid, LPCSTR lpcstrDescription,
+ LPCSTR lpcstrModule, LPVOID lpContext)
+{
+ HRESULT rc;
+ LPDIRECTSOUND dso=NULL;
+ LPDIRECTSOUNDBUFFER primary=NULL,secondary=NULL;
+ DSBUFFERDESC bufdesc;
+ WAVEFORMATEX wfx;
+ int ref;
+
+ rc=DirectSoundCreate(lpGuid,&dso,NULL);
+ ok(rc==DS_OK,"DirectSoundCreate failed: 0x%lx\n",rc);
+ if (rc!=DS_OK)
+ goto EXIT;
+
+ /* We must call SetCooperativeLevel before calling CreateSoundBuffer */
+ /* DSOUND: Setting DirectSound cooperative level to DSSCL_PRIORITY */
+ rc=IDirectSound_SetCooperativeLevel(dso,get_hwnd(),DSSCL_PRIORITY);
+ ok(rc==DS_OK,"SetCooperativeLevel failed: 0x%lx\n",rc);
+ if (rc!=DS_OK)
+ goto EXIT;
+
+ /* Testing 3D buffers */
+ primary=NULL;
+ ZeroMemory(&bufdesc, sizeof(bufdesc));
+ bufdesc.dwSize=sizeof(bufdesc);
+ bufdesc.dwFlags=DSBCAPS_PRIMARYBUFFER|DSBCAPS_LOCHARDWARE|DSBCAPS_CTRL3D;
+ rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&primary,NULL);
+ ok(rc==DS_OK&&primary!=NULL,"CreateSoundBuffer failed to create a hardware 3D primary buffer: 0x%lx\n",rc);
+ if (rc==DS_OK&&primary!=NULL) {
+ ZeroMemory(&wfx, sizeof(wfx));
+ wfx.wFormatTag=WAVE_FORMAT_PCM;
+ wfx.nChannels=1;
+ wfx.wBitsPerSample=16;
+ wfx.nSamplesPerSec=44100;
+ wfx.nBlockAlign=wfx.nChannels*wfx.wBitsPerSample/8;
+ wfx.nAvgBytesPerSec=wfx.nSamplesPerSec*wfx.nBlockAlign;
+ ZeroMemory(&bufdesc, sizeof(bufdesc));
+ bufdesc.dwSize=sizeof(bufdesc);
+ bufdesc.dwFlags=DSBCAPS_CTRLDEFAULT|DSBCAPS_GETCURRENTPOSITION2;
+ bufdesc.dwBufferBytes=wfx.nAvgBytesPerSec;
+ bufdesc.lpwfxFormat=&wfx;
+ trace(" Testing a secondary buffer at %ldx%dx%d\n",
+ wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels);
+ rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
+ ok(rc==DS_OK&&secondary!=NULL,"CreateSoundBuffer failed to create a secondary buffer 0x%lx\n",rc);
+ if (rc==DS_OK&&secondary!=NULL) {
+ IKsPropertySet * pPropertySet=NULL;
+ rc=IDirectSoundBuffer_QueryInterface(secondary,&IID_IKsPropertySet,(void **)&pPropertySet);
+ /* it's not an error for this to fail */
+ if(rc==DS_OK) {
+ ULONG ulTypeSupport;
+ trace(" Supports property sets\n");
+ /* it's not an error for these to fail */
+ rc=IKsPropertySet_QuerySupport(pPropertySet,&DSPROPSETID_VoiceManager,0,&ulTypeSupport);
+ if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET|KSPROPERTY_SUPPORT_SET)))
+ trace(" DSPROPSETID_VoiceManager supported\n");
+ else
+ trace(" DSPROPSETID_VoiceManager not supported\n");
+ rc=IKsPropertySet_QuerySupport(pPropertySet,&DSPROPSETID_EAX20_ListenerProperties,0,&ulTypeSupport);
+ if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET|KSPROPERTY_SUPPORT_SET)))
+ trace(" DSPROPSETID_EAX20_ListenerProperties supported\n");
+ else
+ trace(" DSPROPSETID_EAX20_ListenerProperties not supported\n");
+ rc=IKsPropertySet_QuerySupport(pPropertySet,&DSPROPSETID_EAX20_BufferProperties,0,&ulTypeSupport);
+ if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET|KSPROPERTY_SUPPORT_SET)))
+ trace(" DSPROPSETID_EAX20_BufferProperties supported\n");
+ else
+ trace(" DSPROPSETID_EAX20_BufferProperties not supported\n");
+ rc=IKsPropertySet_QuerySupport(pPropertySet,&DSPROPSETID_I3DL2_ListenerProperties,0,&ulTypeSupport);
+ if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET|KSPROPERTY_SUPPORT_SET)))
+ trace(" DSPROPSETID_I3DL2_ListenerProperties supported\n");
+ else
+ trace(" DSPROPSETID_I3DL2_ListenerProperties not supported\n");
+ rc=IKsPropertySet_QuerySupport(pPropertySet,&DSPROPSETID_I3DL2_BufferProperties,0,&ulTypeSupport);
+ if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET|KSPROPERTY_SUPPORT_SET)))
+ trace(" DSPROPSETID_I3DL2_BufferProperties supported\n");
+ else
+ trace(" DSPROPSETID_I3DL2_BufferProperties not supported\n");
+ rc=IKsPropertySet_QuerySupport(pPropertySet,&DSPROPSETID_ZOOMFX_BufferProperties,0,&ulTypeSupport);
+ if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET|KSPROPERTY_SUPPORT_SET)))
+ trace(" DSPROPSETID_ZOOMFX_BufferProperties supported\n");
+ else
+ trace(" DSPROPSETID_ZOOMFX_BufferProperties not supported\n");
+ ref=IKsPropertySet_Release(pPropertySet);
+ /* try a few common ones */
+ ok(ref==0,"IKsPropertySet_Release secondary has %d references, should have 0\n",ref);
+ } else
+ trace(" Doesn't support property sets\n");
+ ref=IDirectSoundBuffer_Release(secondary);
+ ok(ref==0,"IDirectSoundBuffer_Release secondary has %d references, should have 0\n",ref);
+ }
+
+ ref=IDirectSoundBuffer_Release(primary);
+ ok(ref==0,"IDirectSoundBuffer_Release primary has %d references, should have 0\n",ref);
+ }
+
+EXIT:
+ if (dso!=NULL) {
+ ref=IDirectSound_Release(dso);
+ ok(ref==0,"IDirectSound_Release has %d references, should have 0\n",ref);
+ }
+ return 1;
+}
+
+static void propset_buffer_tests()
+{
+ HRESULT rc;
+ rc=DirectSoundEnumerateA(&dsenum_callback,NULL);
+ ok(rc==DS_OK,"DirectSoundEnumerate failed: %ld\n",rc);
+}
+
START_TEST(propset)
{
- propset_tests();
+ propset_private_tests();
+ propset_buffer_tests();
}