[PATCH] dwrite/tests: Run GetPanose() tests on all system fonts
Nikolay Sivov
nsivov at codeweavers.com
Wed Dec 14 21:48:58 CST 2016
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/dwrite/tests/font.c | 124 ++++++++++++++++++++++++++++++++++-------------
1 file changed, 89 insertions(+), 35 deletions(-)
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index d5126ff..eb47a05 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -5078,11 +5078,38 @@ static void test_GetGdiCompatibleMetrics(void)
IDWriteFactory_Release(factory);
}
+static void get_expected_panose(IDWriteFont1 *font, DWRITE_PANOSE *panose)
+{
+ IDWriteFontFace *fontface;
+ const TT_OS2_V2 *tt_os2;
+ void *os2_context;
+ UINT32 size;
+ BOOL exists;
+ HRESULT hr;
+
+ memset(panose, 0, sizeof(*panose));
+
+ hr = IDWriteFont1_CreateFontFace(font, &fontface);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IDWriteFontFace_TryGetFontTable(fontface, MS_0S2_TAG, (const void **)&tt_os2, &size, &os2_context, &exists);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ if (tt_os2) {
+ memcpy(panose, &tt_os2->panose, sizeof(*panose));
+ IDWriteFontFace_ReleaseFontTable(fontface, os2_context);
+ }
+
+ IDWriteFontFace_Release(fontface);
+}
+
static void test_GetPanose(void)
{
+ IDWriteFontCollection *syscollection;
IDWriteFactory *factory;
IDWriteFont1 *font1;
IDWriteFont *font;
+ UINT count, i;
HRESULT hr;
factory = create_factory();
@@ -5090,56 +5117,83 @@ static void test_GetPanose(void)
hr = IDWriteFont_QueryInterface(font, &IID_IDWriteFont1, (void**)&font1);
IDWriteFont_Release(font);
- if (hr == S_OK) {
+
+ if (FAILED(hr)) {
+ IDWriteFactory_Release(factory);
+ win_skip("GetPanose() is not supported.\n");
+ return;
+ }
+
+ hr = IDWriteFactory_GetSystemFontCollection(factory, &syscollection, FALSE);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ count = IDWriteFontCollection_GetFontFamilyCount(syscollection);
+
+ for (i = 0; i < count; i++) {
+ DWRITE_PANOSE panose, expected_panose;
+ IDWriteLocalizedStrings *names;
IDWriteFontFace3 *fontface3;
IDWriteFontFace *fontface;
- DWRITE_PANOSE panose;
+ IDWriteFontFamily *family;
+ IDWriteFont1 *font1;
+ IDWriteFont *font;
+ WCHAR nameW[256];
- if (0) /* crashes on native */
- IDWriteFont1_GetPanose(font1, NULL);
+ hr = IDWriteFontCollection_GetFontFamily(syscollection, i, &family);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
- memset(&panose, 0, sizeof(panose));
- IDWriteFont1_GetPanose(font1, &panose);
- ok(panose.familyKind == DWRITE_PANOSE_FAMILY_TEXT_DISPLAY,
- "got %u\n", panose.familyKind);
- ok(panose.text.serifStyle == DWRITE_PANOSE_SERIF_STYLE_NORMAL_SANS,
- "got %u\n", panose.text.serifStyle);
- ok(panose.text.weight == DWRITE_PANOSE_WEIGHT_MEDIUM,
- "got %u\n", panose.text.weight);
- ok(panose.text.proportion == DWRITE_PANOSE_PROPORTION_EVEN_WIDTH,
- "got %u\n", panose.text.proportion);
- ok(panose.text.contrast == DWRITE_PANOSE_CONTRAST_VERY_LOW,
- "got %u\n", panose.text.contrast);
- ok(panose.text.strokeVariation == DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_VERTICAL,
- "got %u\n", panose.text.strokeVariation);
- ok(panose.text.armStyle == DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL,
- "got %u\n", panose.text.armStyle);
- ok(panose.text.letterform == DWRITE_PANOSE_LETTERFORM_NORMAL_BOXED,
- "got %u\n", panose.text.letterform);
- ok(panose.text.midline == DWRITE_PANOSE_MIDLINE_STANDARD_TRIMMED,
- "got %u\n", panose.text.midline);
- ok(panose.text.xHeight == DWRITE_PANOSE_XHEIGHT_CONSTANT_LARGE,
- "got %u\n", panose.text.xHeight);
+ hr = IDWriteFontFamily_GetFirstMatchingFont(family, DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STRETCH_NORMAL,
+ DWRITE_FONT_STYLE_NORMAL, &font);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
- hr = IDWriteFont1_CreateFontFace(font1, &fontface);
+ hr = IDWriteFont_QueryInterface(font, &IID_IDWriteFont1, (void **)&font1);
ok(hr == S_OK, "got 0x%08x\n", hr);
+ IDWriteFont_Release(font);
- hr = IDWriteFontFace_QueryInterface(fontface, &IID_IDWriteFontFace3, (void**)&fontface3);
- IDWriteFontFace_Release(fontface);
- if (hr == S_OK) {
- DWRITE_PANOSE panose2;
+ hr = IDWriteFontFamily_GetFamilyNames(family, &names);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ get_enus_string(names, nameW, sizeof(nameW)/sizeof(nameW[0]));
+
+ IDWriteLocalizedStrings_Release(names);
- IDWriteFontFace3_GetPanose(fontface3, &panose2);
- ok(!memcmp(&panose, &panose2, sizeof(panose)), "wrong panose data\n");
+ IDWriteFont1_GetPanose(font1, &panose);
+ get_expected_panose(font1, &expected_panose);
+
+ ok(panose.values[0] == expected_panose.values[0], "%s: values[0] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
+ panose.values[0], expected_panose.values[0]);
+ ok(panose.values[1] == expected_panose.values[1], "%s: values[1] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
+ panose.values[1], expected_panose.values[1]);
+ ok(panose.values[2] == expected_panose.values[2], "%s: values[2] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
+ panose.values[2], expected_panose.values[2]);
+ ok(panose.values[3] == expected_panose.values[3], "%s: values[3] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
+ panose.values[3], expected_panose.values[3]);
+ ok(panose.values[4] == expected_panose.values[4], "%s: values[4] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
+ panose.values[4], expected_panose.values[4]);
+ ok(panose.values[5] == expected_panose.values[5], "%s: values[5] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
+ panose.values[5], expected_panose.values[5]);
+ ok(panose.values[6] == expected_panose.values[6], "%s: values[6] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
+ panose.values[6], expected_panose.values[6]);
+ ok(panose.values[7] == expected_panose.values[7], "%s: values[7] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
+ panose.values[7], expected_panose.values[7]);
+ ok(panose.values[8] == expected_panose.values[8], "%s: values[8] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
+ panose.values[8], expected_panose.values[8]);
+ ok(panose.values[9] == expected_panose.values[9], "%s: values[9] %#x, expected %#x.\n", wine_dbgstr_w(nameW),
+ panose.values[9], expected_panose.values[9]);
+ hr = IDWriteFont1_CreateFontFace(font1, &fontface);
+ ok(hr == S_OK, "Failed to create a font face, %#x.\n", hr);
+ if (IDWriteFontFace_QueryInterface(fontface, &IID_IDWriteFontFace3, (void **)&fontface3) == S_OK) {
+ ok(!memcmp(&panose, &expected_panose, sizeof(panose)), "%s: Unexpected panose from font face.\n",
+ wine_dbgstr_w(nameW));
IDWriteFontFace3_Release(fontface3);
}
+ IDWriteFontFace_Release(fontface);
IDWriteFont1_Release(font1);
+ IDWriteFontFamily_Release(family);
}
- else
- win_skip("GetPanose() is not supported.\n");
+ IDWriteFontCollection_Release(syscollection);
IDWriteFactory_Release(factory);
}
--
2.10.2
More information about the wine-patches
mailing list