Fix tests for win9x and old versions of DirectX.
authorRobert Reif <reif@earthlink.net>
Wed, 23 Feb 2005 12:43:38 +0000 (12:43 +0000)
committerAlexandre Julliard <julliard@winehq.org>
Wed, 23 Feb 2005 12:43:38 +0000 (12:43 +0000)
dlls/dsound/tests/capture.c
dlls/dsound/tests/ds3d.c
dlls/dsound/tests/ds3d8.c
dlls/dsound/tests/dsound.c
dlls/dsound/tests/dsound8.c
dlls/dsound/tests/propset.c

index 05269d10a37ef2a3db02257f453ac53a22329da8..8630b338de6ed2a46c676d58d08e42c90c5b68e7 100644 (file)
@@ -320,7 +320,7 @@ static BOOL WINAPI dscenum_callback(LPGUID lpGuid, LPCSTR lpcstrDescription,
         if (rc==DSERR_NODRIVER)
             trace("  No Driver\n");
         else if (rc==E_FAIL)
-            trace("  E_FAIL\n");
+            trace("  No Device\n");
         else if (rc==DSERR_ALLOCATED)
             trace("  Already In Use\n");
        goto EXIT;
index 5fc6bc670885a7cedeb4ed8f7481beba4542403d..4d75d9eefb2c1848aac811bd15259cd84708b794 100644 (file)
@@ -882,7 +882,7 @@ static HRESULT test_for_driver(LPGUID lpGuid)
 
     /* Create the DirectSound object */
     rc=DirectSoundCreate(lpGuid,&dso,NULL);
-    ok(rc==DS_OK||rc==DSERR_NODRIVER||rc==DSERR_ALLOCATED,
+    ok(rc==DS_OK||rc==DSERR_NODRIVER||rc==DSERR_ALLOCATED||rc==E_FAIL,
        "DirectSoundCreate() failed: %s\n",DXGetErrorString8(rc));
     if (rc!=DS_OK)
         return rc;
@@ -1166,6 +1166,9 @@ static BOOL WINAPI dsenum_callback(LPGUID lpGuid, LPCSTR lpcstrDescription,
     } else if (rc == DSERR_ALLOCATED) {
         trace("  Already In Use\n");
         return 1;
+    } else if (rc == E_FAIL) {
+        trace("  No Device\n");
+        return 1;
     }
 
     trace("  Testing the primary buffer\n");
index 3ff51041208145b9012eb73003276ce794dbb29b..823c2f2ce4384f50d62ff104d771e19d65075841 100644 (file)
@@ -796,7 +796,7 @@ static HRESULT test_for_driver8(LPGUID lpGuid)
 
     /* Create the DirectSound object */
     rc=pDirectSoundCreate8(lpGuid,&dso,NULL);
-    ok(rc==DS_OK||rc==DSERR_NODRIVER||rc==DSERR_ALLOCATED,
+    ok(rc==DS_OK||rc==DSERR_NODRIVER||rc==DSERR_ALLOCATED||rc==E_FAIL,
        "DirectSoundCreate8() failed: %s\n",DXGetErrorString8(rc));
     if (rc!=DS_OK)
         return rc;
@@ -1081,6 +1081,9 @@ static BOOL WINAPI dsenum_callback(LPGUID lpGuid, LPCSTR lpcstrDescription,
     } else if (rc == DSERR_ALLOCATED) {
         trace("  Already In Use\n");
         return 1;
+    } else if (rc == E_FAIL) {
+        trace("  No Device\n");
+        return 1;
     }
 
     trace("  Testing the primary buffer\n");
index 05077820a79c901e1d1689bc5a21e89cd0905c04..be5afc904f70d7bf7c5628e74c3f1b5e5322f0db 100644 (file)
@@ -793,6 +793,8 @@ static BOOL WINAPI dsenum_callback(LPGUID lpGuid, LPCSTR lpcstrDescription,
         trace("  No Driver\n");
     else if (rc == DSERR_ALLOCATED)
         trace("  Already In Use\n");
+    else if (rc == E_FAIL)
+        trace("  No Device\n");
     else {
         test_block_align(lpGuid);
         test_primary(lpGuid);
index 0f733aad4edd2ffef2132d88042cf0497dacff8d..05842eb82c7854c2c024c2572717d769c6e1353d 100644 (file)
@@ -767,6 +767,8 @@ static BOOL WINAPI dsenum_callback(LPGUID lpGuid, LPCSTR lpcstrDescription,
         trace("  No Driver\n");
     else if (rc == DSERR_ALLOCATED)
         trace("  Already In Use\n");
+    else if (rc == E_FAIL)
+        trace("  No Device\n");
     else {
         test_primary8(lpGuid);
         test_primary_secondary8(lpGuid);
index 55f4f5452149594ad7dd1cd705f5ce33b4d58e33..e7c7d865cc3cef258b27798d5d153d471a83c5d6 100644 (file)
@@ -51,6 +51,16 @@ DEFINE_GUID(DSPROPSETID_ZOOMFX_BufferProperties, \
 
 typedef HRESULT  (CALLBACK * MYPROC)(REFCLSID, REFIID, LPVOID *);
 
+static HRESULT (WINAPI *pDirectSoundCreate8)(LPCGUID,LPDIRECTSOUND8*,
+    LPUNKNOWN)=NULL;
+static HRESULT (WINAPI *pDirectSoundCaptureCreate)(LPCGUID,
+    LPDIRECTSOUNDCAPTURE*,LPUNKNOWN)=NULL;
+static HRESULT (WINAPI *pDirectSoundCaptureCreate8)(LPCGUID,
+    LPDIRECTSOUNDCAPTURE8*,LPUNKNOWN)=NULL;
+static HRESULT (WINAPI *pDirectSoundFullDuplexCreate)(LPCGUID,LPCGUID,
+    LPCDSCBUFFERDESC,LPCDSBUFFERDESC,HWND,DWORD,LPDIRECTSOUNDFULLDUPLEX*,
+    LPDIRECTSOUNDCAPTUREBUFFER8*,LPDIRECTSOUNDBUFFER8*,LPUNKNOWN)=NULL;
+
 BOOL CALLBACK callback(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA data,
                        LPVOID context)
 {
@@ -117,59 +127,67 @@ static void propset_private_tests()
        "returned E_NOINTERFACE, returned: %s\n",DXGetErrorString8(rc));
 
     /* and the direct sound 8 version */
-    rc = (fProc)(&CLSID_DirectSound8, &IID_IClassFactory, (void **)(&pcf));
-    ok(pcf!=0, "DllGetClassObject(CLSID_DirectSound8, IID_IClassFactory) "
-       "failed: %s\n",DXGetErrorString8(rc));
-    if (pcf==0)
-        goto error;
-
-    /* direct sound 8 doesn't have an IKsPropertySet */
-    rc = pcf->lpVtbl->CreateInstance(pcf, NULL, &IID_IKsPropertySet,
-                                     (void **)(&pps));
-    ok(rc==E_NOINTERFACE, "CreateInstance(IID_IKsPropertySet) should have "
-       "returned E_NOINTERFACE, returned: %s\n",DXGetErrorString8(rc));
+    if (pDirectSoundCreate8) {
+        rc = (fProc)(&CLSID_DirectSound8, &IID_IClassFactory, (void **)(&pcf));
+        ok(pcf!=0, "DllGetClassObject(CLSID_DirectSound8, IID_IClassFactory) "
+           "failed: %s\n",DXGetErrorString8(rc));
+        if (pcf==0)
+            goto error;
+
+        /* direct sound 8 doesn't have an IKsPropertySet */
+        rc = pcf->lpVtbl->CreateInstance(pcf, NULL, &IID_IKsPropertySet,
+                                         (void **)(&pps));
+        ok(rc==E_NOINTERFACE, "CreateInstance(IID_IKsPropertySet) should have "
+           "returned E_NOINTERFACE, returned: %s\n",DXGetErrorString8(rc));
+    }
 
     /* try direct sound capture next */
-    rc = (fProc)(&CLSID_DirectSoundCapture, &IID_IClassFactory,
-                 (void **)(&pcf));
-    ok(pcf!=0, "DllGetClassObject(CLSID_DirectSoundCapture, IID_IClassFactory) "
-       "failed: %s\n",DXGetErrorString8(rc));
-    if (pcf==0)
-        goto error;
-
-    /* direct sound capture doesn't have an IKsPropertySet */
-    rc = pcf->lpVtbl->CreateInstance(pcf, NULL, &IID_IKsPropertySet,
-                                     (void **)(&pps));
-    ok(rc==E_NOINTERFACE, "CreateInstance(IID_IKsPropertySet) should have "
-       "returned E_NOINTERFACE,returned: %s\n",DXGetErrorString8(rc));
+    if (pDirectSoundCaptureCreate) {
+        rc = (fProc)(&CLSID_DirectSoundCapture, &IID_IClassFactory,
+                     (void **)(&pcf));
+        ok(pcf!=0, "DllGetClassObject(CLSID_DirectSoundCapture, IID_IClassFactory) "
+           "failed: %s\n",DXGetErrorString8(rc));
+        if (pcf==0)
+            goto error;
+
+        /* direct sound capture doesn't have an IKsPropertySet */
+        rc = pcf->lpVtbl->CreateInstance(pcf, NULL, &IID_IKsPropertySet,
+                                         (void **)(&pps));
+        ok(rc==E_NOINTERFACE, "CreateInstance(IID_IKsPropertySet) should have "
+           "returned E_NOINTERFACE,returned: %s\n",DXGetErrorString8(rc));
+    }
 
     /* and the direct sound capture 8 version */
-    rc = (fProc)(&CLSID_DirectSoundCapture8, &IID_IClassFactory,
-                 (void **)(&pcf));
-    ok(pcf!=0, "DllGetClassObject(CLSID_DirectSoundCapture8, "
-       "IID_IClassFactory) failed: %s\n",DXGetErrorString8(rc));
-    if (pcf==0)
-        goto error;
-
-    /* direct sound capture 8 doesn't have an IKsPropertySet */
-    rc = pcf->lpVtbl->CreateInstance(pcf, NULL, &IID_IKsPropertySet,
-                                     (void **)(&pps));
-    ok(rc==E_NOINTERFACE, "CreateInstance(IID_IKsPropertySet) should have "
-       "returned E_NOINTERFACE, returned: %s\n",DXGetErrorString8(rc));
+    if (pDirectSoundCaptureCreate8) {
+        rc = (fProc)(&CLSID_DirectSoundCapture8, &IID_IClassFactory,
+                     (void **)(&pcf));
+        ok(pcf!=0, "DllGetClassObject(CLSID_DirectSoundCapture8, "
+           "IID_IClassFactory) failed: %s\n",DXGetErrorString8(rc));
+        if (pcf==0)
+            goto error;
+
+        /* direct sound capture 8 doesn't have an IKsPropertySet */
+        rc = pcf->lpVtbl->CreateInstance(pcf, NULL, &IID_IKsPropertySet,
+                                         (void **)(&pps));
+        ok(rc==E_NOINTERFACE, "CreateInstance(IID_IKsPropertySet) should have "
+           "returned E_NOINTERFACE, returned: %s\n",DXGetErrorString8(rc));
+    }
 
     /* try direct sound full duplex next */
-    rc = (fProc)(&CLSID_DirectSoundFullDuplex, &IID_IClassFactory,
-                 (void **)(&pcf));
-    ok(pcf!=0, "DllGetClassObject(CLSID_DirectSoundFullDuplex, "
-       "IID_IClassFactory) failed: %s\n",DXGetErrorString8(rc));
-    if (pcf==0)
-        goto error;
-
-    /* direct sound full duplex doesn't have an IKsPropertySet */
-    rc = pcf->lpVtbl->CreateInstance(pcf, NULL, &IID_IKsPropertySet,
-                                     (void **)(&pps));
-    ok(rc==E_NOINTERFACE, "CreateInstance(IID_IKsPropertySet) should have "
-       "returned NOINTERFACE, returned: %s\n",DXGetErrorString8(rc));
+    if (pDirectSoundFullDuplexCreate) {
+        rc = (fProc)(&CLSID_DirectSoundFullDuplex, &IID_IClassFactory,
+                     (void **)(&pcf));
+        ok(pcf!=0, "DllGetClassObject(CLSID_DirectSoundFullDuplex, "
+           "IID_IClassFactory) failed: %s\n",DXGetErrorString8(rc));
+        if (pcf==0)
+            goto error;
+
+        /* direct sound full duplex doesn't have an IKsPropertySet */
+        rc = pcf->lpVtbl->CreateInstance(pcf, NULL, &IID_IKsPropertySet,
+                                         (void **)(&pps));
+        ok(rc==E_NOINTERFACE, "CreateInstance(IID_IKsPropertySet) should have "
+           "returned NOINTERFACE, returned: %s\n",DXGetErrorString8(rc));
+    }
 
     /* try direct sound private last */
     rc = (fProc)(&CLSID_DirectSoundPrivate, &IID_IClassFactory,
@@ -190,11 +208,14 @@ static void propset_private_tests()
     rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
                                    DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION,
                                    &support);
-    ok(rc==DS_OK, "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)
+    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: "
@@ -263,13 +284,15 @@ static BOOL WINAPI dsenum_callback(LPGUID lpGuid, LPCSTR lpcstrDescription,
     trace("*** Testing %s - %s ***\n",lpcstrDescription,lpcstrModule);
 
     rc=DirectSoundCreate(lpGuid,&dso,NULL);
-    ok(rc==DS_OK||rc==DSERR_NODRIVER||rc==DSERR_ALLOCATED,
+    ok(rc==DS_OK||rc==DSERR_NODRIVER||rc==DSERR_ALLOCATED||rc==E_FAIL,
        "DirectSoundCreate() failed: %s\n",DXGetErrorString8(rc));
     if (rc!=DS_OK) {
         if (rc==DSERR_NODRIVER)
             trace("  No Driver\n");
         else if (rc == DSERR_ALLOCATED)
             trace("  Already In Use\n");
+        else if (rc == E_FAIL)
+            trace("  No Device\n");
         goto EXIT;
     }
 
@@ -403,8 +426,21 @@ static void propset_buffer_tests()
 
 START_TEST(propset)
 {
+    HMODULE hDsound;
+
     CoInitialize(NULL);
 
+    hDsound = LoadLibraryA("dsound.dll");
+    if (!hDsound) {
+        trace("dsound.dll not found\n");
+        return;
+    }
+                                                                                
+    pDirectSoundCreate8 = (void*)GetProcAddress(hDsound, "DirectSoundCreate8");
+    pDirectSoundCaptureCreate=(void*)GetProcAddress(hDsound,"DirectSoundCaptureCreate");
+    pDirectSoundCaptureCreate8=(void*)GetProcAddress(hDsound,"DirectSoundCaptureCreate8");
+    pDirectSoundFullDuplexCreate=(void*)GetProcAddress(hDsound,"DirectSoundFullDuplexCreate");
+
     propset_private_tests();
     propset_buffer_tests();