[PATCH 3/6] windowscodecs/tests: Add test for metadata writer.
Paul Gofman
pgofman at codeweavers.com
Wed Jan 27 11:33:48 CST 2021
Signed-off-by: Paul Gofman <pgofman at codeweavers.com>
---
dlls/windowscodecs/tests/metadata.c | 87 +++++++++++++++++++++++++++++
1 file changed, 87 insertions(+)
diff --git a/dlls/windowscodecs/tests/metadata.c b/dlls/windowscodecs/tests/metadata.c
index a955702c82c..cc627fc195f 100644
--- a/dlls/windowscodecs/tests/metadata.c
+++ b/dlls/windowscodecs/tests/metadata.c
@@ -3049,6 +3049,92 @@ static void test_queryreader(void)
IWICComponentFactory_Release(factory);
}
+static void test_metadata_writer(void)
+{
+ static struct
+ {
+ REFCLSID rclsid;
+ BOOL wine_supports_encoder;
+ BOOL metadata_supported;
+ BOOL succeeds_unitialized;
+ }
+ tests[] =
+ {
+ {&CLSID_WICBmpEncoder, TRUE, FALSE},
+ {&CLSID_WICPngEncoder, TRUE, TRUE},
+ {&CLSID_WICJpegEncoder, TRUE, TRUE},
+ {&CLSID_WICGifEncoder, TRUE, TRUE},
+ {&CLSID_WICTiffEncoder, TRUE, TRUE},
+ {&CLSID_WICWmpEncoder, FALSE, TRUE, TRUE},
+ };
+
+ IWICMetadataQueryWriter *querywriter, *querywriter2;
+ IWICMetadataBlockWriter *blockwriter;
+ IWICBitmapFrameEncode *frameencode;
+ IWICComponentFactory *factory;
+ IWICBitmapEncoder *encoder;
+ IStream *stream;
+ unsigned int i;
+ HRESULT hr;
+
+ for (i = 0; i < ARRAY_SIZE(tests); ++i)
+ {
+ hr = CoCreateInstance(tests[i].rclsid, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IWICBitmapEncoder, (void **)&encoder);
+ todo_wine_if(!tests[i].wine_supports_encoder) ok(hr == S_OK, "Got unexpected hr %#x, i %u.\n", hr, i);
+ if (FAILED(hr))
+ continue;
+
+ blockwriter = NULL;
+ querywriter = querywriter2 = NULL;
+
+ hr = CreateStreamOnHGlobal(NULL, TRUE, &stream);
+ ok(hr == S_OK, "Got unexpected hr %#x, i %u.\n", hr, i);
+ hr = IWICBitmapEncoder_Initialize(encoder, stream, WICBitmapEncoderNoCache);
+ ok(hr == S_OK, "Got unexpected hr %#x, i %u.\n", hr, i);
+ hr = IWICBitmapEncoder_CreateNewFrame(encoder, &frameencode, NULL);
+ ok(hr == S_OK, "Got unexpected hr %#x, i %u.\n", hr, i);
+
+ hr = IWICBitmapFrameEncode_QueryInterface(frameencode, &IID_IWICMetadataBlockWriter, (void**)&blockwriter);
+ ok(hr == (tests[i].metadata_supported ? S_OK : E_NOINTERFACE), "Got unexpected hr %#x, i %u.\n", hr, i);
+
+ hr = CoCreateInstance(&CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IWICComponentFactory, (void**)&factory);
+ ok(hr == S_OK, "Got unexpected hr %#x, i %u.\n", hr, i);
+
+ hr = IWICComponentFactory_CreateQueryWriterFromBlockWriter(factory, blockwriter, &querywriter);
+ todo_wine ok(hr == (tests[i].metadata_supported ? S_OK : E_INVALIDARG), "Got unexpected hr %#x, i %u.\n", hr, i);
+
+ hr = IWICBitmapFrameEncode_GetMetadataQueryWriter(frameencode, &querywriter2);
+ todo_wine
+ ok(hr == (tests[i].succeeds_unitialized ? S_OK : WINCODEC_ERR_NOTINITIALIZED),
+ "Got unexpected hr %#x, i %u.\n", hr, i);
+ if (hr == S_OK)
+ IWICMetadataQueryWriter_Release(querywriter2);
+
+ hr = IWICBitmapFrameEncode_Initialize(frameencode, NULL);
+ ok(hr == S_OK, "Got unexpected hr %#x, i %u.\n", hr, i);
+
+ hr = IWICBitmapFrameEncode_GetMetadataQueryWriter(frameencode, &querywriter2);
+ todo_wine ok(hr == (tests[i].metadata_supported ? S_OK : WINCODEC_ERR_UNSUPPORTEDOPERATION),
+ "Got unexpected hr %#x, i %u.\n", hr, i);
+
+ if (tests[i].metadata_supported)
+ todo_wine ok(querywriter2 != querywriter, "Got unexpected interfaces %p, %p, i %u.\n", querywriter, querywriter2, i);
+
+ IWICComponentFactory_Release(factory);
+ if (querywriter)
+ {
+ IWICMetadataQueryWriter_Release(querywriter);
+ IWICMetadataQueryWriter_Release(querywriter2);
+ IWICMetadataBlockWriter_Release(blockwriter);
+ }
+ IWICBitmapFrameEncode_Release(frameencode);
+ IStream_Release(stream);
+ IWICBitmapEncoder_Release(encoder);
+ }
+}
+
START_TEST(metadata)
{
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
@@ -3071,6 +3157,7 @@ START_TEST(metadata)
test_metadata_GCE();
test_metadata_APE();
test_metadata_GIF_comment();
+ test_metadata_writer();
CoUninitialize();
}
--
2.29.2
More information about the wine-devel
mailing list