[PATCH] usp10/tests: add fingerprint to help ensure proper font for testing
Aric Stewart <[email protected]>
| Newsgroups | gmane.comp.emulators.wine.patches |
|---|---|
| Message-ID | <[email protected]> |
Fixes problems where there is a linux font also named Estrangelo Edessa but does not have the font shaping properties we are testing Signed-off-by: Aric Stewart <[email protected]> --- dlls/usp10/tests/usp10.c | 71 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 50 insertions(+), 21 deletions(-)
0001-usp10-tests-add-fingerprint-to-help-ensure-proper-font.txt
(text/x-patch, 11.1 KB)
diff --git a/dlls/usp10/tests/usp10.c b/dlls/usp10/tests/usp10.c
index 47f83ee1de..55bec7f74f 100644
--- a/dlls/usp10/tests/usp10.c
+++ b/dlls/usp10/tests/usp10.c
@@ -53,6 +53,11 @@ typedef struct _shapeTest_glyph {
SCRIPT_GLYPHPROP GlyphProp;
} shapeTest_glyph;
+typedef struct _font_fingerprint {
+ WCHAR check[10];
+ WORD result[10];
+} font_fingerprint;
+
/* Uniscribe 1.6 calls */
static HRESULT (WINAPI *pScriptItemizeOpenType)( const WCHAR *pwcInChars, int cInChars, int cMaxItems, const SCRIPT_CONTROL *psControl, const SCRIPT_STATE *psState, SCRIPT_ITEM *pItems, ULONG *pScriptTags, int *pcItems);
@@ -1266,7 +1271,7 @@ static int CALLBACK enumFontProc( const LOGFONTA *lpelfe, const TEXTMETRICA *lpn
return 1;
}
-static int _find_font_for_range(HDC hdc, const CHAR *recommended, BYTE range, const WCHAR check, HFONT *hfont, HFONT *origFont)
+static int _find_font_for_range(HDC hdc, const CHAR *recommended, BYTE range, const WCHAR check, HFONT *hfont, HFONT *origFont, const font_fingerprint *fingerprint)
{
int rc = 0;
fontEnumParam lParam;
@@ -1284,7 +1289,26 @@ static int _find_font_for_range(HDC hdc, const CHAR *recommended, BYTE range, co
if (*hfont)
{
winetest_trace("using font %s\n",lParam.lf.lfFaceName);
- rc = 1;
+ *origFont = SelectObject(hdc,*hfont);
+ if (fingerprint)
+ {
+ WORD output[10];
+ int i;
+ if (GetGlyphIndicesW(hdc, fingerprint->check, 10, output, 0) != GDI_ERROR)
+ {
+ for (i=0; i < 10; i++)
+ if (output[i] != fingerprint->result[i])
+ {
+ winetest_trace("found font does not match fingerprint\n");
+ SelectObject(hdc,*origFont);
+ DeleteObject(*hfont);
+ *hfont = NULL;
+ break;
+ }
+ if (i == 10) rc = 1;
+ }
+ }
+ else rc = 1;
}
}
if (!rc)
@@ -1326,7 +1350,7 @@ static int _find_font_for_range(HDC hdc, const CHAR *recommended, BYTE range, co
return rc;
}
-#define find_font_for_range(a,b,c,d,e,f) (winetest_set_location(__FILE__,__LINE__), 0) ? 0 : _find_font_for_range(a,b,c,d,e,f)
+#define find_font_for_range(a,b,c,d,e,f,g) (winetest_set_location(__FILE__,__LINE__), 0) ? 0 : _find_font_for_range(a,b,c,d,e,f,g)
static void test_ScriptShapeOpenType(HDC hdc)
{
@@ -1608,6 +1632,11 @@ static void test_ScriptShapeOpenType(HDC hdc)
{1,{{SCRIPT_JUSTIFY_NONE,1,0,0,0,0},0}},
{1,{{SCRIPT_JUSTIFY_NONE,0,0,0,0,0},0}} };
+ static const font_fingerprint fingerprint_estrangelo = {
+ {'A','a','B','b','C','c','D','d',0,0},
+ {284,310,285,311,286,312,287,313,0,0}};
+
+
if (!pScriptItemizeOpenType || !pScriptShapeOpenType)
{
win_skip("ScriptShapeOpenType not available on this platform\n");
@@ -1650,7 +1679,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
test_shape_ok(hdc, test2, 4, &Control, &State, 1, 4, t2_c, glyph_test);
- test_valid = find_font_for_range(hdc, "Calibri", 0, test3[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "Calibri", 0, test3[0], &hfont, &hfont_orig, NULL);
if (hfont != NULL)
{
test_shape_ok_valid(test_valid, hdc, test3, 6, &Control, &State, 0, 2, t3_c, t3_g);
@@ -1658,7 +1687,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
DeleteObject(hfont);
}
- test_valid = find_font_for_range(hdc, "Microsoft Sans Serif", 11, test_hebrew[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "Microsoft Sans Serif", 11, test_hebrew[0], &hfont, &hfont_orig, NULL);
if (hfont != NULL)
{
test_shape_ok_valid(test_valid, hdc, test_hebrew, 4, &Control, &State, 0, 4, hebrew_c, hebrew_g);
@@ -1666,7 +1695,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
DeleteObject(hfont);
}
- test_valid = find_font_for_range(hdc, "Microsoft Sans Serif", 13, test_arabic[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "Microsoft Sans Serif", 13, test_arabic[0], &hfont, &hfont_orig, NULL);
if (hfont != NULL)
{
test_shape_ok_valid(test_valid, hdc, test_arabic, 4, &Control, &State, 0, 3, arabic_c, arabic_g);
@@ -1674,7 +1703,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
DeleteObject(hfont);
}
- test_valid = find_font_for_range(hdc, "Microsoft Sans Serif", 24, test_thai[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "Microsoft Sans Serif", 24, test_thai[0], &hfont, &hfont_orig, NULL);
if (hfont != NULL)
{
test_shape_ok_valid(test_valid, hdc, test_thai, 10, &Control, &State, 0, 10, thai_c, thai_g);
@@ -1682,7 +1711,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
DeleteObject(hfont);
}
- test_valid = find_font_for_range(hdc, "Estrangelo Edessa", 71, test_syriac[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "Estrangelo Edessa", 71, test_syriac[0], &hfont, &hfont_orig, &fingerprint_estrangelo);
if (hfont != NULL)
{
test_shape_ok_valid(test_valid, hdc, test_syriac, 8, &Control, &State, 0, 7, syriac_c, syriac_g);
@@ -1690,7 +1719,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
DeleteObject(hfont);
}
- test_valid = find_font_for_range(hdc, "MV Boli", 72, test_thaana[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "MV Boli", 72, test_thaana[0], &hfont, &hfont_orig, NULL);
if (hfont != NULL)
{
test_shape_ok_valid(test_valid, hdc, test_thaana, 13, &Control, &State, 0, 13, thaana_c, thaana_g);
@@ -1698,7 +1727,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
DeleteObject(hfont);
}
- test_valid = find_font_for_range(hdc, "Microsoft PhagsPa", 53, test_phagspa[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "Microsoft PhagsPa", 53, test_phagspa[0], &hfont, &hfont_orig, NULL);
if (hfont != NULL)
{
test_shape_ok_valid_props2(test_valid, hdc, test_phagspa, 11, &Control, &State, 0, 11,
@@ -1707,7 +1736,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
DeleteObject(hfont);
}
- test_valid = find_font_for_range(hdc, "DokChampa", 25, test_lao[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "DokChampa", 25, test_lao[0], &hfont, &hfont_orig, NULL);
if (hfont != NULL)
{
test_shape_ok_valid(test_valid, hdc, test_lao, 9, &Control, &State, 0, 9, lao_c, lao_g);
@@ -1715,7 +1744,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
DeleteObject(hfont);
}
- test_valid = find_font_for_range(hdc, "Microsoft Himalaya", 70, test_tibetan[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "Microsoft Himalaya", 70, test_tibetan[0], &hfont, &hfont_orig, NULL);
if (hfont != NULL)
{
test_shape_ok_valid_props2(test_valid, hdc, test_tibetan, 17, &Control, &State, 0, 17,
@@ -1724,7 +1753,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
DeleteObject(hfont);
}
- test_valid = find_font_for_range(hdc, "Mangal", 15, test_devanagari[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "Mangal", 15, test_devanagari[0], &hfont, &hfont_orig, NULL);
if (hfont != NULL)
{
test_shape_ok_valid(test_valid, hdc, test_devanagari, 8, &Control, &State, 0, 8, devanagari_c, devanagari_g);
@@ -1732,7 +1761,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
DeleteObject(hfont);
}
- test_valid = find_font_for_range(hdc, "Vrinda", 16, test_bengali[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "Vrinda", 16, test_bengali[0], &hfont, &hfont_orig, NULL);
if (hfont != NULL)
{
test_shape_ok_valid(test_valid, hdc, test_bengali, 5, &Control, &State, 0, 5, bengali_c, bengali_g);
@@ -1740,7 +1769,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
DeleteObject(hfont);
}
- test_valid = find_font_for_range(hdc, "Raavi", 17, test_gurmukhi[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "Raavi", 17, test_gurmukhi[0], &hfont, &hfont_orig, NULL);
if (hfont != NULL)
{
test_shape_ok_valid(test_valid, hdc, test_gurmukhi, 7, &Control, &State, 0, 7, gurmukhi_c, gurmukhi_g);
@@ -1748,7 +1777,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
DeleteObject(hfont);
}
- test_valid = find_font_for_range(hdc, "Shruti", 18, test_gujarati[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "Shruti", 18, test_gujarati[0], &hfont, &hfont_orig, NULL);
if (hfont != NULL)
{
test_shape_ok_valid(test_valid, hdc, test_gujarati, 7, &Control, &State, 0, 7, gujarati_c, gujarati_g);
@@ -1756,7 +1785,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
DeleteObject(hfont);
}
- test_valid = find_font_for_range(hdc, "Kalinga", 19, test_oriya[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "Kalinga", 19, test_oriya[0], &hfont, &hfont_orig, NULL);
if (hfont != NULL)
{
test_shape_ok_valid(test_valid, hdc, test_oriya, 5, &Control, &State, 0, 4, oriya_c, oriya_g);
@@ -1764,7 +1793,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
DeleteObject(hfont);
}
- test_valid = find_font_for_range(hdc, "Latha", 20, test_tamil[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "Latha", 20, test_tamil[0], &hfont, &hfont_orig, NULL);
if (hfont != NULL)
{
test_shape_ok_valid(test_valid, hdc, test_tamil, 5, &Control, &State, 0, 4, tamil_c, tamil_g);
@@ -1772,7 +1801,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
DeleteObject(hfont);
}
- test_valid = find_font_for_range(hdc, "Gautami", 21, test_telugu[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "Gautami", 21, test_telugu[0], &hfont, &hfont_orig, NULL);
if (hfont != NULL)
{
test_shape_ok_valid(test_valid, hdc, test_telugu, 6, &Control, &State, 0, 6, telugu_c, telugu_g);
@@ -1780,7 +1809,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
DeleteObject(hfont);
}
- test_valid = find_font_for_range(hdc, "Kartika", 23, test_malayalam[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "Kartika", 23, test_malayalam[0], &hfont, &hfont_orig, NULL);
if (hfont != NULL)
{
test_shape_ok_valid(test_valid, hdc, test_malayalam, 6, &Control, &State, 0, 6, malayalam_c, malayalam_g);
@@ -1788,7 +1817,7 @@ static void test_ScriptShapeOpenType(HDC hdc)
DeleteObject(hfont);
}
- test_valid = find_font_for_range(hdc, "Tunga", 22, test_kannada[0], &hfont, &hfont_orig);
+ test_valid = find_font_for_range(hdc, "Tunga", 22, test_kannada[0], &hfont, &hfont_orig, NULL);
if (hfont != NULL)
{
test_shape_ok_valid(test_valid, hdc, test_kannada, 5, &Control, &State, 0, 4, kannada_c, kannada_g);