[DSOUND] propset tests patch

Robert Reif reif at earthlink.net
Fri Mar 11 13:25:00 CST 2005


Private property sets do not exist in early versions of Direct Sound so 
skip tests if not supported.
Add tests for A, W and 1 variations of data.
-------------- next part --------------
Index: dlls/dsound/tests/propset.c
===================================================================
RCS file: /home/wine/wine/dlls/dsound/tests/propset.c,v
retrieving revision 1.16
diff -u -p -r1.16 propset.c
--- dlls/dsound/tests/propset.c	5 Mar 2005 10:49:08 -0000	1.16
+++ dlls/dsound/tests/propset.c	11 Mar 2005 19:09:59 -0000
@@ -64,6 +64,94 @@ static HRESULT (WINAPI *pDirectSoundFull
 BOOL CALLBACK callback(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA data,
                        LPVOID context)
 {
+    trace("  found device:\n");
+    trace("    Type: %s\n",
+          data->Type == DIRECTSOUNDDEVICE_TYPE_EMULATED ? "Emulated" :
+          data->Type == DIRECTSOUNDDEVICE_TYPE_VXD ? "VxD" :
+          data->Type == DIRECTSOUNDDEVICE_TYPE_WDM ? "WDM" : "Unknown");
+    trace("    DataFlow: %s\n",
+          data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER ? "Render" :
+          data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE ?
+          "Capture" : "Unknown");
+    trace("    DeviceId: {%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n",
+          data->DeviceId.Data1,data->DeviceId.Data2,data->DeviceId.Data3,
+          data->DeviceId.Data4[0],data->DeviceId.Data4[1],
+          data->DeviceId.Data4[2],data->DeviceId.Data4[3],
+          data->DeviceId.Data4[4],data->DeviceId.Data4[5],
+          data->DeviceId.Data4[6],data->DeviceId.Data4[7]);
+    trace("    Description: %s\n", data->Description);
+    trace("    Module: %s\n", data->Module);
+    trace("    Interface: %s\n", data->Interface);
+    trace("    WaveDeviceId: %ld\n", data->WaveDeviceId);
+
+    return TRUE;
+}
+
+BOOL CALLBACK callback1(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA data,
+                        LPVOID context)
+{
+    char descriptionA[0x100];
+    char moduleA[MAX_PATH];
+
+    trace("  found device:\n");
+    trace("    Type: %s\n",
+          data->Type == DIRECTSOUNDDEVICE_TYPE_EMULATED ? "Emulated" :
+          data->Type == DIRECTSOUNDDEVICE_TYPE_VXD ? "VxD" :
+          data->Type == DIRECTSOUNDDEVICE_TYPE_WDM ? "WDM" : "Unknown");
+    trace("    DataFlow: %s\n",
+          data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER ? "Render" :
+          data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE ?
+          "Capture" : "Unknown");
+    trace("    DeviceId: {%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n",
+          data->DeviceId.Data1,data->DeviceId.Data2,data->DeviceId.Data3,
+          data->DeviceId.Data4[0],data->DeviceId.Data4[1],
+          data->DeviceId.Data4[2],data->DeviceId.Data4[3],
+          data->DeviceId.Data4[4],data->DeviceId.Data4[5],
+          data->DeviceId.Data4[6],data->DeviceId.Data4[7]);
+    trace("    DescriptionA: %s\n", data->DescriptionA);
+    WideCharToMultiByte(CP_ACP, 0, data->DescriptionW, -1, descriptionA, sizeof(descriptionA), NULL, NULL);
+    trace("    DescriptionW: %s\n", descriptionA);
+    trace("    ModuleA: %s\n", data->ModuleA);
+    WideCharToMultiByte(CP_ACP, 0, data->ModuleW, -1, moduleA, sizeof(moduleA), NULL, NULL);
+    trace("    ModuleW: %s\n", moduleA);
+    trace("    WaveDeviceId: %ld\n", data->WaveDeviceId);
+
+    return TRUE;
+}
+
+BOOL CALLBACK callbackA(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA data,
+                        LPVOID context)
+{
+    trace("  found device:\n");
+    trace("    Type: %s\n",
+          data->Type == DIRECTSOUNDDEVICE_TYPE_EMULATED ? "Emulated" :
+          data->Type == DIRECTSOUNDDEVICE_TYPE_VXD ? "VxD" :
+          data->Type == DIRECTSOUNDDEVICE_TYPE_WDM ? "WDM" : "Unknown");
+    trace("    DataFlow: %s\n",
+          data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER ? "Render" :
+          data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE ?
+          "Capture" : "Unknown");
+    trace("    DeviceId: {%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n",
+          data->DeviceId.Data1,data->DeviceId.Data2,data->DeviceId.Data3,
+          data->DeviceId.Data4[0],data->DeviceId.Data4[1],
+          data->DeviceId.Data4[2],data->DeviceId.Data4[3],
+          data->DeviceId.Data4[4],data->DeviceId.Data4[5],
+          data->DeviceId.Data4[6],data->DeviceId.Data4[7]);
+    trace("    Description: %s\n", data->Description);
+    trace("    Module: %s\n", data->Module);
+    trace("    Interface: %s\n", data->Interface);
+    trace("    WaveDeviceId: %ld\n", data->WaveDeviceId);
+
+    return TRUE;
+}
+
+BOOL CALLBACK callbackW(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA data,
+                        LPVOID context)
+{
+    char descriptionA[0x100];
+    char moduleA[MAX_PATH];
+    char interfaceA[MAX_PATH];
+
     trace("found device:\n");
     trace("\tType: %s\n",
           data->Type == DIRECTSOUNDDEVICE_TYPE_EMULATED ? "Emulated" :
@@ -79,9 +167,12 @@ BOOL CALLBACK callback(PDSPROPERTY_DIREC
           data->DeviceId.Data4[2],data->DeviceId.Data4[3],
           data->DeviceId.Data4[4],data->DeviceId.Data4[5],
           data->DeviceId.Data4[6],data->DeviceId.Data4[7]);
-    trace("\tDescription: %s\n", data->Description);
-    trace("\tModule: %s\n", data->Module);
-    trace("\tInterface: %s\n", data->Interface);
+    WideCharToMultiByte(CP_ACP, 0, data->Description, -1, descriptionA, sizeof(descriptionA), NULL, NULL);
+    WideCharToMultiByte(CP_ACP, 0, data->Module, -1, moduleA, sizeof(moduleA), NULL, NULL);
+    WideCharToMultiByte(CP_ACP, 0, data->Interface, -1, interfaceA, sizeof(interfaceA), NULL, NULL);
+    trace("\tDescription: %s\n", descriptionA);
+    trace("\tModule: %s\n", moduleA);
+    trace("\tInterface: %s\n", interfaceA);
     trace("\tWaveDeviceId: %ld\n", data->WaveDeviceId);
 
     return TRUE;
@@ -103,7 +194,8 @@ static void propset_private_tests()
 
     fProc = (MYPROC)GetProcAddress(hDsound, "DllGetClassObject");
 
-    /* try direct sound first */
+    /* try direct sound first */
+    /* DSOUND: Error: Invalid interface buffer */
     rc = (fProc)(&CLSID_DirectSound, &IID_IClassFactory, (void **)0);
     ok(rc==DSERR_INVALIDPARAM,"DllGetClassObject(CLSID_DirectSound, "
        "IID_IClassFactory) should have returned DSERR_INVALIDPARAM, "
@@ -115,7 +207,8 @@ static void propset_private_tests()
     if (pcf==0)
         goto error;
 
-    /* direct sound doesn't have an IKsPropertySet */
+    /* direct sound doesn't have an IKsPropertySet */
+    /* DSOUND: Error: Invalid interface buffer */
     rc = pcf->lpVtbl->CreateInstance(pcf, NULL, &IID_IKsPropertySet,
                                      (void **)0);
     ok(rc==DSERR_INVALIDPARAM, "CreateInstance(IID_IKsPropertySet) should have "
@@ -192,8 +285,8 @@ static void propset_private_tests()
     /* try direct sound private last */
     rc = (fProc)(&CLSID_DirectSoundPrivate, &IID_IClassFactory,
                  (void **)(&pcf));
-    ok(pcf!=0, "DllGetClassObject(CLSID_DirectSoundPrivate, "
-       "IID_IClassFactory) failed: %s\n",DXGetErrorString8(rc));
+
+    /* some early versions of Direct Sound do not have this */
     if (pcf==0)
         goto error;
 
@@ -205,10 +298,12 @@ static void propset_private_tests()
     if (rc!=DS_OK)
         goto error;
 
+    /* test generic DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION */
     rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
                                    DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION,
                                    &support);
-    ok(rc==DS_OK||rc==E_INVALIDARG, "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+    ok(rc==DS_OK||rc==E_INVALIDARG,
+       "QuerySupport(DSPROPSETID_DirectSoundDevice, "
        "DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION) failed: %s\n",
        DXGetErrorString8(rc));
     if (rc!=DS_OK) {
@@ -224,6 +319,70 @@ static void propset_private_tests()
        "Shouldn't be able to set DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION: "
        "support = 0x%lx\n",support);
 
+    /* test DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1 */
+    rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
+                                   DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1,
+                                   &support);
+    ok(rc==DS_OK||rc==E_INVALIDARG,
+       "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+       "DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1) failed: %s\n",
+       DXGetErrorString8(rc));
+    if (rc!=DS_OK) {
+        if (rc==E_INVALIDARG)
+            trace("  Not Supported\n");
+        goto error;
+    }
+
+    ok(support & KSPROPERTY_SUPPORT_GET,
+       "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1: "
+       "support = 0x%lx\n",support);
+    ok(!(support & KSPROPERTY_SUPPORT_SET),
+       "Shouldn't be able to set DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1: "
+       "support = 0x%lx\n",support);
+
+    /* test DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A */
+    rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
+                                   DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A,
+                                   &support);
+    ok(rc==DS_OK||rc==E_INVALIDARG,
+       "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+       "DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A) failed: %s\n",
+       DXGetErrorString8(rc));
+    if (rc!=DS_OK) {
+        if (rc==E_INVALIDARG)
+            trace("  Not Supported\n");
+        goto error;
+    }
+
+    ok(support & KSPROPERTY_SUPPORT_GET,
+       "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A: "
+       "support = 0x%lx\n",support);
+    ok(!(support & KSPROPERTY_SUPPORT_SET),
+       "Shouldn't be able to set DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A: "
+       "support = 0x%lx\n",support);
+
+    /* test DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W */
+    rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
+                                   DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W,
+                                   &support);
+    ok(rc==DS_OK||rc==E_INVALIDARG,
+       "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+       "DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W) failed: %s\n",
+       DXGetErrorString8(rc));
+    if (rc!=DS_OK) {
+        if (rc==E_INVALIDARG)
+            trace("  Not Supported\n");
+        goto error;
+    }
+
+    ok(support & KSPROPERTY_SUPPORT_GET,
+       "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W: "
+       "support = 0x%lx\n",support);
+    ok(!(support & KSPROPERTY_SUPPORT_SET),
+       "Shouldn't be able to set DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W: "
+       "support = 0x%lx\n",support);
+
+    /* test generic DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING */
     rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
         DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING, &support);
     ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, "
