Vincent Povirk : windowscodecs: Add test for IWICComponentInfo.

Alexandre Julliard julliard at winehq.org
Thu Jun 14 15:31:31 CDT 2012


Module: wine
Branch: master
Commit: f557fa692bc64e6044395876eff0386ef213c6c9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f557fa692bc64e6044395876eff0386ef213c6c9

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Sat Mar 24 13:17:33 2012 -0500

windowscodecs: Add test for IWICComponentInfo.

---

 dlls/windowscodecs/tests/info.c |  147 ++++++++++++++++++++++++++++++++++++---
 1 files changed, 138 insertions(+), 9 deletions(-)

diff --git a/dlls/windowscodecs/tests/info.c b/dlls/windowscodecs/tests/info.c
index cd89a40..3d7ecc8 100644
--- a/dlls/windowscodecs/tests/info.c
+++ b/dlls/windowscodecs/tests/info.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>
 
@@ -27,9 +28,43 @@
 #include "wincodecsdk.h"
 #include "wine/test.h"
 
-static void test_decoder_info(void)
+#include "initguid.h"
+DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
+
+static const char *debugstr_guid(GUID *guid)
+{
+    static char buf[50];
+
+    if(!guid)
+        return "(null)";
+
+    sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
+            guid->Data1, guid->Data2, guid->Data3, guid->Data4[0],
+            guid->Data4[1], guid->Data4[2], guid->Data4[3], guid->Data4[4],
+            guid->Data4[5], guid->Data4[6], guid->Data4[7]);
+
+    return buf;
+}
+
+static HRESULT get_component_info(const GUID *clsid, IWICComponentInfo **result)
 {
     IWICImagingFactory *factory;
+    HRESULT hr;
+
+    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;
+
+    hr = IWICImagingFactory_CreateComponentInfo(factory, clsid, result);
+
+    IWICImagingFactory_Release(factory);
+
+    return hr;
+}
+
+static void test_decoder_info(void)
+{
     IWICComponentInfo *info;
     IWICBitmapDecoderInfo *decoder_info;
     HRESULT hr;
@@ -38,13 +73,7 @@ static void test_decoder_info(void)
     const WCHAR expected_mimetype[] = {'i','m','a','g','e','/','b','m','p',0};
     CLSID clsid;
 
-    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_WICBmpDecoder, &info);
-    ok(hr == S_OK, "CreateComponentInfo failed, hr=%x\n", hr);
+    hr = get_component_info(&CLSID_WICBmpDecoder, &info);
 
     hr = IWICComponentInfo_QueryInterface(info, &IID_IWICBitmapDecoderInfo, (void**)&decoder_info);
     ok(hr == S_OK, "QueryInterface failed, hr=%x\n", hr);
@@ -88,8 +117,107 @@ static void test_decoder_info(void)
     IWICBitmapDecoderInfo_Release(decoder_info);
 
     IWICComponentInfo_Release(info);
+}
 
