Module: wine Branch: master Commit: 318c4e6788b474dfd4b30004b859d3843be24807 URL: http://source.winehq.org/git/wine.git/?a=commit;h=318c4e6788b474dfd4b30004b8...
Author: Vincent Povirk vincent@codeweavers.com Date: Tue Nov 15 15:53:28 2011 -0600
windowscodecs: Add test for CreateMetadataReaderFromContainer.
---
dlls/windowscodecs/tests/metadata.c | 93 +++++++++++++++++++++++++++++++++-- 1 files changed, 89 insertions(+), 4 deletions(-)
diff --git a/dlls/windowscodecs/tests/metadata.c b/dlls/windowscodecs/tests/metadata.c index d9008a4..715c9e7 100644 --- a/dlls/windowscodecs/tests/metadata.c +++ b/dlls/windowscodecs/tests/metadata.c @@ -16,6 +16,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
+#include <stdio.h> #include <stdarg.h> #include <math.h>
@@ -47,17 +48,31 @@ static const char metadata_tEXt[] = { 0x3f,0x64,0x19,0xf3 /* chunk CRC */ };
-static void load_stream(IUnknown *reader, const char *data, int data_size) +static const char *debugstr_guid(REFIID riid) +{ + static char buf[50]; + + if(!riid) + return "(null)"; + + sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", + riid->Data1, riid->Data2, riid->Data3, riid->Data4[0], + riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4], + riid->Data4[5], riid->Data4[6], riid->Data4[7]); + + return buf; +} + +static IStream *create_stream(const char *data, int data_size) { HRESULT hr; - IWICPersistStream *persist; IStream *stream; HGLOBAL hdata; void *locked_data;
hdata = GlobalAlloc(GMEM_MOVEABLE, data_size); ok(hdata != 0, "GlobalAlloc failed\n"); - if (!hdata) return; + if (!hdata) return NULL;
locked_data = GlobalLock(hdata); memcpy(locked_data, data, data_size); @@ -65,7 +80,19 @@ static void load_stream(IUnknown *reader, const char *data, int data_size)
hr = CreateStreamOnHGlobal(hdata, TRUE, &stream); ok(hr == S_OK, "CreateStreamOnHGlobal failed, hr=%x\n", hr); - if (FAILED(hr)) return; + + return stream; +} + +static void load_stream(IUnknown *reader, const char *data, int data_size) +{ + HRESULT hr; + IWICPersistStream *persist; + IStream *stream; + + stream = create_stream(data, data_size); + if (!stream) + return;
hr = IUnknown_QueryInterface(reader, &IID_IWICPersistStream, (void**)&persist); ok(hr == S_OK, "QueryInterface failed, hr=%x\n", hr); @@ -181,12 +208,70 @@ static void test_metadata_tEXt(void) IWICMetadataReader_Release(reader); }
+static void test_create_reader(void) +{ + HRESULT hr; + IWICComponentFactory *factory; + IStream *stream; + IWICMetadataReader *reader; + UINT count=0; + GUID format; + + hr = CoCreateInstance(&CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, + &IID_IWICComponentFactory, (void**)&factory); + todo_wine ok(hr == S_OK, "CoCreateInstance failed, hr=%x\n", hr); + if (FAILED(hr)) return; + + stream = create_stream(metadata_tEXt, sizeof(metadata_tEXt)); + + hr = IWICComponentFactory_CreateMetadataReaderFromContainer(factory, + &GUID_ContainerFormatPng, NULL, WICPersistOptionsDefault, + stream, &reader); + ok(hr == S_OK, "CreateMetadataReaderFromContainer failed, hr=%x\n", hr); + + if (SUCCEEDED(hr)) + { + hr = IWICMetadataReader_GetCount(reader, &count); + ok(hr == S_OK, "GetCount failed, hr=%x\n", hr); + ok(count == 1, "unexpected count %i\n", count); + + hr = IWICMetadataReader_GetMetadataFormat(reader, &format); + ok(hr == S_OK, "GetMetadataFormat failed, hr=%x\n", hr); + ok(IsEqualGUID(&format, &GUID_MetadataFormatChunktEXt), "unexpected format %s\n", debugstr_guid(&format)); + + IWICMetadataReader_Release(reader); + } + + hr = IWICComponentFactory_CreateMetadataReaderFromContainer(factory, + &GUID_ContainerFormatWmp, NULL, WICPersistOptionsDefault, + stream, &reader); + ok(hr == S_OK, "CreateMetadataReaderFromContainer failed, hr=%x\n", hr); + + if (SUCCEEDED(hr)) + { + hr = IWICMetadataReader_GetCount(reader, &count); + ok(hr == S_OK, "GetCount failed, hr=%x\n", hr); + ok(count == 1, "unexpected count %i\n", count); + + hr = IWICMetadataReader_GetMetadataFormat(reader, &format); + ok(hr == S_OK, "GetMetadataFormat failed, hr=%x\n", hr); + ok(IsEqualGUID(&format, &GUID_MetadataFormatUnknown), "unexpected format %s\n", debugstr_guid(&format)); + + IWICMetadataReader_Release(reader); + } + + IStream_Release(stream); + + IWICComponentFactory_Release(factory); +} + START_TEST(metadata) { CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
test_metadata_unknown(); test_metadata_tEXt(); + test_create_reader();
CoUninitialize(); }