[PATCH 2/3] msacm32/tests: Move stream tests to separate file.

Zebediah Figura z.figura12 at gmail.com
Tue Jun 13 12:20:00 CDT 2017


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/msacm32/tests/Makefile.in |   3 +-
 dlls/msacm32/tests/msacm.c     | 204 -----------------------------------
 dlls/msacm32/tests/stream.c    | 234 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 236 insertions(+), 205 deletions(-)
 create mode 100644 dlls/msacm32/tests/stream.c

diff --git a/dlls/msacm32/tests/Makefile.in b/dlls/msacm32/tests/Makefile.in
index dba7cfee3da..db526babb72 100644
--- a/dlls/msacm32/tests/Makefile.in
+++ b/dlls/msacm32/tests/Makefile.in
@@ -2,4 +2,5 @@ TESTDLL   = msacm32.dll
 IMPORTS   = msacm32 winmm
 
 C_SRCS = \
-	msacm.c
+	msacm.c \
+	stream.c
diff --git a/dlls/msacm32/tests/msacm.c b/dlls/msacm32/tests/msacm.c
index 02149646be2..a9dc3b7aae6 100644
--- a/dlls/msacm32/tests/msacm.c
+++ b/dlls/msacm32/tests/msacm.c
@@ -839,209 +839,6 @@ static void driver_tests(void)
       rc, MMSYSERR_NOERROR);
 }
 
