From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/windowscodecs/tests/metadata.c | 110 +++++++++++++++++++++++++++- 1 file changed, 109 insertions(+), 1 deletion(-)
diff --git a/dlls/windowscodecs/tests/metadata.c b/dlls/windowscodecs/tests/metadata.c index 3fe68cbf8cd..ca52211eb78 100644 --- a/dlls/windowscodecs/tests/metadata.c +++ b/dlls/windowscodecs/tests/metadata.c @@ -1307,7 +1307,7 @@ static void test_metadata_Exif(void) IWICMetadataWriter_Release(writer); }
-static void test_create_reader(void) +static void test_create_reader_from_container(void) { HRESULT hr; IWICComponentFactory *factory; @@ -1379,6 +1379,113 @@ static void test_create_reader(void) IWICMetadataReader_Release(reader); }
+ hr = IWICComponentFactory_CreateMetadataReaderFromContainer(factory, &GUID_ContainerFormatWmp, + NULL, WICMetadataCreationFailUnknown, stream, &reader); + ok(hr == WINCODEC_ERR_COMPONENTNOTFOUND, "Unexpected hr %#lx.\n", hr); + + IStream_Release(stream); + + IWICComponentFactory_Release(factory); +} + +static void test_create_reader(void) +{ + IWICComponentFactory *factory; + IWICMetadataReader *reader; + LARGE_INTEGER pos; + IStream *stream; + UINT count = 0; + GUID format; + HRESULT hr; + + hr = CoCreateInstance(&CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, + &IID_IWICComponentFactory, (void **)&factory); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + stream = create_stream(metadata_tEXt, sizeof(metadata_tEXt)); + + hr = IWICComponentFactory_CreateMetadataReader(factory, NULL, NULL, 0, stream, &reader); + todo_wine + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + + memset(&format, 0xcc, sizeof(format)); + hr = IWICComponentFactory_CreateMetadataReader(factory, &format, NULL, 0, stream, &reader); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); +if (SUCCEEDED(hr)) +{ + hr = IWICMetadataReader_GetMetadataFormat(reader, &format); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(IsEqualGUID(&format, &GUID_MetadataFormatUnknown), "Unexpected format %s.\n", wine_dbgstr_guid(&format)); + IWICMetadataReader_Release(reader); +} + + memset(&format, 0xcc, sizeof(format)); + hr = IWICComponentFactory_CreateMetadataReader(factory, &format, NULL, WICMetadataCreationFailUnknown, stream, &reader); + todo_wine + ok(hr == WINCODEC_ERR_COMPONENTNOTFOUND, "Unexpected hr %#lx.\n", hr); + + hr = IWICComponentFactory_CreateMetadataReader(factory, &GUID_MetadataFormatChunktEXt, + NULL, 0, NULL, &reader); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); +if (SUCCEEDED(hr)) +{ + hr = IWICMetadataReader_GetMetadataFormat(reader, &format); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(IsEqualGUID(&format, &GUID_MetadataFormatChunktEXt), "Unexpected format %s.\n", wine_dbgstr_guid(&format)); + IWICMetadataReader_Release(reader); +} + + pos.QuadPart = 0; + hr = IStream_Seek(stream, pos, STREAM_SEEK_SET, NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IWICComponentFactory_CreateMetadataReader(factory, &GUID_MetadataFormatChunktEXt, NULL, 0, + stream, NULL); + todo_wine + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + + hr = IStream_Seek(stream, pos, STREAM_SEEK_SET, NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IWICComponentFactory_CreateMetadataReader(factory, &GUID_ContainerFormatPng, NULL, 0, stream, &reader); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); +if (SUCCEEDED(hr)) + IWICMetadataReader_Release(reader); + + hr = IStream_Seek(stream, pos, STREAM_SEEK_SET, NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IWICComponentFactory_CreateMetadataReader(factory, &GUID_MetadataFormatChunktEXt, NULL, 0, stream, &reader); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + +if (SUCCEEDED(hr)) +{ + check_interface(reader, &IID_IWICMetadataReader, TRUE); + check_interface(reader, &IID_IWICMetadataWriter, FALSE); + check_interface(reader, &IID_IPersist, TRUE); + check_interface(reader, &IID_IPersistStream, TRUE); + check_interface(reader, &IID_IWICPersistStream, TRUE); + check_interface(reader, &IID_IWICStreamProvider, TRUE); + + hr = IWICMetadataReader_GetCount(reader, &count); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(count == 1, "Unexpected count %u.\n", count); + + hr = IWICMetadataReader_GetMetadataFormat(reader, &format); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(IsEqualGUID(&format, &GUID_MetadataFormatChunktEXt), "Unexpected format %s.\n", wine_dbgstr_guid(&format)); + + IWICMetadataReader_Release(reader); +} + + /* Mismatching metadata format. */ + hr = IStream_Seek(stream, pos, STREAM_SEEK_SET, NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IWICComponentFactory_CreateMetadataReader(factory, &GUID_MetadataFormatApp1, NULL, 0, stream, &reader); + todo_wine + ok(hr == WINCODEC_ERR_BADMETADATAHEADER, "Unexpected hr %#lx.\n", hr); + IStream_Release(stream);
IWICComponentFactory_Release(factory); @@ -3531,6 +3638,7 @@ START_TEST(metadata) test_metadata_tIME(); test_metadata_IFD(); test_metadata_Exif(); + test_create_reader_from_container(); test_create_reader(); test_metadata_png(); test_metadata_gif();