[4/5] windowscodecs: Add test for IWICMetadataReaderInfo.

Vincent Povirk madewokherd at gmail.com
Thu Jun 7 10:38:07 CDT 2012


-------------- next part --------------
From 1193e642bbc6a1d87b29b0647a3fccdf32847524 Mon Sep 17 00:00:00 2001
From: Vincent Povirk <vincent at codeweavers.com>
Date: Thu, 31 May 2012 12:38:34 -0500
Subject: [PATCH 4/5] windowscodecs: Add test for IWICMetadataReaderInfo.

---
 dlls/windowscodecs/tests/info.c |  144 +++++++++++++++++++++++++++++++++++++++
 include/wincodecsdk.idl         |    3 +
 2 files changed, 147 insertions(+)

diff --git a/dlls/windowscodecs/tests/info.c b/dlls/windowscodecs/tests/info.c
index de2dd32..a2a025c 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,154 @@ 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, format_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);
+    format_count = 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;
-- 
1.7.9.5


More information about the wine-patches mailing list