[PATCH] dwrite/tests: Improve DrawUnderline() test reliability by using text tested font actually supports.
Nikolay Sivov
nsivov at codeweavers.com
Thu Jan 16 04:14:38 CST 2020
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
Currently used string "ae" trigger fallback for fonts that don't support this Latin range,
it's easy to reproduce with Noto fonts that target specific script.
dlls/dwrite/tests/layout.c | 34 ++++++++++++++++++++++++++++------
1 file changed, 28 insertions(+), 6 deletions(-)
diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c
index 8532555e06..48b2880079 100644
--- a/dlls/dwrite/tests/layout.c
+++ b/dlls/dwrite/tests/layout.c
@@ -5346,14 +5346,17 @@ todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
count = IDWriteFontCollection_GetFontFamilyCount(syscollection);
- for (i = 0; i < count; i++) {
+ for (i = 0; i < count; ++i)
+ {
DWRITE_FONT_METRICS fontmetrics;
IDWriteLocalizedStrings *names;
struct renderer_context ctxt;
IDWriteFontFamily *family;
IDWriteFontFace *fontface;
+ WCHAR nameW[256], str[1];
IDWriteFont *font;
- WCHAR nameW[256];
+ UINT32 codepoint;
+ UINT16 glyph;
BOOL exists;
format = NULL;
@@ -5414,19 +5417,38 @@ todo_wine
DWRITE_FONT_STRETCH_NORMAL, fontmetrics.designUnitsPerEm, enusW, &format);
ok(hr == S_OK, "got 0x%08x\n", hr);
- hr = IDWriteFactory_CreateTextLayout(factory, strW, 2, format, 30000.0f, 100.0f, &layout);
- ok(hr == S_OK, "got 0x%08x\n", hr);
+ /* Look for first supported character to avoid triggering fallback path. With fallback it's harder to test
+ DrawUnderline() metrics, because actual resolved fontface is not passed to it. Grabbing fontface instance
+ from corresponding DrawGlyphRun() call is not straightforward. */
+ for (codepoint = ' '; codepoint < 0xffff; ++codepoint)
+ {
+ glyph = 0;
+ hr = IDWriteFontFace_GetGlyphIndices(fontface, &codepoint, 1, &glyph);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ if (glyph)
+ break;
+ }
+
+ if (!glyph)
+ {
+ skip("Couldn't find reasonable test string.\n");
+ goto cleanup;
+ }
+
+ str[0] = codepoint;
+ hr = IDWriteFactory_CreateTextLayout(factory, str, 1, format, 30000.0f, 100.0f, &layout);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
range.startPosition = 0;
range.length = 2;
hr = IDWriteTextLayout_SetUnderline(layout, TRUE, range);
- ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
memset(&ctxt, 0, sizeof(ctxt));
ctxt.format = format;
ctxt.familyW = nameW;
hr = IDWriteTextLayout_Draw(layout, &ctxt, &testrenderer, 0.0f, 0.0f);
- ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
cleanup:
if (layout)
--
2.24.1
More information about the wine-devel
mailing list