static void test_encoder_properties(const CLSID* clsid_encoder, IPropertyBag2 *options) { HRESULT hr; ULONG cProperties = 0; ULONG cProperties2 = 0; PROPBAG2 all_props[64] = {{0}}; /* Should be enough for every encoder out there */ int i; /* CountProperties */ { hr = IPropertyBag2_CountProperties(options, &cProperties); ok(SUCCEEDED(hr), "Reading property count, hr=%x\n", hr); } /* GetPropertyInfo */ { hr = IPropertyBag2_GetPropertyInfo(options, cProperties, 1, all_props, &cProperties2); ok(hr == WINCODEC_ERR_VALUEOUTOFRANGE, "IPropertyBag2::GetPropertyInfo - iProperty out of bounce handled wrong, hr=%x\n", hr); hr = IPropertyBag2_GetPropertyInfo(options, 0, cProperties+1, all_props, &cProperties2); ok(hr == WINCODEC_ERR_VALUEOUTOFRANGE, "IPropertyBag2::GetPropertyInfo - cProperty out of bounce handled wrong, hr=%x\n", hr); if (cProperties == 0) /* GetPropertyInfo can be called for zero items on Windows 8 but not on Windows 7 (wine behaves like Win8) */ { cProperties2 = cProperties; hr = S_OK; } else { hr = IPropertyBag2_GetPropertyInfo(options, 0, min(64, cProperties), all_props, &cProperties2); ok(SUCCEEDED(hr), "Reading infos from property bag failed, hr=%x\n", hr); } if (FAILED(hr)) return; ok(cProperties == cProperties2, "Missmatch of property count (IPropertyBag2::CountProperties=%i, IPropertyBag2::GetPropertyInfo=%i)\n", (int)cProperties, (int)cProperties2); } if (clsid_encoder == &CLSID_WICTiffEncoder) test_specific_encoder_properties(options, testdata_tiff_props, all_props, cProperties2); for (i=0; i < cProperties2; i++) { ok(all_props[i].pstrName != NULL, "Unset property name in output of IPropertyBag2::GetPropertyInfo\n"); CoTaskMemFree(all_props[i].pstrName); } }
static void test_propertybag_getpropertyinfo(IPropertyBag2 *property, ULONG expected_count) { HRESULT hr; PROPBAG2 pb[2]; ULONG out_count; /* iProperty: Out of bounce */ hr = IPropertyBag2_GetPropertyInfo(property, expected_count, 1, pb, &out_count); ok(hr == WINCODEC_ERR_VALUEOUTOFRANGE, "GetPropertyInfo handled iProperty out of bounce wrong, hr=%x\n", hr); /* cProperty: Out of bounce */ hr = IPropertyBag2_GetPropertyInfo(property, 0, expected_count+1, pb, &out_count); ok(hr == WINCODEC_ERR_VALUEOUTOFRANGE, "GetPropertyInfo handled cProperty out of bounce wrong, hr=%x\n", hr); /* GetPropertyInfo can be called for zero items on Windows 8 but not on Windows 7 (wine behaves like Win8) */ if (expected_count == 0) return; hr = IPropertyBag2_GetPropertyInfo(property, 0, expected_count, pb, &out_count); ok(hr == S_OK, "GetPropertyInfo failed, hr=%x\n", hr); if (FAILED(hr)) return; ok(expected_count == out_count, "GetPropertyInfo returned unexpected property count, %i != %i)\n", expected_count, out_count); if(expected_count != 2) return; ok(pb[0].vt == VT_UI1, "Invalid variant type, pb[0].vt=%x\n", pb[0].vt); ok(pb[0].dwType == PROPBAG2_TYPE_DATA, "Invalid variant type, pb[0].dwType=%x\n", pb[0].dwType); ok(lstrcmpW(pb[0].pstrName, wszTestProperty1) == 0, "Invalid property name, pb[0].pstrName=%s\n", wine_dbgstr_w(pb[0].pstrName)); CoTaskMemFree(pb[0].pstrName); ok(pb[1].vt == VT_R4, "Invalid variant type, pb[1].vt=%x\n", pb[1].vt); ok(pb[1].dwType == PROPBAG2_TYPE_DATA, "Invalid variant type, pb[1].dwType=%x\n", pb[1].dwType); ok(lstrcmpW(pb[1].pstrName, wszTestProperty2) == 0, "Invalid property name, pb[1].pstrName=%s\n", wine_dbgstr_w(pb[1].pstrName)); CoTaskMemFree(pb[1].pstrName); }