Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/mfplat/tests/mfplat.c | 74 ++++++++++++++++++++++++++++++++++++++
1 file changed, 74 insertions(+)
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
index 4c878c9f8c..b3fbc46126 100644
--- a/dlls/mfplat/tests/mfplat.c
+++ b/dlls/mfplat/tests/mfplat.c
@@ -2347,6 +2347,79 @@ static void test_MFInvokeCallback(void)
ok(hr == S_OK, "Failed to shut down, hr %#x.\n", hr);
}
+static void test_stream_descriptor(void)
+{
+ IMFMediaType *media_types[2], *media_type;
+ IMFMediaTypeHandler *type_handler;
+ IMFStreamDescriptor *stream_desc;
+ GUID major_type;
+ DWORD id, count;
+ unsigned int i;
+ HRESULT hr;
+
+ hr = MFCreateStreamDescriptor(123, 0, NULL, &stream_desc);
+ ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
+
+ for (i = 0; i < ARRAY_SIZE(media_types); ++i)
+ {
+ hr = MFCreateMediaType(&media_types[i]);
+ ok(hr == S_OK, "Failed to create media type, hr %#x.\n", hr);
+ }
+
+ hr = MFCreateStreamDescriptor(123, 0, media_types, &stream_desc);
+ ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
+
+ hr = MFCreateStreamDescriptor(123, ARRAY_SIZE(media_types), media_types, &stream_desc);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFStreamDescriptor_GetStreamIdentifier(stream_desc, &id);
+ ok(hr == S_OK, "Failed to get descriptor id, hr %#x.\n", hr);
+ ok(id == 123, "Unexpected id %#x.\n", id);
+
+ hr = IMFStreamDescriptor_GetMediaTypeHandler(stream_desc, &type_handler);
+ ok(hr == S_OK, "Failed to get type handler, hr %#x.\n", hr);
+
+ hr = IMFMediaTypeHandler_GetMediaTypeCount(type_handler, &count);
+ ok(hr == S_OK, "Failed to get type count, hr %#x.\n", hr);
+ ok(count == ARRAY_SIZE(media_types), "Unexpected type count.\n");
+
+ hr = IMFMediaTypeHandler_GetCurrentMediaType(type_handler, &media_type);
+ ok(hr == MF_E_NOT_INITIALIZED, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFMediaTypeHandler_GetMajorType(type_handler, &major_type);
+todo_wine
+ ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#x.\n", hr);
+
+ for (i = 0; i < ARRAY_SIZE(media_types); ++i)
+ {
+ hr = IMFMediaTypeHandler_GetMediaTypeByIndex(type_handler, i, &media_type);
+ ok(hr == S_OK, "Failed to get media type, hr %#x.\n", hr);
+ ok(media_type == media_types[i], "Unexpected object.\n");
+
+ if (SUCCEEDED(hr))
+ IMFMediaType_Release(media_type);
+ }
+
+ hr = IMFMediaTypeHandler_GetMediaTypeByIndex(type_handler, 2, &media_type);
+ ok(hr == MF_E_NO_MORE_TYPES, "Unexpected hr %#x.\n", hr);
+
+ hr = MFCreateMediaType(&media_type);
+ ok(hr == S_OK, "Failed to create media type, hr %#x.\n", hr);
+
+ hr = IMFMediaTypeHandler_SetCurrentMediaType(type_handler, media_type);
+ ok(hr == S_OK, "Failed to set current type, hr %#x.\n", hr);
+
+ hr = IMFMediaTypeHandler_GetMediaTypeCount(type_handler, &count);
+ ok(hr == S_OK, "Failed to get type count, hr %#x.\n", hr);
+ ok(count == ARRAY_SIZE(media_types), "Unexpected type count.\n");
+
+ IMFMediaType_Release(media_type);
+
+ IMFMediaTypeHandler_Release(type_handler);
+
+ IMFStreamDescriptor_Release(stream_desc);
+}
+
START_TEST(mfplat)
{
CoInitialize(NULL);
@@ -2375,6 +2448,7 @@ START_TEST(mfplat)
test_presentation_descriptor();
test_system_time_source();
test_MFInvokeCallback();
+ test_stream_descriptor();
CoUninitialize();
}
--
2.20.1