@@ -239,6 +398,40 @@ static void propset_private_tests()
        "DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING: support = "
        "0x%lx\n",support);
 
+    /* test DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A */
+    rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
+        DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A, &support);
+    ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+       "DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A) failed: %s\n",
+       DXGetErrorString8(rc));
+    if (rc!=DS_OK)
+        goto error;
+
+    ok(support & KSPROPERTY_SUPPORT_GET,
+       "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A: "
+       "support = 0x%lx\n",support);
+    ok(!(support & KSPROPERTY_SUPPORT_SET), "Shouldn't be able to set "
+       "DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A: support = "
+       "0x%lx\n",support);
+
+    /* test DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W */
+    rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
+        DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W, &support);
+    ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+       "DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W) failed: %s\n",
+       DXGetErrorString8(rc));
+    if (rc!=DS_OK)
+        goto error;
+
+    ok(support & KSPROPERTY_SUPPORT_GET,
+       "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W: "
+       "support = 0x%lx\n",support);
+    ok(!(support & KSPROPERTY_SUPPORT_SET), "Shouldn't be able to set "
+       "DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W: support = "
+       "0x%lx\n",support);
+
+    /* test generic DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE */
+    trace("*** Testing DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE ***\n");
     rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
                                    DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE,
                                    &support);
@@ -263,6 +456,96 @@ static void propset_private_tests()
 
         rc = pps->lpVtbl->Get(pps, &DSPROPSETID_DirectSoundDevice,
                               DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE,
+                              NULL, 0, &data, sizeof(data), &bytes);
+        ok(rc==DS_OK, "Couldn't enumerate: 0x%lx\n",rc);
+   }
+
+    /* test DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1 */
+    trace("*** Testing DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1 ***\n");
+    rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
+                                   DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1,
+                                   &support);
+    ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+       "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1) failed: %s\n",
+       DXGetErrorString8(rc));
+    if (rc!=DS_OK)
+        goto error;
+
+    ok(support & KSPROPERTY_SUPPORT_GET,
+       "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1: "
+       "support = 0x%lx\n",support);
+    ok(!(support & KSPROPERTY_SUPPORT_SET),"Shouldn't be able to set "
+       "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1: support = 0x%lx\n",support);
+
+    if (support & KSPROPERTY_SUPPORT_GET) {
+        DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA data;
+        ULONG bytes;
+
+        data.Callback = callback1;
+        data.Context = 0;
+
+        rc = pps->lpVtbl->Get(pps, &DSPROPSETID_DirectSoundDevice,
+                              DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1,
+                              NULL, 0, &data, sizeof(data), &bytes);
+        ok(rc==DS_OK, "Couldn't enumerate: 0x%lx\n",rc);
+    }
+
+    /* test DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A */
+    trace("*** Testing DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A ***\n");
+    rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
+                                   DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A,
+                                   &support);
+    ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+       "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A) failed: %s\n",
+       DXGetErrorString8(rc));
+    if (rc!=DS_OK)
+        goto error;
+
+    ok(support & KSPROPERTY_SUPPORT_GET,
+       "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A: "
+       "support = 0x%lx\n",support);
+    ok(!(support & KSPROPERTY_SUPPORT_SET),"Shouldn't be able to set "
+       "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A: support = 0x%lx\n",support);
+
+    if (support & KSPROPERTY_SUPPORT_GET) {
+        DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA data;
+        ULONG bytes;
+
+        data.Callback = callbackA;
+        data.Context = 0;
+
+        rc = pps->lpVtbl->Get(pps, &DSPROPSETID_DirectSoundDevice,
+                              DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A,
+                              NULL, 0, &data, sizeof(data), &bytes);
+        ok(rc==DS_OK, "Couldn't enumerate: 0x%lx\n",rc);
+    }
+
+    /* test DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W */
+    trace("*** Testing DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W ***\n");
+    rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
+                                   DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W,
+                                   &support);
+    ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+       "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W) failed: %s\n",
+       DXGetErrorString8(rc));
+    if (rc!=DS_OK)
+        goto error;
+
+    ok(support & KSPROPERTY_SUPPORT_GET,
+       "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W: "
+       "support = 0x%lx\n",support);
+    ok(!(support & KSPROPERTY_SUPPORT_SET),"Shouldn't be able to set "
+       "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W: support = 0x%lx\n",support);
+
+    if (support & KSPROPERTY_SUPPORT_GET) {
+        DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA data;
+        ULONG bytes;
+
+        data.Callback = callbackW;
+        data.Context = 0;
+
+        rc = pps->lpVtbl->Get(pps, &DSPROPSETID_DirectSoundDevice,
+                              DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W,
                               NULL, 0, &data, sizeof(data), &bytes);
         ok(rc==DS_OK, "Couldn't enumerate: 0x%lx\n",rc);
     }


More information about the wine-patches mailing list