[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