[PATCH v2 4/4] amstream/tests: Add IDirectDrawMediaStream::SetDirectDraw() tests.

Zebediah Figura zfigura at codeweavers.com
Fri Jun 19 12:11:04 CDT 2020


On 6/19/20 9:10 AM, Gijs Vermeulen wrote:
> Signed-off-by: Gijs Vermeulen <gijsvrm at gmail.com>
> ---
>  dlls/amstream/tests/amstream.c | 120 ++++++++++++++++++++++++++++-----
>  1 file changed, 103 insertions(+), 17 deletions(-)
> 
> diff --git a/dlls/amstream/tests/amstream.c b/dlls/amstream/tests/amstream.c
> index 72ef7912aa..c04869b506 100644
> --- a/dlls/amstream/tests/amstream.c
> +++ b/dlls/amstream/tests/amstream.c
> @@ -2013,8 +2013,6 @@ static void test_IDirectDrawStreamSample(void)
>      DDSURFACEDESC desc = { sizeof(desc) };
>      IAMMultiMediaStream *mmstream;
>      IDirectDrawSurface7 *surface7;
> -    IDirectDraw *ddraw, *ddraw2;
> -    IDirectDraw7 *ddraw7;
>      HRESULT hr;
>      RECT rect;
>  
> @@ -2040,21 +2038,6 @@ static void test_IDirectDrawStreamSample(void)
>      ok(hr == S_OK, "got 0x%08x\n", hr);
>      if (FAILED(hr)) goto error;
>  
> -    hr = IDirectDrawMediaStream_GetDirectDraw(ddraw_stream, &ddraw);
> -    ok(hr == S_OK, "got 0x%08x\n", hr);
> -
> -    hr = IDirectDrawMediaStream_GetDirectDraw(ddraw_stream, &ddraw2);
> -    ok(hr == S_OK, "got 0x%08x\n", hr);
> -    ok(ddraw == ddraw2, "got %p, %p\n", ddraw, ddraw2);
> -
> -    hr = IDirectDraw_QueryInterface(ddraw, &IID_IDirectDraw7, (void **)&ddraw7);
> -    ok(hr == S_OK, "got 0x%08x\n", hr);
> -    ok(ddraw7 == pdd7, "Got IDirectDraw instance %p, expected %p.\n", ddraw7, pdd7);
> -    IDirectDraw7_Release(ddraw7);
> -
> -    IDirectDraw_Release(ddraw2);
> -    IDirectDraw_Release(ddraw);
> -
>      hr = IDirectDrawMediaStream_CreateSample(ddraw_stream, NULL, NULL, 0, &sample);
>      ok(hr == S_OK, "got 0x%08x\n", hr);
>  
> @@ -4478,6 +4461,108 @@ static void test_mediastreamfilter_get_current_stream_time(void)
>      ok(!ref, "Got outstanding refcount %d.\n", ref);
>  }
>  
> +static void test_ddrawstream_getsetdirectdraw(void)
> +{
> +    IDirectDrawMediaStream *ddraw_stream;
> +    IDirectDraw *ddraw, *ddraw2, *ddraw3;
> +    IDirectDrawStreamSample *sample;
> +    IAMMultiMediaStream *mmstream;
> +    IMediaStream *stream;
> +    IDirectDraw7 *ddraw7;
> +    HRESULT hr;
> +
> +    if (!(mmstream = create_ammultimediastream()))
> +        return;

Nitpick: this failure check was probably copied from some other tests,
but should really go away entirely. (In general I don't see a lot of
point in trying to alleviate test failures like this—a test failure is a
test failure; it needs to be fixed whether it's an ok() message or a crash.)

> +    if (!create_directdraw())
> +    {
> +        IAMMultiMediaStream_Release(mmstream);
> +        return;
> +    }

As long as you're moving this, it would be nice to create a local ddraw
object instead of using a global one, essentially just like below. (It'd
probably simplify a couple of tests, too.)

> +
> +    hr = IAMMultiMediaStream_Initialize(mmstream, STREAMTYPE_READ, 0, NULL);
> +    ok(hr == S_OK, "got 0x%08x\n", hr);

Just another nitpick, would you mind fixing up these trace messages
while you're moving them?

> +
> +    hr = IAMMultiMediaStream_AddMediaStream(mmstream, (IUnknown*)pdd7, &MSPID_PrimaryVideo, 0, NULL);
> +    ok(hr == S_OK, "got 0x%08x\n", hr);
> +
> +    hr = IAMMultiMediaStream_GetMediaStream(mmstream, &MSPID_PrimaryVideo, &stream);
> +    ok(hr == S_OK, "got 0x%08x\n", hr);

These were copied, so it's not a big deal, but you can essentially get
rid of the GetMediaStream() call by passing the final parameter to
AddMediaStream().

> +
> +    hr = IMediaStream_QueryInterface(stream, &IID_IDirectDrawMediaStream, (LPVOID*)&ddraw_stream);
> +    ok(hr == S_OK, "got 0x%08x\n", hr);
> +
> +    hr = IDirectDrawMediaStream_GetDirectDraw(ddraw_stream, NULL);
> +    ok(hr == E_POINTER, "Got hr %#x.\n", hr);
> +
> +    hr = IDirectDrawMediaStream_GetDirectDraw(ddraw_stream, &ddraw);
> +    ok(hr == S_OK, "Got hr %#x.\n", hr);
> +
> +    hr = IDirectDrawMediaStream_GetDirectDraw(ddraw_stream, &ddraw2);
> +    ok(hr == S_OK, "got 0x%08x\n", hr);
> +    ok(ddraw2 == ddraw, "Expected ddraw %p, got %p.\n", ddraw, ddraw2);
> +    IDirectDraw_Release(ddraw2);
> +
> +    hr = IDirectDraw_QueryInterface(ddraw, &IID_IDirectDraw7, (void **)&ddraw7);
> +    ok(hr == S_OK, "got 0x%08x\n", hr);
> +    ok(ddraw7 == pdd7, "Expected ddraw %p, got %p.\n", pdd7, ddraw7);
> +    IDirectDraw7_Release(ddraw7);
> +
> +    hr = IDirectDrawMediaStream_SetDirectDraw(ddraw_stream, NULL);
> +    todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
> +
> +    hr = IDirectDrawMediaStream_GetDirectDraw(ddraw_stream, &ddraw2);
> +    ok(hr == S_OK, "Got hr %#x.\n", hr);
> +    todo_wine ok(ddraw2 == NULL, "Expected NULL, got %p.\n", ddraw2);
> +
> +    hr = IDirectDrawMediaStream_SetDirectDraw(ddraw_stream, ddraw);
> +    todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
> +
> +    if (hr == S_OK)
> +    {
> +        hr = IDirectDrawMediaStream_GetDirectDraw(ddraw_stream, &ddraw2);
> +        ok(hr == S_OK, "Got hr %#x.\n", hr);
> +        ok(ddraw2 == ddraw, "Expected ddraw %p, got %p.\n", ddraw, ddraw2);
> +        IDirectDraw_Release(ddraw2);
> +
> +        hr = IDirectDrawMediaStream_CreateSample(ddraw_stream, NULL, NULL, 0, &sample);
> +        ok(hr == S_OK, "Got hr %#x.\n", hr);
> +
> +        hr = IDirectDrawMediaStream_SetDirectDraw(ddraw_stream, ddraw);
> +        ok(hr == S_OK, "Got hr %#x.\n", hr);
> +
> +        hr = DirectDrawCreate(NULL, &ddraw2, NULL);
> +        ok(hr == S_OK, "Got hr %#x.\n", hr);
> +        hr = IDirectDraw_SetCooperativeLevel(ddraw2, GetDesktopWindow(), DDSCL_NORMAL);
> +        ok(hr == DD_OK, "Got hr %#x.\n", hr);
> +
> +        hr = IDirectDrawMediaStream_SetDirectDraw(ddraw_stream, ddraw2);
> +        ok(hr == MS_E_SAMPLEALLOC, "Got hr %#x.\n", hr);
> +
> +        hr = IDirectDrawMediaStream_GetDirectDraw(ddraw_stream, &ddraw3);
> +        ok(hr == S_OK, "Got hr %#x.\n", hr);
> +        ok(ddraw3 == ddraw, "Expected ddraw %p, got %p.\n", ddraw, ddraw3);
> +        IDirectDraw_Release(ddraw3);
> +
> +        IDirectDrawStreamSample_Release(sample);
> +
> +        hr = IDirectDrawMediaStream_SetDirectDraw(ddraw_stream, ddraw2);
> +        ok(hr == S_OK, "Got hr %#x.\n", hr);
> +
> +        hr = IDirectDrawMediaStream_GetDirectDraw(ddraw_stream, &ddraw3);
> +        ok(hr == S_OK, "Got hr %#x.\n", hr);
> +        ok(ddraw3 == ddraw2, "Expected ddraw %p, got %p.\n", ddraw2, ddraw3);
> +        IDirectDraw_Release(ddraw3);
> +
> +        IDirectDraw_Release(ddraw2);
> +    }
> +
> +    IDirectDrawMediaStream_Release(ddraw_stream);
> +    IMediaStream_Release(stream);
> +    IDirectDraw_Release(ddraw);
> +    release_directdraw();
> +    IAMMultiMediaStream_Release(mmstream);

Can you please tests that reference counts reach 0 when appropriate? See
audio stream tests for examples.

> +}
> +
>  START_TEST(amstream)
>  {
>      HANDLE file;
> @@ -4524,6 +4609,7 @@ START_TEST(amstream)
>      test_audiostreamsample_completion_status();
>  
>      test_ddrawstream_initialize();
> +    test_ddrawstream_getsetdirectdraw();
>  
>      test_ammediastream_join_am_multi_media_stream();
>  
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20200619/357880b0/attachment.sig>


More information about the wine-devel mailing list