From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/windowscodecs/tests/metadata.c | 166 ++++++++++++++++++++++++++-- 1 file changed, 158 insertions(+), 8 deletions(-)
diff --git a/dlls/windowscodecs/tests/metadata.c b/dlls/windowscodecs/tests/metadata.c index 42d14f28ad5..97fa186cf00 100644 --- a/dlls/windowscodecs/tests/metadata.c +++ b/dlls/windowscodecs/tests/metadata.c @@ -316,10 +316,10 @@ static const char metadata_gAMA[] = { static const char metadata_cHRM[] = { 0,0,0,32, /* chunk length */ 'c','H','R','M', /* chunk type */ - 0,0,122,38, 0,0,128,132, /* white point */ - 0,0,250,0, 0,0,128,232, /* red */ - 0,0,117,48, 0,0,234,96, /* green */ - 0,0,58,152, 0,0,23,112, /* blue */ + 0,0,122,40, 0,0,120,132, /* white point */ + 0,0,240,0, 0,0,128,220, /* red */ + 0,0,100,48, 0,0,234,100, /* green */ + 0,0,58,140, 0,0,23,100, /* blue */ 0xff,0xff,0xff,0xff /* chunk CRC */ };
@@ -813,6 +813,21 @@ static void test_metadata_unknown(void) todo_wine ok(count == 1, "Unexpected count %u.\n", count);
+ PropVariantInit(&schema); + PropVariantInit(&id); + PropVariantInit(&value); + hr = IWICMetadataWriter_GetValueByIndex(writer, 0, &schema, &id, &value); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + if (hr == S_OK) + { + ok(schema.vt == VT_EMPTY, "Unexpected type %d.\n", schema.vt); + ok(id.vt == VT_EMPTY, "Unexpected type %d.\n", id.vt); + ok(value.vt == VT_BLOB, "Unexpected type %d.\n", id.vt); + ok(!value.blob.cbSize, "Unexpected size %lu.\n", value.blob.cbSize); + ok(!value.blob.pBlobData, "Unexpected data pointer %p.\n", value.blob.pBlobData); + } + PropVariantInit(&schema); PropVariantInit(&value);
@@ -1085,6 +1100,28 @@ static void test_metadata_gAMA(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(count == 1, "Unexpected count %u.\n", count);
+ hr = IWICMetadataWriter_GetValueByIndex(writer, 0, &schema, &id, &value); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + ok(schema.vt == VT_EMPTY, "Unexpected type %d.\n", schema.vt); + ok(id.vt == VT_LPWSTR, "Unexpected type %d.\n", id.vt); + ok(!lstrcmpW(id.pwszVal, L"ImageGamma"), "Unexpected id %s.\n", wine_dbgstr_w(id.pwszVal)); + PropVariantClear(&id); + + ok(value.vt == VT_UI4, "Unexpected type %d.\n", value.vt); + ok(value.ulVal == 45455, "unexpected value: %lu\n", value.ulVal); + + hr = IWICMetadataWriter_RemoveValueByIndex(writer, 0); + ok(hr == WINCODEC_ERR_UNSUPPORTEDOPERATION, "Unexpected hr %#lx.\n", hr); + + hr = IWICMetadataWriter_RemoveValueByIndex(writer, count); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + + id.vt = VT_EMPTY; + V_UI4(&id) = 123; + hr = IWICMetadataWriter_SetValue(writer, &schema, &id, &value); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + load_stream(writer, metadata_gAMA, sizeof(metadata_gAMA), 0); load_stream(writer, metadata_gAMA, sizeof(metadata_gAMA), WICPersistOptionNoCacheStream);
@@ -1112,7 +1149,10 @@ static void test_metadata_cHRM(void) L"BlueY", }; static const ULONG expected_vals[8] = { - 31270,32900, 64000,33000, 30000,60000, 15000,6000 + 31272, 30852, 61440, 32988, 25648, 60004, 14988, 5988 + }; + static const ULONG default_values[8] = { + 31270,32900,64000, 33000,30000, 60000,15000, 6000 };
PropVariantInit(&schema); @@ -1176,6 +1216,32 @@ static void test_metadata_cHRM(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(count == 8, "Unexpected count %u.\n", count);
+ for (i = 0; i < count && count == ARRAY_SIZE(expected_names); ++i) + { + hr = IWICMetadataWriter_GetValueByIndex(writer, i, &schema, &id, &value); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + ok(schema.vt == VT_EMPTY, "Unexpected type %d.\n", schema.vt); + PropVariantClear(&schema); + + ok(id.vt == VT_LPWSTR, "Unexpected type %d.\n", id.vt); + ok(!lstrcmpW(id.pwszVal, expected_names[i]), "Unexpected id %s, expected %s.\n", + wine_dbgstr_w(id.pwszVal), wine_dbgstr_w(expected_names[i])); + PropVariantClear(&id); + + ok(value.vt == VT_UI4, "Unexpected type %d.\n", value.vt); + ok(value.ulVal == default_values[i], "Got %lu, expected %lu.\n", value.ulVal, default_values[i]); + PropVariantClear(&value); + } + + for (i = 0; i < count; ++i) + { + hr = IWICMetadataWriter_RemoveValueByIndex(writer, i); + ok(hr == WINCODEC_ERR_UNSUPPORTEDOPERATION, "Unexpected hr %#lx.\n", hr); + } + hr = IWICMetadataWriter_RemoveValueByIndex(writer, count); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + load_stream(writer, metadata_cHRM, sizeof(metadata_cHRM), 0); load_stream(writer, metadata_cHRM, sizeof(metadata_cHRM), WICPersistOptionNoCacheStream);
@@ -1251,6 +1317,24 @@ static void test_metadata_hIST(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(count == 1, "Unexpected count %u.\n", count);
+ hr = IWICMetadataWriter_GetValueByIndex(writer, 0, &schema, &id, &value); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + ok(schema.vt == VT_EMPTY, "Unexpected type %d.\n", schema.vt); + + ok(id.vt == VT_LPWSTR, "Unexpected type %d.\n", id.vt); + ok(!lstrcmpW(id.pwszVal, L"Frequencies"), "Unexpected id %s.\n", wine_dbgstr_w(id.pwszVal)); + PropVariantClear(&id); + + ok(value.vt == (VT_UI2|VT_VECTOR), "Unexpected type %#x.\n", value.vt); + ok(!value.caui.cElems, "Unexpected cElems %ld.\n", value.caub.cElems); + ok(!value.caui.pElems, "Unexpected value %p.\n", value.caui.pElems); + + hr = IWICMetadataWriter_RemoveValueByIndex(writer, 0); + ok(hr == WINCODEC_ERR_UNSUPPORTEDOPERATION, "Unexpected hr %#lx.\n", hr); + hr = IWICMetadataWriter_RemoveValueByIndex(writer, 1); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + load_stream(writer, metadata_hIST, sizeof(metadata_hIST), 0); load_stream(writer, metadata_hIST, sizeof(metadata_hIST), WICPersistOptionNoCacheStream);
@@ -1262,7 +1346,7 @@ static void test_metadata_tIME(void) HRESULT hr; IWICMetadataReader *reader; IWICMetadataWriter *writer; - UINT count; + UINT i, count; GUID format; static const struct test_data td[] = { @@ -1273,6 +1357,15 @@ static void test_metadata_tIME(void) { VT_UI1, 0, 0, { 34 }, NULL, L"Minute" }, { VT_UI1, 0, 0, { 56 }, NULL, L"Second" }, }; + static const struct test_data default_data[] = + { + { VT_UI2, 0, 0, { 0 }, NULL, L"Year" }, + { VT_UI1, 0, 0, { 1 }, NULL, L"Month" }, + { VT_UI1, 0, 0, { 1 }, NULL, L"Day" }, + { VT_UI1, 0, 0, { 0 }, NULL, L"Hour" }, + { VT_UI1, 0, 0, { 0 }, NULL, L"Minute" }, + { VT_UI1, 0, 0, { 0 }, NULL, L"Second" }, + };
hr = CoCreateInstance(&CLSID_WICPngTimeMetadataReader, NULL, CLSCTX_INPROC_SERVER, &IID_IWICMetadataReader, (void**)&reader); @@ -1316,6 +1409,16 @@ static void test_metadata_tIME(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(count == 6, "Unexpected count %u.\n", count);
+ compare_metadata((IWICMetadataReader *)writer, default_data, count); + + for (i = 0; i < count; ++i) + { + hr = IWICMetadataWriter_RemoveValueByIndex(writer, i); + ok(hr == WINCODEC_ERR_UNSUPPORTEDOPERATION, "Unexpected hr %#lx.\n", hr); + } + hr = IWICMetadataWriter_RemoveValueByIndex(writer, count); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + load_stream(writer, metadata_tIME, sizeof(metadata_tIME), 0); load_stream(writer, metadata_tIME, sizeof(metadata_tIME), WICPersistOptionNoCacheStream);
@@ -2977,6 +3080,14 @@ static void test_metadata_GCE(void) { VT_UI2, 0, 0, { 0x302 }, NULL, L"Delay" }, { VT_UI1, 0, 0, { 4 }, NULL, L"TransparentColorIndex" } }; + static const struct test_data default_data[5] = + { + { VT_UI1, 0, 0, { 0 }, NULL, L"Disposal" }, + { VT_BOOL, 0, 0, { 0 }, NULL, L"UserInputFlag" }, + { VT_BOOL, 0, 0, { 0 }, NULL, L"TransparencyFlag" }, + { VT_UI2, 0, 0, { 0 }, NULL, L"Delay" }, + { VT_UI1, 0, 0, { 0 }, NULL, L"TransparentColorIndex" } + }; LARGE_INTEGER pos; HRESULT hr; IStream *stream; @@ -2985,7 +3096,7 @@ static void test_metadata_GCE(void) IWICMetadataWriter *writer; IWICMetadataHandlerInfo *info; WCHAR name[64]; - UINT count, dummy; + UINT i, count, dummy; GUID format; CLSID id;
@@ -3061,6 +3172,16 @@ static void test_metadata_GCE(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(count == 5, "Unexpected count %u.\n", count);
+ compare_metadata((IWICMetadataReader *)writer, default_data, count); + + for (i = 0; i < count; ++i) + { + hr = IWICMetadataWriter_RemoveValueByIndex(writer, i); + ok(hr == WINCODEC_ERR_UNSUPPORTEDOPERATION, "Unexpected hr %#lx.\n", hr); + } + hr = IWICMetadataWriter_RemoveValueByIndex(writer, count); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + load_stream(writer, GCE_data, sizeof(GCE_data), 0); load_stream(writer, GCE_data, sizeof(GCE_data), WICPersistOptionNoCacheStream);
@@ -3079,6 +3200,11 @@ static void test_metadata_APE(void) { VT_UI1|VT_VECTOR, 0, 11, { 'H','e','l','l','o',' ','W','o','r','l','d' }, NULL, L"Application" }, { VT_UI1|VT_VECTOR, 0, 10, { 1,0x11,2,0x22,0x33,4,0x44,0x55,0x66,0x77 }, NULL, L"Data" } }; + static const struct test_data default_data[2] = + { + { VT_EMPTY, 0, 0, { 0 }, NULL, L"Application" }, + { VT_UI1|VT_VECTOR, 0, 0, { 0 }, NULL, L"Data" } + }; WCHAR dataW[] = { 'd','a','t','a',0 }; HRESULT hr; IStream *stream; @@ -3172,6 +3298,16 @@ static void test_metadata_APE(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(count == 2, "Unexpected count %u.\n", count);
+ compare_metadata((IWICMetadataReader *)writer, default_data, count); + + for (i = 0; i < count; ++i) + { + hr = IWICMetadataWriter_RemoveValueByIndex(writer, i); + ok(hr == WINCODEC_ERR_UNSUPPORTEDOPERATION, "Unexpected hr %#lx.\n", hr); + } + hr = IWICMetadataWriter_RemoveValueByIndex(writer, count); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + load_stream(writer, APE_data, sizeof(APE_data), 0); load_stream(writer, APE_data, sizeof(APE_data), WICPersistOptionNoCacheStream);
@@ -3189,6 +3325,10 @@ static void test_metadata_GIF_comment(void) { { VT_LPSTR, 0, 12, { 0 }, "Hello World!", L"TextEntry" } }; + static const struct test_data default_data[1] = + { + { VT_LPSTR, 0, 0, { 0 }, "", L"TextEntry" } + }; WCHAR text_entryW[] = L"TEXTENTRY"; HRESULT hr; IStream *stream; @@ -3197,7 +3337,7 @@ static void test_metadata_GIF_comment(void) IWICMetadataWriter *writer; IWICMetadataHandlerInfo *info; WCHAR name[64]; - UINT count, dummy; + UINT i, count, dummy; GUID format; CLSID clsid; PROPVARIANT id, value; @@ -3280,6 +3420,16 @@ static void test_metadata_GIF_comment(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(count == 1, "Unexpected count %u.\n", count);
+ compare_metadata((IWICMetadataReader *)writer, default_data, count); + + for (i = 0; i < count; ++i) + { + hr = IWICMetadataWriter_RemoveValueByIndex(writer, i); + ok(hr == WINCODEC_ERR_UNSUPPORTEDOPERATION, "Unexpected hr %#lx.\n", hr); + } + hr = IWICMetadataWriter_RemoveValueByIndex(writer, count); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + load_stream(writer, GIF_comment_data, sizeof(GIF_comment_data), 0); load_stream(writer, GIF_comment_data, sizeof(GIF_comment_data), WICPersistOptionNoCacheStream);