-static void test_prepareheader(void)
-{
-    HACMSTREAM has;
-    ADPCMWAVEFORMAT *src;
-    WAVEFORMATEX dst;
-    MMRESULT mr;
-    ACMSTREAMHEADER hdr;
-    BYTE buf[sizeof(WAVEFORMATEX) + 32], pcm[2048], input[512];
-    ADPCMCOEFSET *coef;
-
-    src = (ADPCMWAVEFORMAT*)buf;
-    coef = src->aCoef;
-    src->wfx.cbSize = 32;
-    src->wfx.wFormatTag = WAVE_FORMAT_ADPCM;
-    src->wfx.nSamplesPerSec = 22050;
-    src->wfx.wBitsPerSample = 4;
-    src->wfx.nChannels = 1;
-    src->wfx.nBlockAlign = 512;
-    src->wfx.nAvgBytesPerSec = 11025;
-    src->wSamplesPerBlock = 0x3f4;
-    src->wNumCoef = 7;
-    coef[0].iCoef1 = 0x0100;
-    coef[0].iCoef2 = 0x0000;
-    coef[1].iCoef1 = 0x0200;
-    coef[1].iCoef2 = 0xff00;
-    coef[2].iCoef1 = 0x0000;
-    coef[2].iCoef2 = 0x0000;
-    coef[3].iCoef1 = 0x00c0;
-    coef[3].iCoef2 = 0x0040;
-    coef[4].iCoef1 = 0x00f0;
-    coef[4].iCoef2 = 0x0000;
-    coef[5].iCoef1 = 0x01cc;
-    coef[5].iCoef2 = 0xff30;
-    coef[6].iCoef1 = 0x0188;
-    coef[6].iCoef2 = 0xff18;
-
-    dst.cbSize = 0;
-    dst.wFormatTag = WAVE_FORMAT_PCM;
-    dst.nSamplesPerSec = 22050;
-    dst.wBitsPerSample = 8;
-    dst.nChannels = 1;
-    dst.nBlockAlign = dst.wBitsPerSample * dst.nChannels / 8;
-    dst.nAvgBytesPerSec = dst.nSamplesPerSec * dst.nBlockAlign;
-
-    mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)src, &dst, NULL, 0, 0, 0);
-    ok(mr == MMSYSERR_NOERROR, "open failed: 0x%x\n", mr);
-
-    memset(input, 0, sizeof(input));
-    memset(&hdr, 0, sizeof(hdr));
-    hdr.cbStruct = sizeof(hdr);
-    hdr.pbSrc = input;
-    hdr.cbSrcLength = sizeof(input);
-    hdr.pbDst = pcm;
-    hdr.cbDstLength = sizeof(pcm);
-
-    mr = acmStreamPrepareHeader(has, &hdr, 0);
-    ok(mr == MMSYSERR_NOERROR, "prepare failed: 0x%x\n", mr);
-    ok(hdr.fdwStatus == ACMSTREAMHEADER_STATUSF_PREPARED, "header wasn't prepared: 0x%x\n", hdr.fdwStatus);
-
-    mr = acmStreamUnprepareHeader(has, &hdr, 0);
-    ok(mr == MMSYSERR_NOERROR, "unprepare failed: 0x%x\n", mr);
-    ok(hdr.fdwStatus == 0, "header wasn't unprepared: 0x%x\n", hdr.fdwStatus);
-
-    memset(&hdr, 0, sizeof(hdr));
-    hdr.cbStruct = sizeof(hdr);
-    hdr.pbSrc = input;
-    hdr.cbSrcLength = 0; /* invalid source length */
-    hdr.pbDst = pcm;
-    hdr.cbDstLength = sizeof(pcm);
-
-    mr = acmStreamPrepareHeader(has, &hdr, 0);
-    ok(mr == MMSYSERR_INVALPARAM, "expected 0x0b, got 0x%x\n", mr);
-
-    hdr.cbSrcLength = src->wfx.nBlockAlign - 1; /* less than block align */
-    mr = acmStreamPrepareHeader(has, &hdr, 0);
-    ok(mr == ACMERR_NOTPOSSIBLE, "expected 0x200, got 0x%x\n", mr);
-
-    hdr.cbSrcLength = src->wfx.nBlockAlign + 1; /* more than block align */
-    mr = acmStreamPrepareHeader(has, &hdr, 0);
-    ok(mr == MMSYSERR_NOERROR, "prepare failed: 0x%x\n", mr);
-
-    mr = acmStreamUnprepareHeader(has, &hdr, 0);
-    ok(mr == MMSYSERR_NOERROR, "unprepare failed: 0x%x\n", mr);
-
-    hdr.cbSrcLength = src->wfx.nBlockAlign;
-    mr = acmStreamPrepareHeader(has, &hdr, 1); /* invalid use of reserved parameter */
-    ok(mr == MMSYSERR_INVALFLAG, "expected 0x0a, got 0x%x\n", mr);
-
-    mr = acmStreamPrepareHeader(has, &hdr, 0);
-    ok(mr == MMSYSERR_NOERROR, "prepare failed: 0x%x\n", mr);
-
-    mr = acmStreamUnprepareHeader(has, &hdr, 0);
-    ok(mr == MMSYSERR_NOERROR, "unprepare failed: 0x%x\n", mr);
-
-    memset(&hdr, 0, sizeof(hdr));
-    hdr.cbStruct = sizeof(hdr);
-    hdr.pbSrc = input;
-    hdr.cbSrcLength = sizeof(input);
-    hdr.pbDst = pcm;
-    hdr.cbDstLength = sizeof(pcm);
-    hdr.fdwStatus = ACMSTREAMHEADER_STATUSF_DONE;
-
-    mr = acmStreamPrepareHeader(has, &hdr, 0);
-    ok(mr == MMSYSERR_NOERROR, "prepare failed: 0x%x\n", mr);
-    ok(hdr.fdwStatus == (ACMSTREAMHEADER_STATUSF_PREPARED | ACMSTREAMHEADER_STATUSF_DONE), "header wasn't prepared: 0x%x\n", hdr.fdwStatus);
-
-    hdr.cbSrcLengthUsed = 12345;
-    hdr.cbDstLengthUsed = 12345;
-    hdr.fdwStatus &= ~ACMSTREAMHEADER_STATUSF_DONE;
-    mr = acmStreamConvert(has, &hdr, ACM_STREAMCONVERTF_BLOCKALIGN);
-    ok(mr == MMSYSERR_NOERROR, "convert failed: 0x%x\n", mr);
-    ok(hdr.fdwStatus & ACMSTREAMHEADER_STATUSF_DONE, "conversion was not done: 0x%x\n", hdr.fdwStatus);
-    ok(hdr.cbSrcLengthUsed == hdr.cbSrcLength, "expected %d, got %d\n", hdr.cbSrcLength, hdr.cbSrcLengthUsed);
-todo_wine
-    ok(hdr.cbDstLengthUsed == 1010, "expected 1010, got %d\n", hdr.cbDstLengthUsed);
-
-    mr = acmStreamUnprepareHeader(has, &hdr, 0);
-    ok(mr == MMSYSERR_NOERROR, "unprepare failed: 0x%x\n", mr);
-    ok(hdr.fdwStatus == ACMSTREAMHEADER_STATUSF_DONE, "header wasn't unprepared: 0x%x\n", hdr.fdwStatus);
-
-    /* The 2 next tests are related to Lost Horizon (bug 24723) */
-    memset(&hdr, 0, sizeof(hdr));
-    hdr.cbStruct = sizeof(hdr);
-    hdr.pbSrc = input;
-    hdr.cbSrcLength = sizeof(input);
-    hdr.pbDst = pcm;
-    hdr.cbDstLength = -4;
-
-    mr = acmStreamPrepareHeader(has, &hdr, 0);
-    if (sizeof(void *) == 4) /* 64 bit fails on this test */
-    {
-        ok(mr == MMSYSERR_NOERROR, "prepare failed: 0x%x\n", mr);
-        ok(hdr.fdwStatus == ACMSTREAMHEADER_STATUSF_PREPARED, "header wasn't prepared: 0x%x\n", hdr.fdwStatus);
-
-        hdr.cbSrcLengthUsed = 12345;
-        hdr.cbDstLengthUsed = 12345;
-        hdr.fdwStatus &= ~ACMSTREAMHEADER_STATUSF_DONE;
-        mr = acmStreamConvert(has, &hdr, ACM_STREAMCONVERTF_BLOCKALIGN);
-        ok(mr == MMSYSERR_NOERROR, "convert failed: 0x%x\n", mr);
-        ok(hdr.fdwStatus & ACMSTREAMHEADER_STATUSF_DONE, "conversion was not done: 0x%x\n", hdr.fdwStatus);
-        ok(hdr.cbSrcLengthUsed == hdr.cbSrcLength, "expected %d, got %d\n", hdr.cbSrcLength, hdr.cbSrcLengthUsed);
-todo_wine
-        ok(hdr.cbDstLengthUsed == 1010, "expected 1010, got %d\n", hdr.cbDstLengthUsed);
-
-        mr = acmStreamUnprepareHeader(has, &hdr, 0);
-        ok(mr == MMSYSERR_NOERROR, "unprepare failed: 0x%x\n", mr);
-        ok(hdr.fdwStatus == ACMSTREAMHEADER_STATUSF_DONE, "header wasn't unprepared: 0x%x\n", hdr.fdwStatus);
-    }
-    else
-todo_wine
-        ok(mr == MMSYSERR_INVALPARAM, "expected 0x0b, got 0x%x\n", mr);
-
-    memset(&hdr, 0, sizeof(hdr));
-    hdr.cbStruct = sizeof(hdr);
-    hdr.pbSrc = input;
-    hdr.cbSrcLength = 24;
-    hdr.pbDst = pcm;
-    hdr.cbDstLength = -4;
-    mr = acmStreamPrepareHeader(has, &hdr, 0);
-    ok(mr == ACMERR_NOTPOSSIBLE, "expected 0x200, got 0x%x\n", mr);
-    ok(hdr.fdwStatus == 0, "expected 0, got 0x%x\n", hdr.fdwStatus);
-
-    hdr.cbSrcLengthUsed = 12345;
-    hdr.cbDstLengthUsed = 12345;
-    mr = acmStreamConvert(has, &hdr, ACM_STREAMCONVERTF_BLOCKALIGN);
-    ok(mr == ACMERR_UNPREPARED, "expected 0x202, got 0x%x\n", mr);
-    ok(hdr.cbSrcLengthUsed == 12345, "expected 12345, got %d\n", hdr.cbSrcLengthUsed);
-    ok(hdr.cbDstLengthUsed == 12345, "expected 12345, got %d\n", hdr.cbDstLengthUsed);
-
-    mr = acmStreamUnprepareHeader(has, &hdr, 0);
-    ok(mr == ACMERR_UNPREPARED, "expected 0x202, got 0x%x\n", mr);
-
-    /* Less output space than required */
-    memset(&hdr, 0, sizeof(hdr));
-    hdr.cbStruct = sizeof(hdr);
-    hdr.pbSrc = input;
-    hdr.cbSrcLength = sizeof(input);
-    hdr.pbDst = pcm;
-    hdr.cbDstLength = 32;
-
-    mr = acmStreamPrepareHeader(has, &hdr, 0);
-    ok(mr == MMSYSERR_NOERROR, "prepare failed: 0x%x\n", mr);
-    ok(hdr.fdwStatus == ACMSTREAMHEADER_STATUSF_PREPARED, "header wasn't prepared: 0x%x\n", hdr.fdwStatus);
-
-    hdr.cbSrcLengthUsed = 12345;
-    hdr.cbDstLengthUsed = 12345;
-    hdr.fdwStatus &= ~ACMSTREAMHEADER_STATUSF_DONE;
-    mr = acmStreamConvert(has, &hdr, ACM_STREAMCONVERTF_BLOCKALIGN);
-    ok(mr == MMSYSERR_NOERROR, "convert failed: 0x%x\n", mr);
-    ok(hdr.fdwStatus & ACMSTREAMHEADER_STATUSF_DONE, "conversion was not done: 0x%x\n", hdr.fdwStatus);
-todo_wine
-    ok(hdr.cbSrcLengthUsed == hdr.cbSrcLength, "expected %d, got %d\n", hdr.cbSrcLength, hdr.cbSrcLengthUsed);
-todo_wine
-    ok(hdr.cbDstLengthUsed == hdr.cbDstLength, "expected %d, got %d\n", hdr.cbDstLength, hdr.cbDstLengthUsed);
-
-    mr = acmStreamUnprepareHeader(has, &hdr, 0);
-    ok(mr == MMSYSERR_NOERROR, "unprepare failed: 0x%x\n", mr);
-    ok(hdr.fdwStatus == ACMSTREAMHEADER_STATUSF_DONE, "header wasn't unprepared: 0x%x\n", hdr.fdwStatus);
-
-    mr = acmStreamClose(has, 0);
-    ok(mr == MMSYSERR_NOERROR, "close failed: 0x%x\n", mr);
-}
-
 static void test_acmFormatSuggest(void)
 {
     WAVEFORMATEX src, dst;
@@ -1317,7 +1114,6 @@ todo_wine
 START_TEST(msacm)
 {
     driver_tests();
-    test_prepareheader();
     test_acmFormatSuggest();
     test_acmFormatTagDetails();
     /* Test acmDriverAdd in the end as it may conflict
diff --git a/dlls/msacm32/tests/stream.c b/dlls/msacm32/tests/stream.c
new file mode 100644
index 00000000000..cfce725ff95
--- /dev/null
+++ b/dlls/msacm32/tests/stream.c
@@ -0,0 +1,234 @@
+/*
+ * Unit tests for ACM stream functions
+ *
+ * Copyright (c) 2017 Zebediah Figura for Codeweavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "wine/test.h"
+
+#include "mmsystem.h"
+#define NOBITMAP
+#include "mmreg.h"
+#include "msacm.h"
+
+static void test_prepareheader(void)
+{
+    HACMSTREAM has;
+    ADPCMWAVEFORMAT *src;
+    WAVEFORMATEX dst;
+    MMRESULT mr;
+    ACMSTREAMHEADER hdr;
+    BYTE buf[sizeof(WAVEFORMATEX) + 32], pcm[2048], input[512];
+    ADPCMCOEFSET *coef;
+
+    src = (ADPCMWAVEFORMAT*)buf;
+    coef = src->aCoef;
+    src->wfx.cbSize = 32;
+    src->wfx.wFormatTag = WAVE_FORMAT_ADPCM;
+    src->wfx.nSamplesPerSec = 22050;
+    src->wfx.wBitsPerSample = 4;
+    src->wfx.nChannels = 1;
+    src->wfx.nBlockAlign = 512;
+    src->wfx.nAvgBytesPerSec = 11025;
+    src->wSamplesPerBlock = 0x3f4;
+    src->wNumCoef = 7;
+    coef[0].iCoef1 = 0x0100;
+    coef[0].iCoef2 = 0x0000;
+    coef[1].iCoef1 = 0x0200;
+    coef[1].iCoef2 = 0xff00;
+    coef[2].iCoef1 = 0x0000;
+    coef[2].iCoef2 = 0x0000;
+    coef[3].iCoef1 = 0x00c0;
+    coef[3].iCoef2 = 0x0040;
+    coef[4].iCoef1 = 0x00f0;
+    coef[4].iCoef2 = 0x0000;
+    coef[5].iCoef1 = 0x01cc;
+    coef[5].iCoef2 = 0xff30;
+    coef[6].iCoef1 = 0x0188;
+    coef[6].iCoef2 = 0xff18;
+
+    dst.cbSize = 0;
+    dst.wFormatTag = WAVE_FORMAT_PCM;
+    dst.nSamplesPerSec = 22050;
+    dst.wBitsPerSample = 8;
+    dst.nChannels = 1;
+    dst.nBlockAlign = dst.wBitsPerSample * dst.nChannels / 8;
+    dst.nAvgBytesPerSec = dst.nSamplesPerSec * dst.nBlockAlign;
+
+    mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)src, &dst, NULL, 0, 0, 0);
+    ok(mr == MMSYSERR_NOERROR, "open failed: 0x%x\n", mr);
+
+    memset(input, 0, sizeof(input));
+    memset(&hdr, 0, sizeof(hdr));
+    hdr.cbStruct = sizeof(hdr);
+    hdr.pbSrc = input;
+    hdr.cbSrcLength = sizeof(input);
+    hdr.pbDst = pcm;
+    hdr.cbDstLength = sizeof(pcm);
+
+    mr = acmStreamPrepareHeader(has, &hdr, 0);
+    ok(mr == MMSYSERR_NOERROR, "prepare failed: 0x%x\n", mr);
+    ok(hdr.fdwStatus == ACMSTREAMHEADER_STATUSF_PREPARED, "header wasn't prepared: 0x%x\n", hdr.fdwStatus);
+
+    mr = acmStreamUnprepareHeader(has, &hdr, 0);
+    ok(mr == MMSYSERR_NOERROR, "unprepare failed: 0x%x\n", mr);
+    ok(hdr.fdwStatus == 0, "header wasn't unprepared: 0x%x\n", hdr.fdwStatus);
+
+    memset(&hdr, 0, sizeof(hdr));
+    hdr.cbStruct = sizeof(hdr);
+    hdr.pbSrc = input;
+    hdr.cbSrcLength = 0; /* invalid source length */
+    hdr.pbDst = pcm;
+    hdr.cbDstLength = sizeof(pcm);
+
+    mr = acmStreamPrepareHeader(has, &hdr, 0);
+    ok(mr == MMSYSERR_INVALPARAM, "expected 0x0b, got 0x%x\n", mr);
+
+    hdr.cbSrcLength = src->wfx.nBlockAlign - 1; /* less than block align */
+    mr = acmStreamPrepareHeader(has, &hdr, 0);
+    ok(mr == ACMERR_NOTPOSSIBLE, "expected 0x200, got 0x%x\n", mr);
+
+    hdr.cbSrcLength = src->wfx.nBlockAlign + 1; /* more than block align */
+    mr = acmStreamPrepareHeader(has, &hdr, 0);
+    ok(mr == MMSYSERR_NOERROR, "prepare failed: 0x%x\n", mr);
+
+    mr = acmStreamUnprepareHeader(has, &hdr, 0);
+    ok(mr == MMSYSERR_NOERROR, "unprepare failed: 0x%x\n", mr);
+
+    hdr.cbSrcLength = src->wfx.nBlockAlign;
+    mr = acmStreamPrepareHeader(has, &hdr, 1); /* invalid use of reserved parameter */
+    ok(mr == MMSYSERR_INVALFLAG, "expected 0x0a, got 0x%x\n", mr);
+
+    mr = acmStreamPrepareHeader(has, &hdr, 0);
+    ok(mr == MMSYSERR_NOERROR, "prepare failed: 0x%x\n", mr);
+
+    mr = acmStreamUnprepareHeader(has, &hdr, 0);
+    ok(mr == MMSYSERR_NOERROR, "unprepare failed: 0x%x\n", mr);
+
+    memset(&hdr, 0, sizeof(hdr));
+    hdr.cbStruct = sizeof(hdr);
+    hdr.pbSrc = input;
+    hdr.cbSrcLength = sizeof(input);
+    hdr.pbDst = pcm;
+    hdr.cbDstLength = sizeof(pcm);
+    hdr.fdwStatus = ACMSTREAMHEADER_STATUSF_DONE;
+
+    mr = acmStreamPrepareHeader(has, &hdr, 0);
+    ok(mr == MMSYSERR_NOERROR, "prepare failed: 0x%x\n", mr);
+    ok(hdr.fdwStatus == (ACMSTREAMHEADER_STATUSF_PREPARED | ACMSTREAMHEADER_STATUSF_DONE), "header wasn't prepared: 0x%x\n", hdr.fdwStatus);
+
+    hdr.cbSrcLengthUsed = 12345;
+    hdr.cbDstLengthUsed = 12345;
+    hdr.fdwStatus &= ~ACMSTREAMHEADER_STATUSF_DONE;
+    mr = acmStreamConvert(has, &hdr, ACM_STREAMCONVERTF_BLOCKALIGN);
+    ok(mr == MMSYSERR_NOERROR, "convert failed: 0x%x\n", mr);
+    ok(hdr.fdwStatus & ACMSTREAMHEADER_STATUSF_DONE, "conversion was not done: 0x%x\n", hdr.fdwStatus);
+    ok(hdr.cbSrcLengthUsed == hdr.cbSrcLength, "expected %d, got %d\n", hdr.cbSrcLength, hdr.cbSrcLengthUsed);
+todo_wine
+    ok(hdr.cbDstLengthUsed == 1010, "expected 1010, got %d\n", hdr.cbDstLengthUsed);
+
+    mr = acmStreamUnprepareHeader(has, &hdr, 0);
+    ok(mr == MMSYSERR_NOERROR, "unprepare failed: 0x%x\n", mr);
+    ok(hdr.fdwStatus == ACMSTREAMHEADER_STATUSF_DONE, "header wasn't unprepared: 0x%x\n", hdr.fdwStatus);
+
+    /* The 2 next tests are related to Lost Horizon (bug 24723) */
+    memset(&hdr, 0, sizeof(hdr));
+    hdr.cbStruct = sizeof(hdr);
+    hdr.pbSrc = input;
+    hdr.cbSrcLength = sizeof(input);
+    hdr.pbDst = pcm;
+    hdr.cbDstLength = -4;
+
+    mr = acmStreamPrepareHeader(has, &hdr, 0);
+    if (sizeof(void *) == 4) /* 64 bit fails on this test */
+    {
+        ok(mr == MMSYSERR_NOERROR, "prepare failed: 0x%x\n", mr);
+        ok(hdr.fdwStatus == ACMSTREAMHEADER_STATUSF_PREPARED, "header wasn't prepared: 0x%x\n", hdr.fdwStatus);
+
+        hdr.cbSrcLengthUsed = 12345;
+        hdr.cbDstLengthUsed = 12345;
+        hdr.fdwStatus &= ~ACMSTREAMHEADER_STATUSF_DONE;
+        mr = acmStreamConvert(has, &hdr, ACM_STREAMCONVERTF_BLOCKALIGN);
+        ok(mr == MMSYSERR_NOERROR, "convert failed: 0x%x\n", mr);
+        ok(hdr.fdwStatus & ACMSTREAMHEADER_STATUSF_DONE, "conversion was not done: 0x%x\n", hdr.fdwStatus);
+        ok(hdr.cbSrcLengthUsed == hdr.cbSrcLength, "expected %d, got %d\n", hdr.cbSrcLength, hdr.cbSrcLengthUsed);
+todo_wine
+        ok(hdr.cbDstLengthUsed == 1010, "expected 1010, got %d\n", hdr.cbDstLengthUsed);
+
+        mr = acmStreamUnprepareHeader(has, &hdr, 0);
+        ok(mr == MMSYSERR_NOERROR, "unprepare failed: 0x%x\n", mr);
+        ok(hdr.fdwStatus == ACMSTREAMHEADER_STATUSF_DONE, "header wasn't unprepared: 0x%x\n", hdr.fdwStatus);
+    }
+    else
+todo_wine
+        ok(mr == MMSYSERR_INVALPARAM, "expected 0x0b, got 0x%x\n", mr);
+
+    memset(&hdr, 0, sizeof(hdr));
+    hdr.cbStruct = sizeof(hdr);
+    hdr.pbSrc = input;
+    hdr.cbSrcLength = 24;
+    hdr.pbDst = pcm;
+    hdr.cbDstLength = -4;
+    mr = acmStreamPrepareHeader(has, &hdr, 0);
+    ok(mr == ACMERR_NOTPOSSIBLE, "expected 0x200, got 0x%x\n", mr);
+    ok(hdr.fdwStatus == 0, "expected 0, got 0x%x\n", hdr.fdwStatus);
+
+    hdr.cbSrcLengthUsed = 12345;
+    hdr.cbDstLengthUsed = 12345;
+    mr = acmStreamConvert(has, &hdr, ACM_STREAMCONVERTF_BLOCKALIGN);
+    ok(mr == ACMERR_UNPREPARED, "expected 0x202, got 0x%x\n", mr);
+    ok(hdr.cbSrcLengthUsed == 12345, "expected 12345, got %d\n", hdr.cbSrcLengthUsed);
+    ok(hdr.cbDstLengthUsed == 12345, "expected 12345, got %d\n", hdr.cbDstLengthUsed);
+
+    mr = acmStreamUnprepareHeader(has, &hdr, 0);
+    ok(mr == ACMERR_UNPREPARED, "expected 0x202, got 0x%x\n", mr);
+
+    /* Less output space than required */
+    memset(&hdr, 0, sizeof(hdr));
+    hdr.cbStruct = sizeof(hdr);
+    hdr.pbSrc = input;
+    hdr.cbSrcLength = sizeof(input);
+    hdr.pbDst = pcm;
+    hdr.cbDstLength = 32;
+
+    mr = acmStreamPrepareHeader(has, &hdr, 0);
+    ok(mr == MMSYSERR_NOERROR, "prepare failed: 0x%x\n", mr);
+    ok(hdr.fdwStatus == ACMSTREAMHEADER_STATUSF_PREPARED, "header wasn't prepared: 0x%x\n", hdr.fdwStatus);
+
+    hdr.cbSrcLengthUsed = 12345;
+    hdr.cbDstLengthUsed = 12345;
+    hdr.fdwStatus &= ~ACMSTREAMHEADER_STATUSF_DONE;
+    mr = acmStreamConvert(has, &hdr, ACM_STREAMCONVERTF_BLOCKALIGN);
+    ok(mr == MMSYSERR_NOERROR, "convert failed: 0x%x\n", mr);
+    ok(hdr.fdwStatus & ACMSTREAMHEADER_STATUSF_DONE, "conversion was not done: 0x%x\n", hdr.fdwStatus);
+todo_wine
+    ok(hdr.cbSrcLengthUsed == hdr.cbSrcLength, "expected %d, got %d\n", hdr.cbSrcLength, hdr.cbSrcLengthUsed);
+todo_wine
+    ok(hdr.cbDstLengthUsed == hdr.cbDstLength, "expected %d, got %d\n", hdr.cbDstLength, hdr.cbDstLengthUsed);
+
+    mr = acmStreamUnprepareHeader(has, &hdr, 0);
+    ok(mr == MMSYSERR_NOERROR, "unprepare failed: 0x%x\n", mr);
+    ok(hdr.fdwStatus == ACMSTREAMHEADER_STATUSF_DONE, "header wasn't unprepared: 0x%x\n", hdr.fdwStatus);
+
+    mr = acmStreamClose(has, 0);
+    ok(mr == MMSYSERR_NOERROR, "close failed: 0x%x\n", mr);
+}
+
+START_TEST(stream)
+{
+    test_prepareheader();
+}
-- 
2.13.0




More information about the wine-patches mailing list