-    IWICImagingFactory_Release(factory);
+static void test_pixelformat_info(void)
+{
+    IWICComponentInfo *info;
+    HRESULT hr;
+    ULONG len, known_len;
+    WCHAR value[256];
+    GUID guid;
+    WICComponentType componenttype;
+    DWORD signing;
+
+    hr = get_component_info(&GUID_WICPixelFormat32bppBGRA, &info);
+    todo_wine ok(hr == S_OK, "CreateComponentInfo failed, hr=%x\n", hr);
+
+    if (FAILED(hr))
+        return;
+
+    hr = IWICComponentInfo_GetAuthor(info, 0, NULL, 0);
+    ok(hr == E_INVALIDARG, "GetAuthor failed, hr=%x\n", hr);
+
+    len = 0xdeadbeef;
+    hr = IWICComponentInfo_GetAuthor(info, 0, NULL, &len);
+    ok(hr == S_OK, "GetAuthor failed, hr=%x\n", hr);
+    ok(len < 255 && len > 0, "invalid length 0x%x\n", len);
+    known_len = len;
+
+    memset(value, 0xaa, 256 * sizeof(WCHAR));
+    hr = IWICComponentInfo_GetAuthor(info, len-1, value, NULL);
+    ok(hr == E_INVALIDARG, "GetAuthor failed, hr=%x\n", hr);
+    ok(value[0] = 0xaaaa, "string modified\n");
+
+    len = 0xdeadbeef;
+    memset(value, 0xaa, 256 * sizeof(WCHAR));
+    hr = IWICComponentInfo_GetAuthor(info, known_len-1, value, &len);
+    ok(hr == WINCODEC_ERR_INSUFFICIENTBUFFER, "GetAuthor failed, hr=%x\n", hr);
+    ok(len == known_len, "got length of 0x%x, expected 0x%x\n", len, known_len);
+    ok(value[known_len-1] == 0xaaaa, "string modified past given length\n");
+    ok(value[0] == 0xaaaa, "string modified\n");
+
+    len = 0xdeadbeef;
+    memset(value, 0xaa, 256 * sizeof(WCHAR));
+    hr = IWICComponentInfo_GetAuthor(info, known_len, value, &len);
+    ok(hr == S_OK, "GetAuthor failed, hr=%x\n", hr);
+    ok(len == known_len, "got length of 0x%x, expected 0x%x\n", len, known_len);
+    ok(value[known_len-1] == 0, "string not terminated at expected length\n");
+    ok(value[known_len-2] != 0xaaaa, "string not modified at given length\n");
+
+    len = 0xdeadbeef;
+    memset(value, 0xaa, 256 * sizeof(WCHAR));
+    hr = IWICComponentInfo_GetAuthor(info, known_len+1, value, &len);
+    ok(hr == S_OK, "GetAuthor failed, hr=%x\n", hr);
+    ok(len == known_len, "got length of 0x%x, expected 0x%x\n", len, known_len);
+    ok(value[known_len] == 0xaaaa, "string modified past end\n");
+    ok(value[known_len-1] == 0, "string not terminated at expected length\n");
+    ok(value[known_len-2] != 0xaaaa, "string not modified at given length\n");
+
+    hr = IWICComponentInfo_GetCLSID(info, NULL);
+    ok(hr == E_INVALIDARG, "GetCLSID failed, hr=%x\n", hr);
+
+    memset(&guid, 0xaa, sizeof(guid));
+    hr = IWICComponentInfo_GetCLSID(info, &guid);
+    ok(hr == S_OK, "GetCLSID failed, hr=%x\n", hr);
+    ok(IsEqualGUID(&guid, &GUID_WICPixelFormat32bppBGRA), "unexpected CLSID %s\n", debugstr_guid(&guid));
+
+    hr = IWICComponentInfo_GetComponentType(info, NULL);
+    ok(hr == E_INVALIDARG, "GetComponentType failed, hr=%x\n", hr);
+
+    hr = IWICComponentInfo_GetComponentType(info, &componenttype);
+    ok(hr == S_OK, "GetComponentType failed, hr=%x\n", hr);
+    ok(componenttype == WICPixelFormat, "unexpected component type 0x%x\n", componenttype);
+
+    len = 0xdeadbeef;
+    hr = IWICComponentInfo_GetFriendlyName(info, 0, NULL, &len);
+    ok(hr == S_OK, "GetFriendlyName failed, hr=%x\n", hr);
+    ok(len < 255 && len > 0, "invalid length 0x%x\n", len);
+
+    hr = IWICComponentInfo_GetSigningStatus(info, NULL);
+    ok(hr == E_INVALIDARG, "GetSigningStatus failed, hr=%x\n", hr);
+
+    hr = IWICComponentInfo_GetSigningStatus(info, &signing);
+    ok(hr == S_OK, "GetSigningStatus failed, hr=%x\n", hr);
+    ok(signing == WICComponentSigned, "unexpected signing status 0x%x\n", signing);
+
+    len = 0xdeadbeef;
+    hr = IWICComponentInfo_GetSpecVersion(info, 0, NULL, &len);
+    ok(hr == S_OK, "GetSpecVersion failed, hr=%x\n", hr);
+    ok(len == 0, "invalid length 0x%x\n", len); /* spec version does not apply to pixel formats */
+
+    memset(&guid, 0xaa, sizeof(guid));
+    hr = IWICComponentInfo_GetVendorGUID(info, &guid);
+    ok(hr == S_OK, "GetVendorGUID failed, hr=%x\n", hr);
+    ok(IsEqualGUID(&guid, &GUID_VendorMicrosoft) ||
+       broken(IsEqualGUID(&guid, &GUID_NULL)) /* XP */, "unexpected GUID %s\n", debugstr_guid(&guid));
+
+    len = 0xdeadbeef;
+    hr = IWICComponentInfo_GetVersion(info, 0, NULL, &len);
+    ok(hr == S_OK, "GetVersion failed, hr=%x\n", hr);
+    ok(len == 0, "invalid length 0x%x\n", len); /* version does not apply to pixel formats */
+
+    IWICComponentInfo_Release(info);
 }
 
 static void test_reader_info(void)
@@ -239,6 +367,7 @@ START_TEST(info)
 
     test_decoder_info();
     test_reader_info();
+    test_pixelformat_info();
 
     CoUninitialize();
 }




More information about the wine-cvs mailing list