From: Nikolay Sivov Subject: [PATCH 1/2] wincodecs/tests: Run decoder info tests for all decoders Message-Id: <20180220063844.15858-1-nsivov@codeweavers.com> Date: Tue, 20 Feb 2018 09:38:43 +0300 Signed-off-by: Nikolay Sivov --- dlls/windowscodecs/tests/info.c | 291 ++++++++++++++++++++++++---------------- 1 file changed, 179 insertions(+), 112 deletions(-) diff --git a/dlls/windowscodecs/tests/info.c b/dlls/windowscodecs/tests/info.c index 64ccab52ae..5d0dc44ed5 100644 --- a/dlls/windowscodecs/tests/info.c +++ b/dlls/windowscodecs/tests/info.c @@ -67,126 +67,193 @@ static BOOL is_pixelformat(GUID *format) static void test_decoder_info(void) { + struct decoder_info_test + { + const CLSID *clsid; + const char *mimetype; + const char *extensions; + unsigned int todo; + } decoder_info_tests[] = + { + { + &CLSID_WICBmpDecoder, + "image/bmp", + ".bmp,.dib,.rle" + }, + { + &CLSID_WICGifDecoder, + "image/gif", + ".gif" + }, + { + &CLSID_WICIcoDecoder, + "image/ico,image/x-icon", + ".ico,.icon", + 1 + }, + { + &CLSID_WICJpegDecoder, + "image/jpeg,image/jpe,image/jpg", + ".jpeg,.jpe,.jpg,.jfif,.exif", + 1 + }, + { + &CLSID_WICPngDecoder, + "image/png", + ".png" + }, + { + &CLSID_WICTiffDecoder, + "image/tiff,image/tif", + ".tiff,.tif", + 1 + }, + }; IWICComponentInfo *info; IWICBitmapDecoderInfo *decoder_info; HRESULT hr; ULONG len; WCHAR value[256]; - const WCHAR expected_mimetype[] = {'i','m','a','g','e','/','b','m','p',0}; - const WCHAR expected_extensions[] = {'.','b','m','p',',','.','d','i','b',',','.','r','l','e',0}; CLSID clsid; - GUID pixelformats[20]; + GUID pixelformats[32]; UINT num_formats, count; - int i; - - hr = get_component_info(&CLSID_WICBmpDecoder, &info); - ok(hr == S_OK, "CreateComponentInfo failed, hr=%x\n", hr); - - hr = IWICComponentInfo_QueryInterface(info, &IID_IWICBitmapDecoderInfo, (void**)&decoder_info); - ok(hr == S_OK, "QueryInterface failed, hr=%x\n", hr); - - hr = IWICBitmapDecoderInfo_GetCLSID(decoder_info, NULL); - ok(hr == E_INVALIDARG, "GetCLSID failed, hr=%x\n", hr); - - hr = IWICBitmapDecoderInfo_GetCLSID(decoder_info, &clsid); - ok(hr == S_OK, "GetCLSID failed, hr=%x\n", hr); - ok(IsEqualGUID(&CLSID_WICBmpDecoder, &clsid), "GetCLSID returned wrong result\n"); - - hr = IWICBitmapDecoderInfo_GetMimeTypes(decoder_info, 0, NULL, NULL); - ok(hr == E_INVALIDARG, "GetMimeType failed, hr=%x\n", hr); - - hr = IWICBitmapDecoderInfo_GetMimeTypes(decoder_info, 1, NULL, &len); - ok(hr == E_INVALIDARG, "GetMimeType failed, hr=%x\n", hr); - ok(len == lstrlenW(expected_mimetype)+1, "GetMimeType returned wrong len %i\n", len); - - hr = IWICBitmapDecoderInfo_GetMimeTypes(decoder_info, len, value, NULL); - ok(hr == E_INVALIDARG, "GetMimeType failed, hr=%x\n", hr); - - hr = IWICBitmapDecoderInfo_GetMimeTypes(decoder_info, 0, NULL, &len); - ok(hr == S_OK, "GetMimeType failed, hr=%x\n", hr); - ok(len == lstrlenW(expected_mimetype)+1, "GetMimeType returned wrong len %i\n", len); - - value[0] = 0; - hr = IWICBitmapDecoderInfo_GetMimeTypes(decoder_info, len, value, &len); - ok(hr == S_OK, "GetMimeType failed, hr=%x\n", hr); - ok(lstrcmpW(value, expected_mimetype) == 0, "GetMimeType returned wrong value %s\n", wine_dbgstr_w(value)); - ok(len == lstrlenW(expected_mimetype)+1, "GetMimeType returned wrong len %i\n", len); - - hr = IWICBitmapDecoderInfo_GetMimeTypes(decoder_info, 1, value, &len); - ok(hr == WINCODEC_ERR_INSUFFICIENTBUFFER, "GetMimeType failed, hr=%x\n", hr); - ok(len == lstrlenW(expected_mimetype)+1, "GetMimeType returned wrong len %i\n", len); - - hr = IWICBitmapDecoderInfo_GetMimeTypes(decoder_info, 256, value, &len); - ok(hr == S_OK, "GetMimeType failed, hr=%x\n", hr); - ok(lstrcmpW(value, expected_mimetype) == 0, "GetMimeType returned wrong value %s\n", wine_dbgstr_w(value)); - ok(len == lstrlenW(expected_mimetype)+1, "GetMimeType returned wrong len %i\n", len); - - num_formats = 0xdeadbeef; - hr = IWICBitmapDecoderInfo_GetPixelFormats(decoder_info, 0, NULL, &num_formats); - ok(hr == S_OK, "GetPixelFormats failed, hr=%x\n", hr); - ok(num_formats < 20 && num_formats > 1, "got %d formats\n", num_formats); - - hr = IWICBitmapDecoderInfo_GetPixelFormats(decoder_info, 0, NULL, NULL); - ok(hr == E_INVALIDARG, "GetPixelFormats failed, hr=%x\n", hr); - - count = 0xdeadbeef; - hr = IWICBitmapDecoderInfo_GetPixelFormats(decoder_info, 0, pixelformats, &count); - ok(hr == S_OK, "GetPixelFormats failed, hr=%x\n", hr); - ok(count == 0, "got %d formats\n", count); + int i, j; - count = 0xdeadbeef; - hr = IWICBitmapDecoderInfo_GetPixelFormats(decoder_info, 1, pixelformats, &count); - ok(hr == S_OK, "GetPixelFormats failed, hr=%x\n", hr); - ok(count == 1, "got %d formats\n", count); - ok(is_pixelformat(&pixelformats[0]), "got invalid pixel format\n"); - - count = 0xdeadbeef; - hr = IWICBitmapDecoderInfo_GetPixelFormats(decoder_info, num_formats, pixelformats, &count); - ok(hr == S_OK, "GetPixelFormats failed, hr=%x\n", hr); - ok(count == num_formats, "got %d formats, expected %d\n", count, num_formats); - for (i=0; imimetype, -1, mimetypeW, sizeof(mimetypeW)/sizeof(mimetypeW[0])); + MultiByteToWideChar(CP_ACP, 0, test->extensions, -1, extensionsW, sizeof(extensionsW)/sizeof(extensionsW[0])); + + hr = get_component_info(test->clsid, &info); + ok(hr == S_OK, "CreateComponentInfo failed, hr=%x\n", hr); + + hr = IWICComponentInfo_QueryInterface(info, &IID_IWICBitmapDecoderInfo, (void **)&decoder_info); + ok(hr == S_OK, "QueryInterface failed, hr=%x\n", hr); + + hr = IWICBitmapDecoderInfo_GetCLSID(decoder_info, NULL); + ok(hr == E_INVALIDARG, "GetCLSID failed, hr=%x\n", hr); + + hr = IWICBitmapDecoderInfo_GetCLSID(decoder_info, &clsid); + ok(hr == S_OK, "GetCLSID failed, hr=%x\n", hr); + ok(IsEqualGUID(test->clsid, &clsid), "GetCLSID returned wrong result\n"); + + hr = IWICBitmapDecoderInfo_GetMimeTypes(decoder_info, 0, NULL, NULL); + ok(hr == E_INVALIDARG, "GetMimeType failed, hr=%x\n", hr); + + len = 0; + hr = IWICBitmapDecoderInfo_GetMimeTypes(decoder_info, 1, NULL, &len); + ok(hr == E_INVALIDARG, "GetMimeType failed, hr=%x\n", hr); + todo_wine_if(test->todo) + ok(len == lstrlenW(mimetypeW) + 1, "GetMimeType returned wrong len %i\n", len); + + hr = IWICBitmapDecoderInfo_GetMimeTypes(decoder_info, len, value, NULL); + ok(hr == E_INVALIDARG, "GetMimeType failed, hr=%x\n", hr); + + len = 0; + hr = IWICBitmapDecoderInfo_GetMimeTypes(decoder_info, 0, NULL, &len); + ok(hr == S_OK, "GetMimeType failed, hr=%x\n", hr); + todo_wine_if(test->todo) + ok(len == lstrlenW(mimetypeW) + 1, "GetMimeType returned wrong len %i\n", len); + + value[0] = 0; + hr = IWICBitmapDecoderInfo_GetMimeTypes(decoder_info, len, value, &len); + ok(hr == S_OK, "GetMimeType failed, hr=%x\n", hr); + todo_wine_if(test->todo) { + ok(lstrcmpW(value, mimetypeW) == 0, "GetMimeType returned wrong value %s\n", wine_dbgstr_w(value)); + ok(len == lstrlenW(mimetypeW) + 1, "GetMimeType returned wrong len %i\n", len); + } + hr = IWICBitmapDecoderInfo_GetMimeTypes(decoder_info, 1, value, &len); + ok(hr == WINCODEC_ERR_INSUFFICIENTBUFFER, "GetMimeType failed, hr=%x\n", hr); + todo_wine_if(test->todo) + ok(len == lstrlenW(mimetypeW) + 1, "GetMimeType returned wrong len %i\n", len); + + hr = IWICBitmapDecoderInfo_GetMimeTypes(decoder_info, 256, value, &len); + ok(hr == S_OK, "GetMimeType failed, hr=%x\n", hr); + todo_wine_if(test->todo) { + ok(lstrcmpW(value, mimetypeW) == 0, "GetMimeType returned wrong value %s\n", wine_dbgstr_w(value)); + ok(len == lstrlenW(mimetypeW) + 1, "GetMimeType returned wrong len %i\n", len); + } + num_formats = 0xdeadbeef; + hr = IWICBitmapDecoderInfo_GetPixelFormats(decoder_info, 0, NULL, &num_formats); + ok(hr == S_OK, "GetPixelFormats failed, hr=%x\n", hr); + ok((num_formats <= 21 && num_formats >= 1) || + broken(IsEqualCLSID(test->clsid, &CLSID_WICIcoDecoder) && num_formats == 0) /* WinXP */, + "%u: got %d formats\n", i, num_formats); + + hr = IWICBitmapDecoderInfo_GetPixelFormats(decoder_info, 0, NULL, NULL); + ok(hr == E_INVALIDARG, "GetPixelFormats failed, hr=%x\n", hr); + + count = 0xdeadbeef; + hr = IWICBitmapDecoderInfo_GetPixelFormats(decoder_info, 0, pixelformats, &count); + ok(hr == S_OK, "GetPixelFormats failed, hr=%x\n", hr); + ok(count == 0, "got %d formats\n", count); + + count = 0xdeadbeef; + hr = IWICBitmapDecoderInfo_GetPixelFormats(decoder_info, 1, pixelformats, &count); + ok(hr == S_OK, "GetPixelFormats failed, hr=%x\n", hr); + ok((count == 1) || broken(IsEqualCLSID(test->clsid, &CLSID_WICIcoDecoder) && count == 0) /* WinXP */, + "%u: got %d formats\n", i, num_formats); + ok(is_pixelformat(&pixelformats[0]), "got invalid pixel format\n"); + + count = 0xdeadbeef; + hr = IWICBitmapDecoderInfo_GetPixelFormats(decoder_info, num_formats, pixelformats, &count); + ok(hr == S_OK, "GetPixelFormats failed, hr=%x\n", hr); + ok(count == num_formats, "got %d formats, expected %d\n", count, num_formats); + for (j = 0; j < num_formats; j++) + ok(is_pixelformat(&pixelformats[j]), "got invalid pixel format\n"); + + hr = IWICBitmapDecoderInfo_GetPixelFormats(decoder_info, num_formats, pixelformats, NULL); + ok(hr == E_INVALIDARG, "GetPixelFormats failed, hr=%x\n", hr); + + count = 0xdeadbeef; + hr = IWICBitmapDecoderInfo_GetPixelFormats(decoder_info, sizeof(pixelformats)/sizeof(pixelformats[0]), + pixelformats, &count); + ok(hr == S_OK, "GetPixelFormats failed, hr=%x\n", hr); + ok(count == num_formats, "got %d formats, expected %d\n", count, num_formats); + + hr = IWICBitmapDecoderInfo_GetFileExtensions(decoder_info, 0, NULL, NULL); + ok(hr == E_INVALIDARG, "GetFileExtensions failed, hr=%x\n", hr); + + hr = IWICBitmapDecoderInfo_GetFileExtensions(decoder_info, 1, NULL, &len); + ok(hr == E_INVALIDARG, "GetFileExtensions failed, hr=%x\n", hr); + todo_wine_if(test->todo && !IsEqualCLSID(test->clsid, &CLSID_WICTiffDecoder)) + ok(len == lstrlenW(extensionsW) + 1, "%u: GetFileExtensions returned wrong len %i\n", i, len); + + hr = IWICBitmapDecoderInfo_GetFileExtensions(decoder_info, len, value, NULL); + ok(hr == E_INVALIDARG, "GetFileExtensions failed, hr=%x\n", hr); + + hr = IWICBitmapDecoderInfo_GetFileExtensions(decoder_info, 0, NULL, &len); + ok(hr == S_OK, "GetFileExtensions failed, hr=%x\n", hr); + todo_wine_if(test->todo && !IsEqualCLSID(test->clsid, &CLSID_WICTiffDecoder)) + ok(len == lstrlenW(extensionsW) + 1, "GetFileExtensions returned wrong len %i\n", len); + + value[0] = 0; + hr = IWICBitmapDecoderInfo_GetFileExtensions(decoder_info, len, value, &len); + ok(hr == S_OK, "GetFileExtensions failed, hr=%x\n", hr); + todo_wine_if(test->todo) + ok(lstrcmpW(value, extensionsW) == 0, "GetFileExtensions returned wrong value %s\n", wine_dbgstr_w(value)); + todo_wine_if(test->todo && !IsEqualCLSID(test->clsid, &CLSID_WICTiffDecoder)) + ok(len == lstrlenW(extensionsW) + 1, "GetFileExtensions returned wrong len %i\n", len); + + hr = IWICBitmapDecoderInfo_GetFileExtensions(decoder_info, 1, value, &len); + ok(hr == WINCODEC_ERR_INSUFFICIENTBUFFER, "GetFileExtensions failed, hr=%x\n", hr); + todo_wine_if(test->todo && !IsEqualCLSID(test->clsid, &CLSID_WICTiffDecoder)) + ok(len == lstrlenW(extensionsW) + 1, "GetFileExtensions returned wrong len %i\n", len); + + hr = IWICBitmapDecoderInfo_GetFileExtensions(decoder_info, 256, value, &len); + ok(hr == S_OK, "GetFileExtensions failed, hr=%x\n", hr); + todo_wine_if(test->todo) + ok(lstrcmpW(value, extensionsW) == 0, "GetFileExtensions returned wrong value %s\n", wine_dbgstr_w(value)); + todo_wine_if(test->todo && !IsEqualCLSID(test->clsid, &CLSID_WICTiffDecoder)) + ok(len == lstrlenW(extensionsW) + 1, "GetFileExtensions returned wrong len %i\n", len); + + IWICBitmapDecoderInfo_Release(decoder_info); + IWICComponentInfo_Release(info); + } } static void test_pixelformat_info(void) -- 2.16.1