Jörg Höhle : winmm/tests: Introduce coherence tests among parts that may fail.

Alexandre Julliard julliard at winehq.org
Mon Nov 23 08:49:55 CST 2009


Module: wine
Branch: master
Commit: 11f07c6f6bba6f551c0be24acfeabb64b41c0ed9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=11f07c6f6bba6f551c0be24acfeabb64b41c0ed9

Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date:   Wed Nov 18 21:59:08 2009 +0100

winmm/tests: Introduce coherence tests among parts that may fail.

---

 dlls/winmm/tests/mci.c |   51 ++++++++++++++++++++++++++++++-----------------
 1 files changed, 32 insertions(+), 19 deletions(-)

diff --git a/dlls/winmm/tests/mci.c b/dlls/winmm/tests/mci.c
index bbf33bc..c72c81d 100644
--- a/dlls/winmm/tests/mci.c
+++ b/dlls/winmm/tests/mci.c
@@ -25,6 +25,10 @@
 #include "mmreg.h"
 #include "wine/test.h"
 
+/* The tests use the MCI's own save capability to create the tempfile.wav to play.
+ * To use a pre-existing file, write-protect it. */
+static MCIERROR ok_saved = MCIERR_FILE_NOT_FOUND;
+
 typedef union {
       MCI_STATUS_PARMS    status;
       MCI_WAVE_SET_PARMS  set;
@@ -244,7 +248,7 @@ static void test_recordWAVE(HWND hwnd)
     WORD nch    = 1;
     WORD nbits  = 16;
     DWORD nsamp = 16000, expect;
-    MCIERROR err;
+    MCIERROR err, ok_pcm;
     MCIDEVICEID wDeviceID;
     MCI_PARMS_UNION parm;
     char buf[1024];
@@ -289,9 +293,10 @@ static void test_recordWAVE(HWND hwnd)
      * Don't skip here, record will fail below. */
     err = mciSendString("set x format tag pcm", NULL, 0, NULL);
     ok(!err || err==MCIERR_OUTOFRANGE,"mci set format tag pcm returned %s\n", dbg_mcierr(err));
+    ok_pcm = err;
 
     err = mciSendString("set x samplespersec 41000 alignment 4 channels 2", NULL, 0, NULL);
-    ok(!err,"mci set samples+align+channels returned %s\n", dbg_mcierr(err));
+    ok(err==ok_pcm,"mci set samples+align+channels returned %s\n", dbg_mcierr(err));
 
     /* Investigate: on w2k, set samplespersec 22050 sets nChannels to 2!
      *  err = mciSendString("set x samplespersec 22050", NULL, 0, NULL);
@@ -308,12 +313,16 @@ static void test_recordWAVE(HWND hwnd)
         MCI_WAVE_SET_SAMPLESPERSEC | MCI_WAVE_SET_CHANNELS |
         MCI_WAVE_SET_BITSPERSAMPLE | MCI_WAVE_SET_BLOCKALIGN |
         MCI_WAVE_SET_AVGBYTESPERSEC| MCI_WAVE_SET_FORMATTAG, (DWORD_PTR)&parm);
-    ok(!err || err==MCIERR_OUTOFRANGE,"mciCommand set wave format: %s\n", dbg_mcierr(err));
+    ok(err==ok_pcm,"mciCommand set wave format: %s\n", dbg_mcierr(err));
 
+    /* A few ME machines pass all tests except set format tag pcm! */
     err = mciSendString("record x to 2000 wait", NULL, 0, hwnd);
-    ok(!err,"mci record to 2000 returned %s\n", dbg_mcierr(err));
-    if(err==MCIERR_WAVE_INPUTSUNSUITABLE) {
-        skip("Please install audio driver. Tests will fail\n");
+    ok(err || !ok_pcm,"can record yet set wave format pcm returned %s\n", dbg_mcierr(ok_pcm));
+    ok(!err || err==(ok_pcm==MCIERR_OUTOFRANGE ? MCIERR_WAVE_INPUTSUNSUITABLE : 0),"mci record to 2000 returned %s\n", dbg_mcierr(err));
+    if(err) {
+        if (err==MCIERR_WAVE_INPUTSUNSUITABLE)
+             skip("Please install audio driver. Everything is skipped.\n");
+        else skip("Cannot record cause %s. Everything is skipped.\n", dbg_mcierr(err));
 
         err = mciSendString("close x", NULL, 0, NULL);
         ok(!err,"mci close returned %s\n", dbg_mcierr(err));
@@ -353,6 +362,7 @@ static void test_recordWAVE(HWND hwnd)
 
     err = mciSendString("save x tempfile.wav", NULL, 0, NULL);
     ok(!err,"mci save returned %s\n", dbg_mcierr(err));
+    if(!err) ok_saved = 0;
 
     /* Save must not rename the original file. */
     if (!DeleteFile("tempfile1.wav"))
@@ -386,9 +396,9 @@ static void test_playWAVE(HWND hwnd)
     memset(buf, 0, sizeof(buf));
 
     err = mciSendString("open waveaudio!tempfile.wav alias mysound", NULL, 0, NULL);
-    ok(!err,"mci open waveaudio!tempfile.wav returned %s\n", dbg_mcierr(err));
+    ok(err==ok_saved,"mci open waveaudio!tempfile.wav returned %s\n", dbg_mcierr(err));
     if(err) {
-        skip("Cannot open tempfile.wav for playing #1, skipping\n");
+        skip("Cannot open waveaudio!tempfile.wav for playing (%s), skipping\n", dbg_mcierr(err));
         return;
     }
 
@@ -505,9 +515,9 @@ static void test_asyncWAVE(HWND hwnd)
     memset(buf, 0, sizeof(buf));
 
     err = mciSendString("open tempfile.wav alias mysound", buf, sizeof(buf), NULL);
-    ok(!err,"mci open tempfile.wav returned %s\n", dbg_mcierr(err));
+    ok(err==ok_saved,"mci open tempfile.wav returned %s\n", dbg_mcierr(err));
     if(err) {
-        skip("Cannot open tempfile.wav for playing #2, skipping\n");
+        skip("Cannot open tempfile.wav for playing (%s), skipping\n", dbg_mcierr(err));
         return;
     }
     ok(!strcmp(buf,"1"), "mci open deviceId: %s, expected 1\n", buf);
@@ -685,7 +695,7 @@ static void test_AutoOpenWAVE(HWND hwnd)
     /* This test used(?) to cause intermittent crashes when Wine exits, after
      * fixme:winmm:MMDRV_Exit Closing while ll-driver open
      */
-    MCIERROR err;
+    MCIERROR err, ok_snd;
     char buf[512], path[300], command[330];
     memset(buf, 0, sizeof(buf)); memset(path, 0, sizeof(path));
 
@@ -697,11 +707,12 @@ static void test_AutoOpenWAVE(HWND hwnd)
     ok(!err,"mci sysinfo waveaudio quantity open returned %s\n", dbg_mcierr(err));
     if(!err) todo_wine ok(!strcmp(buf,"0"), "sysinfo quantity open expected 0, got: %s, some more tests will fail.\n", buf);
 
+    ok_snd = waveOutGetNumDevs() ? 0 : MCIERR_HARDWARE;
     err = mciSendString("sound NoSuchSoundDefined wait", NULL, 0, NULL);
-    todo_wine ok(!err,"mci sound NoSuchSoundDefined returned %s\n", dbg_mcierr(err));
+    todo_wine ok(err==ok_snd,"mci sound NoSuchSoundDefined returned %s\n", dbg_mcierr(err));
 
     err = mciSendString("sound SystemExclamation notify wait", NULL, 0, hwnd);
-    todo_wine ok(!err,"mci sound SystemExclamation returned %s\n", dbg_mcierr(err));
+    todo_wine ok(err==ok_snd,"mci sound SystemExclamation returned %s\n", dbg_mcierr(err));
     test_notification(hwnd, "sound notify", err ? 0 : MCI_NOTIFY_SUCCESSFUL);
 
     buf[0]=0;
@@ -710,7 +721,7 @@ static void test_AutoOpenWAVE(HWND hwnd)
     if(!err) trace("sysinfo dangling open alias: %s\n", buf);
 
     err = mciSendString("play no-such-file-exists.wav notify", buf, sizeof(buf), NULL);
-    if(err==MCIERR_FILE_NOT_FOUND) {
+    if(err==MCIERR_FILE_NOT_FOUND) { /* a Wine detector */
         /* Unsupported auto-open leaves the file open, preventing clean-up */
         skip("Skipping auto-open tests in Wine\n");
         return;
@@ -721,7 +732,8 @@ static void test_AutoOpenWAVE(HWND hwnd)
 
     if(err) /* FIXME: don't open twice yet, it confuses Wine. */
     err = mciSendString("play tempfile.wav", buf, sizeof(buf), hwnd);
-    ok(!err,"mci auto-open play returned %s\n", dbg_mcierr(err));
+    ok(err==ok_saved,"mci auto-open play returned %s\n", dbg_mcierr(err));
+
     if(err==MCIERR_FILE_NOT_FOUND) {
         skip("Cannot open tempfile.wav for auto-play, skipping\n");
         return;
@@ -771,8 +783,9 @@ static void test_AutoOpenWAVE(HWND hwnd)
      */
     err = mciSendString("status tempfile.wav mode notify", buf, sizeof(buf), hwnd);
     todo_wine ok(err==MCIERR_NOTIFY_ON_AUTO_OPEN, "mci status auto-open notify returned %s\n", dbg_mcierr(err));
-    if(!err) { /* Wine style */
-        trace("New style MCI auto-close upon notification behaviour.\n");
+    if(!err) {
+        trace("Wine style MCI auto-close upon notification\n");
+
         /* "playing" because auto-close comes after the status call. */
         todo_wine ok(!strcmp(buf,"playing"), "mci auto-open status mode notify, got: %s\n", buf);
         /* fixme:winmm:MMDRV_Exit Closing while ll-driver open
@@ -782,7 +795,7 @@ static void test_AutoOpenWAVE(HWND hwnd)
         Sleep(16);
         test_notification(hwnd,"auto-open",0);
     } else if(err==MCIERR_NOTIFY_ON_AUTO_OPEN) { /* MS style */
-        trace("Old style MCI auto-open forbids notification behaviour.\n");
+        trace("MS style MCI auto-open forbids notification\n");
 
         err = mciSendString("pause tempfile.wav", NULL, 0, hwnd);
         ok(!err,"mci auto-still-open pause returned %s\n", dbg_mcierr(err));
@@ -833,6 +846,6 @@ START_TEST(mci)
     /* Win9X hangs when exiting with something still open. */
     err = mciSendString("close all", NULL, 0, hwnd);
     todo_wine ok(!err,"final close all returned %s\n", dbg_mcierr(err));
-    ok(DeleteFile("tempfile.wav"),"Delete tempfile.wav (cause auto-open?)\n");
+    ok(DeleteFile("tempfile.wav")||ok_saved,"Delete tempfile.wav (cause auto-open?)\n");
     DestroyWindow(hwnd);
 }




More information about the wine-cvs mailing list