Jörg Höhle : mciwave/tests: Fix a few tests including one hang on Win9X.
Alexandre Julliard
julliard at winehq.org
Fri Nov 13 09:37:08 CST 2009
Module: wine
Branch: master
Commit: b04178eb01c3ff02057ce185e4d9659d3eebf7e2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b04178eb01c3ff02057ce185e4d9659d3eebf7e2
Author: Jörg Höhle <Joerg-Cyril.Hoehle at t-systems.com>
Date: Fri Nov 13 14:40:12 2009 +0100
mciwave/tests: Fix a few tests including one hang on Win9X.
---
dlls/winmm/tests/mci.c | 102 +++++++++++++++++++++++++++++------------------
1 files changed, 63 insertions(+), 39 deletions(-)
diff --git a/dlls/winmm/tests/mci.c b/dlls/winmm/tests/mci.c
index 90f6e3a..d1c7dab 100644
--- a/dlls/winmm/tests/mci.c
+++ b/dlls/winmm/tests/mci.c
@@ -25,6 +25,12 @@
#include "mmreg.h"
#include "wine/test.h"
+typedef union {
+ MCI_STATUS_PARMS status;
+ MCI_WAVE_SET_PARMS set;
+ MCI_WAVE_OPEN_PARMS open;
+ } MCI_PARMS_UNION;
+
static const char* dbg_mcierr(MCIERROR err)
{
switch (err) {
@@ -165,15 +171,12 @@ static void test_openCloseWAVE(HWND hwnd)
ok(!err,"mci %s returned error: %d\n", command_open, err);
ok(!strcmp(buf,"1"), "mci open deviceId: %s, expected 1\n", buf);
- if (PRIMARYLANGID(LANGIDFROMLCID(GetThreadLocale())) != LANG_ENGLISH)
- {
- skip("Non-english locale (test with hardcoded 'milliseconds')\n");
- }
- else
- {
- err = mciSendString("status mysound time format", buf, sizeof(buf), hwnd);
- ok(!err,"mci status time format returned error: %d\n", err);
- ok(!strcmp(buf,"milliseconds"), "mci status time format: %s\n", buf);
+ err = mciSendString("status mysound time format", buf, sizeof(buf), hwnd);
+ ok(!err,"mci status time format returned error: %d\n", err);
+ if(!err) {
+ if (PRIMARYLANGID(LANGIDFROMLCID(GetThreadLocale())) == LANG_ENGLISH)
+ ok(!strcmp(buf,"milliseconds"), "mci status time format: %s\n", buf);
+ else trace("locale-dependent time format: %s (ms)\n", buf);
}
err = mciSendString(command_close_my, NULL, 0, hwnd);
@@ -198,6 +201,9 @@ static void test_openCloseWAVE(HWND hwnd)
ok(!err,"mci %s returned error: %d\n", command_sysinfo, err);
todo_wine ok(buf[0] == '0' && buf[1] == 0, "mci %s, expected output buffer '0', got: '%s'\n", command_sysinfo, buf);
+ err = mciSendCommand(MCI_ALL_DEVICE_ID, MCI_CLOSE, MCI_WAIT, 0); /* from MSDN */
+ ok(!err,"mciSendCommand(MCI_ALL_DEVICE_ID, MCI_CLOSE, MCI_NOTIFY, 0) returned %s\n", dbg_mcierr(err));
+
err = mciSendCommand(MCI_ALL_DEVICE_ID, MCI_CLOSE, MCI_NOTIFY, 0);
ok(!err,"mciSendCommand(MCI_ALL_DEVICE_ID, MCI_CLOSE, MCI_NOTIFY, 0) returned %s\n", dbg_mcierr(err));
@@ -214,11 +220,7 @@ static void test_recordWAVE(HWND hwnd)
DWORD nsamp = 16000, expect;
MCIERROR err;
MCIDEVICEID wDeviceID;
- union {
- MCI_STATUS_PARMS status;
- MCI_WAVE_SET_PARMS set;
- MCI_WAVE_OPEN_PARMS open;
- } parm;
+ MCI_PARMS_UNION parm;
char buf[1024];
memset(buf, 0, sizeof(buf));
@@ -246,8 +248,11 @@ static void test_recordWAVE(HWND hwnd)
err = mciSendString("set x format tag 2", NULL, 0, NULL);
ok(err==MCIERR_OUTOFRANGE,"mci set format tag 2 returned error: %d\n", err);
+ /* MCI appears to scan the available devices for support of this format,
+ * returning MCIERR_OUTOFRANGE on machines with no sound.
+ * Don't skip here, record will fail below. */
err = mciSendString("set x format tag pcm", NULL, 0, NULL);
- ok(!err,"mci set format tag pcm returned error: %d\n", err);
+ ok(!err || err==MCIERR_OUTOFRANGE,"mci set format tag pcm returned error: %d\n", err);
/* Investigate: on w2k, set samplespersec 22050 sets nChannels to 2!
* err = mciSendString("set x samplespersec 22050", NULL, 0, NULL);
@@ -264,12 +269,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,"mci returned error: %d\n", err);
+ ok(!err || err==MCIERR_OUTOFRANGE,"mciCommand set wave format returned error: %d\n", err);
err = mciSendString("record x to 2000 wait", NULL, 0, hwnd);
ok(!err,"mci record to 2000 returned error: %d\n", err);
if(err==MCIERR_WAVE_INPUTSUNSUITABLE) {
skip("Please install audio driver. Tests will fail\n");
+
+ err = mciSendString("close x", NULL, 0, NULL);
+ ok(!err,"mci close returned error: %d\n", err);
+ test_notification(hwnd,"record skipped",0);
return;
}
@@ -315,15 +324,14 @@ static void test_playWAVE(HWND hwnd)
{
MCIERROR err;
char buf[1024];
-
memset(buf, 0, sizeof(buf));
- err = mciSendString("open waveaudio!tempfile.wav alias mysound", buf, sizeof(buf), NULL);
- ok(!err,"mci open waveaudio!tempfile.wav returned error: %d\n", err);
+
+ err = mciSendString("open waveaudio!tempfile.wav alias mysound", NULL, 0, NULL);
+ ok(!err,"mci open waveaudio!tempfile.wav returned %s\n", dbg_mcierr(err));
if(err) {
- skip("tempfile.wav was not found (not saved), skipping\n");
+ skip("Cannot open tempfile.wav for playing #1, skipping\n");
return;
}
- ok(!strcmp(buf,"1"), "mci open deviceId: %s, expected 1\n", buf);
err = mciSendString("status mysound length", buf, sizeof(buf), NULL);
ok(!err,"mci status length returned error: %d\n", err);
@@ -406,16 +414,21 @@ static void test_playWAVE(HWND hwnd)
static void test_asyncWAVE(HWND hwnd)
{
+ MCIDEVICEID wDeviceID;
+ MCI_PARMS_UNION parm;
int err, p1, p2;
char buf[1024];
memset(buf, 0, sizeof(buf));
- err = mciSendString("open tempfile.wav alias mysound", NULL, 0, NULL);
- ok(!err,"mci open tempfile.wav returned error: %d\n", err);
+ err = mciSendString("open tempfile.wav alias mysound", buf, sizeof(buf), NULL);
+ ok(!err,"mci open tempfile.wav returned %s\n", dbg_mcierr(err));
if(err) {
- skip("tempfile.wav was not found (not saved), skipping\n");
+ skip("Cannot open tempfile.wav for playing #2, skipping\n");
return;
}
+ ok(!strcmp(buf,"1"), "mci open deviceId: %s, expected 1\n", buf);
+ wDeviceID = atoi(buf);
+ ok(wDeviceID,"mci open DeviceID: %d\n", wDeviceID);
err = mciSendString("status mysound mode", buf, sizeof(buf), hwnd);
ok(!err,"mci status mode returned error: %d\n", err);
@@ -429,22 +442,20 @@ static void test_asyncWAVE(HWND hwnd)
* will be 333ms, 667ms etc. at best. */
Sleep(100); /* milliseconds */
- if (PRIMARYLANGID(LANGIDFROMLCID(GetThreadLocale())) != LANG_ENGLISH)
- {
- skip("Non-english locale (test with hardcoded 'milliseconds')\n");
- }
- else
- {
- buf[0]=0;
- err = mciSendString("status mysound time format", buf, sizeof(buf), hwnd);
- ok(!err,"mci status time format returned error: %d\n", err);
- ok(!strcmp(buf,"milliseconds"), "mci status time format: %s\n", buf);
- }
+ /* Do not query time format as string because result depends on locale! */
+ parm.status.dwItem = MCI_STATUS_TIME_FORMAT;
+ err = mciSendCommand(wDeviceID, MCI_STATUS, MCI_STATUS_ITEM, (DWORD_PTR)&parm);
+ ok(!err,"mciCommand status time format returned error: %d\n",err);
+ if(!err) ok(parm.status.dwReturn==MCI_FORMAT_MILLISECONDS,"status time format: %ld\n",parm.status.dwReturn);
+
+ parm.set.dwTimeFormat = MCI_FORMAT_MILLISECONDS;
+ err = mciSendCommand(wDeviceID, MCI_SET, MCI_SET_TIME_FORMAT, (DWORD_PTR)&parm);
+ ok(!err,"mciCommand set time format returned error: %d\n",err);
buf[0]=0;
err = mciSendString("status mysound position", buf, sizeof(buf), hwnd);
ok(!err,"mci status position returned error: %d\n", err);
- ok(strcmp(buf,"2000"), "mci status position: %s\n", buf);
+ ok(strcmp(buf,"2000"), "mci status position: %s, expected 2000\n", buf);
trace("position after Sleep: %sms\n",buf);
p2 = atoi(buf);
/* Some machines reach 79ms only during the 100ms sleep. */
@@ -597,11 +608,16 @@ static void test_AutoOpenWAVE(HWND hwnd)
ok(!err,"mci sysinfo waveaudio quantity open returned error: %d\n", err);
if(!err) todo_wine ok(!strcmp(buf,"0"), "sysinfo quantity open expected 0, got: %s\n", buf);
+ buf[0]=0;
+ err = mciSendString("sysinfo waveaudio name 1 open", buf, sizeof(buf), NULL);
+ todo_wine ok(err==MCIERR_OUTOFRANGE,"sysinfo waveaudio name 1 returned error: %d\n", err);
+ 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) {
- /* Unsupported auto-open leaves the file open, preventing clean-up */
- skip("Skipping auto-open tests in Wine\n");
- return;
+ /* Unsupported auto-open leaves the file open, preventing clean-up */
+ skip("Skipping auto-open tests in Wine\n");
+ return;
}
err = mciSendString("play tempfile.wav notify", buf, sizeof(buf), hwnd);
@@ -610,6 +626,10 @@ 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 error: %d\n", err);
+ if(err==MCIERR_FILE_NOT_FOUND) {
+ skip("Cannot open tempfile.wav for auto-play, skipping\n");
+ return;
+ }
buf[0]=0;
err = mciSendString("sysinfo waveaudio quantity open", buf, sizeof(buf), NULL);
@@ -705,6 +725,7 @@ static void test_AutoOpenWAVE(HWND hwnd)
START_TEST(mci)
{
+ MCIERROR err;
HWND hwnd;
hwnd = CreateWindowExA(0, "static", "winmm test", WS_POPUP, 0,0,100,100,
0, 0, 0, NULL);
@@ -713,6 +734,9 @@ START_TEST(mci)
test_playWAVE(hwnd);
test_asyncWAVE(hwnd);
test_AutoOpenWAVE(hwnd);
+ /* 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");
DestroyWindow(hwnd);
}
More information about the wine-cvs
mailing list