Module: wine Branch: master Commit: 46991dc9fb74229011d3b427d1e4f13d39752752 URL: http://source.winehq.org/git/wine.git/?a=commit;h=46991dc9fb74229011d3b427d1...
Author: Vincent Povirk vincent@codeweavers.com Date: Thu May 31 12:38:34 2012 -0500
windowscodecs: Add test for IWICMetadataReaderInfo.
---
dlls/windowscodecs/tests/info.c | 143 +++++++++++++++++++++++++++++++++++++++ include/wincodecsdk.idl | 3 + 2 files changed, 146 insertions(+), 0 deletions(-)
diff --git a/dlls/windowscodecs/tests/info.c b/dlls/windowscodecs/tests/info.c index de2dd32..cd89a40 100644 --- a/dlls/windowscodecs/tests/info.c +++ b/dlls/windowscodecs/tests/info.c @@ -24,6 +24,7 @@ #include "windef.h" #include "objbase.h" #include "wincodec.h" +#include "wincodecsdk.h" #include "wine/test.h"
static void test_decoder_info(void) @@ -91,11 +92,153 @@ static void test_decoder_info(void) IWICImagingFactory_Release(factory); }
+static void test_reader_info(void) +{ + IWICImagingFactory *factory; + IWICComponentInfo *info; + IWICMetadataReaderInfo *reader_info; + HRESULT hr; + CLSID clsid; + GUID container_formats[10]; + UINT count, size; + WICMetadataPattern *patterns; + + hr = CoCreateInstance(&CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, + &IID_IWICImagingFactory, (void**)&factory); + ok(hr == S_OK, "CoCreateInstance failed, hr=%x\n", hr); + if (FAILED(hr)) return; + + hr = IWICImagingFactory_CreateComponentInfo(factory, &CLSID_WICUnknownMetadataReader, &info); + todo_wine ok(hr == S_OK, "CreateComponentInfo failed, hr=%x\n", hr); + + if (FAILED(hr)) + { + IWICImagingFactory_Release(factory); + return; + } + + hr = IWICComponentInfo_QueryInterface(info, &IID_IWICMetadataReaderInfo, (void**)&reader_info); + ok(hr == S_OK, "QueryInterface failed, hr=%x\n", hr); + + hr = IWICMetadataReaderInfo_GetCLSID(reader_info, NULL); + ok(hr == E_INVALIDARG, "GetCLSID failed, hr=%x\n", hr); + + hr = IWICMetadataReaderInfo_GetCLSID(reader_info, &clsid); + ok(hr == S_OK, "GetCLSID failed, hr=%x\n", hr); + ok(IsEqualGUID(&CLSID_WICUnknownMetadataReader, &clsid), "GetCLSID returned wrong result\n"); + + hr = IWICMetadataReaderInfo_GetMetadataFormat(reader_info, &clsid); + ok(hr == S_OK, "GetMetadataFormat failed, hr=%x\n", hr); + ok(IsEqualGUID(&GUID_MetadataFormatUnknown, &clsid), "GetMetadataFormat returned wrong result\n"); + + hr = IWICMetadataReaderInfo_GetContainerFormats(reader_info, 0, NULL, NULL); + ok(hr == E_INVALIDARG, "GetContainerFormats failed, hr=%x\n", hr); + + count = 0xdeadbeef; + hr = IWICMetadataReaderInfo_GetContainerFormats(reader_info, 0, NULL, &count); + ok(hr == S_OK, "GetContainerFormats failed, hr=%x\n", hr); + ok(count == 0, "unexpected count %d\n", count); + + hr = IWICMetadataReaderInfo_GetPatterns(reader_info, &GUID_ContainerFormatPng, + 0, NULL, NULL, NULL); + ok(hr == E_INVALIDARG, "GetPatterns failed, hr=%x\n", hr); + + count = size = 0xdeadbeef; + hr = IWICMetadataReaderInfo_GetPatterns(reader_info, &GUID_ContainerFormatPng, + 0, NULL, &count, &size); + ok(hr == WINCODEC_ERR_COMPONENTNOTFOUND || broken(hr == S_OK) /* Windows XP */, + "GetPatterns failed, hr=%x\n", hr); + ok(count == 0xdeadbeef, "unexpected count %d\n", count); + ok(size == 0xdeadbeef, "unexpected size %d\n", size); + + IWICMetadataReaderInfo_Release(reader_info); + + IWICComponentInfo_Release(info); + + hr = IWICImagingFactory_CreateComponentInfo(factory, &CLSID_WICXMBStructMetadataReader, &info); + ok(hr == S_OK, "CreateComponentInfo failed, hr=%x\n", hr); + + hr = IWICComponentInfo_QueryInterface(info, &IID_IWICMetadataReaderInfo, (void**)&reader_info); + ok(hr == S_OK, "QueryInterface failed, hr=%x\n", hr); + + hr = IWICMetadataReaderInfo_GetCLSID(reader_info, NULL); + ok(hr == E_INVALIDARG, "GetCLSID failed, hr=%x\n", hr); + + hr = IWICMetadataReaderInfo_GetCLSID(reader_info, &clsid); + ok(hr == S_OK, "GetCLSID failed, hr=%x\n", hr); + ok(IsEqualGUID(&CLSID_WICXMBStructMetadataReader, &clsid), "GetCLSID returned wrong result\n"); + + hr = IWICMetadataReaderInfo_GetMetadataFormat(reader_info, &clsid); + ok(hr == S_OK, "GetMetadataFormat failed, hr=%x\n", hr); + ok(IsEqualGUID(&GUID_MetadataFormatXMPStruct, &clsid), "GetMetadataFormat returned wrong result\n"); + + hr = IWICMetadataReaderInfo_GetContainerFormats(reader_info, 0, NULL, NULL); + ok(hr == E_INVALIDARG, "GetContainerFormats failed, hr=%x\n", hr); + + count = 0xdeadbeef; + hr = IWICMetadataReaderInfo_GetContainerFormats(reader_info, 0, NULL, &count); + ok(hr == S_OK, "GetContainerFormats failed, hr=%x\n", hr); + ok(count >= 2, "unexpected count %d\n", count); + + count = 0xdeadbeef; + hr = IWICMetadataReaderInfo_GetContainerFormats(reader_info, 1, container_formats, &count); + ok(hr == S_OK, "GetContainerFormats failed, hr=%x\n", hr); + ok(count == 1, "unexpected count %d\n", count); + + count = 0xdeadbeef; + hr = IWICMetadataReaderInfo_GetContainerFormats(reader_info, 10, container_formats, &count); + ok(hr == S_OK, "GetContainerFormats failed, hr=%x\n", hr); + ok(count == min(count, 10), "unexpected count %d\n", count); + + count = size = 0xdeadbeef; + hr = IWICMetadataReaderInfo_GetPatterns(reader_info, &GUID_ContainerFormatPng, + 0, NULL, &count, &size); + ok(hr == WINCODEC_ERR_COMPONENTNOTFOUND || broken(hr == S_OK) /* Windows XP */, + "GetPatterns failed, hr=%x\n", hr); + ok(count == 0xdeadbeef, "unexpected count %d\n", count); + ok(size == 0xdeadbeef, "unexpected size %d\n", size); + + count = size = 0xdeadbeef; + hr = IWICMetadataReaderInfo_GetPatterns(reader_info, &GUID_MetadataFormatXMP, + 0, NULL, &count, &size); + ok(hr == S_OK, "GetPatterns failed, hr=%x\n", hr); + ok(count == 1, "unexpected count %d\n", count); + ok(size > sizeof(WICMetadataPattern), "unexpected size %d\n", size); + + if (hr == S_OK) + { + patterns = HeapAlloc(GetProcessHeap(), 0, size); + + count = size = 0xdeadbeef; + hr = IWICMetadataReaderInfo_GetPatterns(reader_info, &GUID_MetadataFormatXMP, + size-1, patterns, &count, &size); + ok(hr == S_OK, "GetPatterns failed, hr=%x\n", hr); + ok(count == 1, "unexpected count %d\n", count); + ok(size > sizeof(WICMetadataPattern), "unexpected size %d\n", size); + + count = size = 0xdeadbeef; + hr = IWICMetadataReaderInfo_GetPatterns(reader_info, &GUID_MetadataFormatXMP, + size, patterns, &count, &size); + ok(hr == S_OK, "GetPatterns failed, hr=%x\n", hr); + ok(count == 1, "unexpected count %d\n", count); + ok(size == sizeof(WICMetadataPattern) + patterns->Length * 2, "unexpected size %d\n", size); + + HeapFree(GetProcessHeap(), 0, patterns); + } + + IWICMetadataReaderInfo_Release(reader_info); + + IWICComponentInfo_Release(info); + + IWICImagingFactory_Release(factory); +} + START_TEST(info) { CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
test_decoder_info(); + test_reader_info();
CoUninitialize(); } diff --git a/include/wincodecsdk.idl b/include/wincodecsdk.idl index e39b99b..0a8a531 100644 --- a/include/wincodecsdk.idl +++ b/include/wincodecsdk.idl @@ -40,6 +40,8 @@ cpp_quote("DEFINE_GUID(GUID_MetadataFormatChunktEXt, 0x568d8936,0xc0a9,0x4923,0x cpp_quote("DEFINE_GUID(GUID_MetadataFormatChunktIME, 0x6b00ae2d,0xe24b,0x460a,0x98,0xb6,0x87,0x8b,0xd0,0x30,0x72,0xfd);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatIfd, 0x537396c6,0x2d8a,0x4bb6,0x9b,0xf8,0x2f,0x0a,0x8e,0x2a,0x3a,0xdf);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatExif, 0x1c3c4f9d,0xb84a,0x467d,0x94,0x93,0x36,0xcf,0xbd,0x59,0xea,0x57);") +cpp_quote("DEFINE_GUID(GUID_MetadataFormatXMP, 0xbb5acc38,0xf216,0x4cec,0xa6,0xc5,0x5f,0x6e,0x73,0x97,0x63,0xa9);") +cpp_quote("DEFINE_GUID(GUID_MetadataFormatXMPStruct, 0x22383cf1,0xed17,0x4e2e,0xaf,0x17,0xd8,0x5b,0x8f,0x6b,0x30,0xd0);")
cpp_quote("DEFINE_GUID(CLSID_WICUnknownMetadataReader, 0x699745c2,0x5066,0x4b82,0xa8,0xe3,0xd4,0x04,0x78,0xdb,0xec,0x8c);") cpp_quote("DEFINE_GUID(CLSID_WICUnknownMetadataWriter, 0xa09cca86,0x27ba,0x4f39,0x90,0x53,0x12,0x1f,0xa4,0xdc,0x08,0xfc);") @@ -47,6 +49,7 @@ cpp_quote("DEFINE_GUID(CLSID_WICPngTextMetadataReader, 0x4b59afcc,0xb8c3,0x408a, cpp_quote("DEFINE_GUID(CLSID_WICPngTextMetadataWriter, 0xb5ebafb9,0x253e,0x4a72,0xa7,0x44,0x07,0x62,0xd2,0x68,0x56,0x83);") cpp_quote("DEFINE_GUID(CLSID_WICIfdMetadataReader, 0x8f914656,0x9d0a,0x4eb2,0x90,0x19,0x0b,0xf9,0x6d,0x8a,0x9e,0xe6);") cpp_quote("DEFINE_GUID(CLSID_WICExifMetadataReader, 0xd9403860,0x297f,0x4a49,0xbf,0x9b,0x77,0x89,0x81,0x50,0xa4,0x42);") +cpp_quote("DEFINE_GUID(CLSID_WICXMBStructMetadataReader, 0x01b90d9a,0x8209,0x47f7,0x9c,0x52,0xe1,0x24,0x4b,0xf5,0x0c,0xed);")
typedef struct WICMetadataPattern { ULARGE_INTEGER Position;