[PATCH 2/2] dwrite/tests: Add IsColorFont() tests.

Nikolay Sivov nsivov at codeweavers.com
Mon Dec 23 00:11:29 CST 2019


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/dwrite/tests/font.c | 104 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 104 insertions(+)

diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index 68e2c03baf..d7bcfb1f0a 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -9546,6 +9546,109 @@ static void test_font_resource(void)
     ok(ref == 0, "Factory wasn't released, %u.\n", ref);
 }
 
+static BOOL get_expected_is_color(IDWriteFontFace2 *fontface)
+{
+    void *context;
+    UINT32 size;
+    BOOL exists;
+    void *data;
+    HRESULT hr;
+
+    hr = IDWriteFontFace2_TryGetFontTable(fontface, MS_CPAL_TAG, (const void **)&data, &size, &context, &exists);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    if (context)
+        IDWriteFontFace2_ReleaseFontTable(fontface, context);
+
+    if (exists)
+    {
+        hr = IDWriteFontFace2_TryGetFontTable(fontface, MS_COLR_TAG, (const void **)&data, &size, &context, &exists);
+        ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+        if (context)
+            IDWriteFontFace2_ReleaseFontTable(fontface, context);
+    }
+
+    return exists;
+}
+
+static void test_IsColorFont(void)
+{
+    IDWriteFontCollection *collection;
+    IDWriteFactory2 *factory;
+    UINT32 count, i;
+    ULONG refcount;
+    HRESULT hr;
+
+    factory = create_factory_iid(&IID_IDWriteFactory2);
+
+    if (!factory)
+    {
+        win_skip("IsColorFont() is not supported.\n");
+        return;
+    }
+
+    hr = IDWriteFactory2_GetSystemFontCollection(factory, &collection, FALSE);
+    ok(hr == S_OK, "Failed to get font collection, hr %#x.\n", hr);
+
+    count = IDWriteFontCollection_GetFontFamilyCount(collection);
+    for (i = 0; i < count; ++i)
+    {
+        IDWriteLocalizedStrings *names;
+        IDWriteFontFamily *family;
+        UINT32 font_count, j;
+        WCHAR nameW[256];
+
+        hr = IDWriteFontCollection_GetFontFamily(collection, i, &family);
+        ok(hr == S_OK, "Failed to get family, hr %#x.\n", hr);
+
+        hr = IDWriteFontFamily_GetFamilyNames(family, &names);
+        ok(hr == S_OK, "Failed to get names, hr %#x.\n", hr);
+        get_enus_string(names, nameW, ARRAY_SIZE(nameW));
+        IDWriteLocalizedStrings_Release(names);
+
+        font_count = IDWriteFontFamily_GetFontCount(family);
+
+        for (j = 0; j < font_count; ++j)
+        {
+            BOOL is_color_font, is_color_face, is_color_expected;
+            IDWriteFontFace2 *fontface2;
+            IDWriteFontFace *fontface;
+            IDWriteFont2 *font2;
+            IDWriteFont *font;
+
+            hr = IDWriteFontFamily_GetFont(family, j, &font);
+            ok(hr == S_OK, "Failed to get font, hr %#x.\n", hr);
+
+            hr = IDWriteFont_QueryInterface(font, &IID_IDWriteFont2, (void **)&font2);
+            ok(hr == S_OK, "Failed to get interface, hr %#x.\n", hr);
+            IDWriteFont_Release(font);
+
+            hr = IDWriteFont2_CreateFontFace(font2, &fontface);
+            ok(hr == S_OK, "Failed to create fontface, hr %#x.\n", hr);
+
+            hr = IDWriteFontFace_QueryInterface(fontface, &IID_IDWriteFontFace2, (void **)&fontface2);
+            ok(hr == S_OK, "Failed to get interface, hr %#x.\n", hr);
+            IDWriteFontFace_Release(fontface);
+
+            is_color_font = IDWriteFont2_IsColorFont(font2);
+            is_color_face = IDWriteFontFace2_IsColorFont(fontface2);
+            ok(is_color_font == is_color_face, "Unexpected color flag.\n");
+
+            is_color_expected = get_expected_is_color(fontface2);
+            ok(is_color_expected == is_color_face, "Unexpected is_color flag %d for %s, font %d.\n",
+                    is_color_face, wine_dbgstr_w(nameW), j);
+
+            IDWriteFontFace2_Release(fontface2);
+            IDWriteFont2_Release(font2);
+        }
+
+        IDWriteFontFamily_Release(family);
+    }
+
+    IDWriteFontCollection_Release(collection);
+    refcount = IDWriteFactory2_Release(factory);
+    ok(refcount == 0, "Factory not released, refcount %u.\n", refcount);
+}
+
 START_TEST(font)
 {
     IDWriteFactory *factory;
@@ -9614,6 +9717,7 @@ START_TEST(font)
     test_AnalyzeContainerType();
     test_fontsetbuilder();
     test_font_resource();
+    test_IsColorFont();
 
     IDWriteFactory_Release(factory);
 }
-- 
2.24.0




More information about the wine-devel mailing list