Nikolay Sivov : dwrite/tests: Some tests for font set properties.
Alexandre Julliard
julliard at winehq.org
Fri Oct 20 15:09:36 CDT 2017
Module: wine
Branch: master
Commit: f577fc8fa22da5645bd33f26a68a053d9bfc0132
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f577fc8fa22da5645bd33f26a68a053d9bfc0132
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Fri Oct 20 00:25:16 2017 +0300
dwrite/tests: Some tests for font set properties.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/dwrite/tests/font.c | 144 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 144 insertions(+)
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index c28f27a..7a14180 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -8305,6 +8305,149 @@ static void test_AnalyzeContainerType(void)
IDWriteFactory5_Release(factory);
}
+static void test_fontsetbuilder(void)
+{
+ IDWriteFontCollection1 *collection;
+ IDWriteFontSetBuilder *builder;
+ IDWriteFactory3 *factory;
+ UINT32 count, i, ref;
+ HRESULT hr;
+
+ factory = create_factory_iid(&IID_IDWriteFactory3);
+ if (!factory) {
+ skip("IDWriteFontSetBuilder is not supported.\n");
+ return;
+ }
+
+ EXPECT_REF(factory, 1);
+ hr = IDWriteFactory3_CreateFontSetBuilder(factory, &builder);
+todo_wine
+ ok(hr == S_OK, "Failed to create font set builder, hr %#x.\n", hr);
+
+ if (FAILED(hr)) {
+ IDWriteFactory3_Release(factory);
+ return;
+ }
+
+ EXPECT_REF(factory, 2);
+ IDWriteFontSetBuilder_Release(builder);
+
+ hr = IDWriteFactory3_GetSystemFontCollection(factory, FALSE, &collection, FALSE);
+ ok(hr == S_OK, "Failed to get system collection, hr %#x.\n", hr);
+ count = IDWriteFontCollection1_GetFontFamilyCount(collection);
+
+ for (i = 0; i < count; i++) {
+ IDWriteFontFamily1 *family;
+ UINT32 j, fontcount;
+ IDWriteFont3 *font;
+
+ hr = IDWriteFontCollection1_GetFontFamily(collection, i, &family);
+ ok(hr == S_OK, "Failed to get family, hr %#x.\n", hr);
+
+ fontcount = IDWriteFontFamily1_GetFontCount(family);
+ for (j = 0; j < fontcount; j++) {
+ IDWriteFontFaceReference *ref, *ref2;
+ IDWriteFontSet *fontset;
+ UINT32 setcount, id;
+
+ hr = IDWriteFontFamily1_GetFont(family, j, &font);
+ ok(hr == S_OK, "Failed to get font, hr %#x.\n", hr);
+
+ /* Create a set with a single font reference, test set properties. */
+ hr = IDWriteFactory3_CreateFontSetBuilder(factory, &builder);
+ ok(hr == S_OK, "Failed to create font set builder, hr %#x.\n", hr);
+
+ hr = IDWriteFont3_GetFontFaceReference(font, &ref);
+ ok(hr == S_OK, "Failed to get fontface reference, hr %#x.\n", hr);
+
+ EXPECT_REF(ref, 1);
+ hr = IDWriteFontSetBuilder_AddFontFaceReference(builder, ref);
+ ok(hr == S_OK, "Failed to add fontface reference, hr %#x.\n", hr);
+ EXPECT_REF(ref, 1);
+
+ hr = IDWriteFontSetBuilder_CreateFontSet(builder, &fontset);
+ ok(hr == S_OK, "Failed to create a font set, hr %#x.\n", hr);
+
+ setcount = IDWriteFontSet_GetFontCount(fontset);
+ ok(setcount == 1, "Unexpected font count %u.\n", setcount);
+
+ hr = IDWriteFontSet_GetFontFaceReference(fontset, 0, &ref2);
+ ok(hr == S_OK, "Failed to get font face reference, hr %#x.\n", hr);
+ ok(ref2 != ref, "Unexpected reference.\n");
+ IDWriteFontFaceReference_Release(ref2);
+
+ for (id = DWRITE_FONT_PROPERTY_ID_FAMILY_NAME; id < DWRITE_FONT_PROPERTY_ID_TOTAL; id++) {
+ static const WCHAR fmtW[] = {'%','u',0};
+ IDWriteLocalizedStrings *values;
+ WCHAR buffW[255], buff2W[255];
+ UINT32 c, ivalue;
+ BOOL exists;
+
+ hr = IDWriteFontSet_GetPropertyValues(fontset, 0, id, &exists, &values);
+ ok(hr == S_OK, "Failed to get property value, hr %#x.\n", hr);
+
+ if (!exists)
+ continue;
+
+ switch (id)
+ {
+ case DWRITE_FONT_PROPERTY_ID_WEIGHT:
+ ivalue = IDWriteFont3_GetWeight(font);
+ break;
+ case DWRITE_FONT_PROPERTY_ID_STRETCH:
+ ivalue = IDWriteFont3_GetStretch(font);
+ break;
+ case DWRITE_FONT_PROPERTY_ID_STYLE:
+ ivalue = IDWriteFont3_GetStyle(font);
+ break;
+ default:
+ ;
+ }
+
+ switch (id)
+ {
+ case DWRITE_FONT_PROPERTY_ID_WEIGHT:
+ case DWRITE_FONT_PROPERTY_ID_STRETCH:
+ case DWRITE_FONT_PROPERTY_ID_STYLE:
+ c = IDWriteLocalizedStrings_GetCount(values);
+ ok(c == 1, "Unexpected string count %u.\n", c);
+
+ buffW[0] = 'a';
+ hr = IDWriteLocalizedStrings_GetLocaleName(values, 0, buffW, sizeof(buffW)/sizeof(buffW[0]));
+ ok(hr == S_OK, "Failed to get locale name, hr %#x.\n", hr);
+ ok(!*buffW, "Unexpected locale %s.\n", wine_dbgstr_w(buffW));
+
+ buff2W[0] = 0;
+ hr = IDWriteLocalizedStrings_GetString(values, 0, buff2W, sizeof(buff2W)/sizeof(buff2W[0]));
+ ok(hr == S_OK, "Failed to get property string, hr %#x.\n", hr);
+
+ wsprintfW(buffW, fmtW, ivalue);
+ ok(!lstrcmpW(buffW, buff2W), "Unexpected property value %s, expected %s.\n", wine_dbgstr_w(buff2W),
+ wine_dbgstr_w(buffW));
+ break;
+ default:
+ ;
+ }
+
+ IDWriteLocalizedStrings_Release(values);
+ }
+
+ IDWriteFontSet_Release(fontset);
+ IDWriteFontFaceReference_Release(ref);
+ IDWriteFontSetBuilder_Release(builder);
+
+ IDWriteFont3_Release(font);
+ }
+
+ IDWriteFontFamily1_Release(family);
+ }
+
+ IDWriteFontCollection1_Release(collection);
+
+ ref = IDWriteFactory3_Release(factory);
+ ok(ref == 0, "factory not released, %u\n", ref);
+}
+
START_TEST(font)
{
IDWriteFactory *factory;
@@ -8371,6 +8514,7 @@ START_TEST(font)
test_CreateCustomRenderingParams();
test_localfontfileloader();
test_AnalyzeContainerType();
+ test_fontsetbuilder();
IDWriteFactory_Release(factory);
}
More information about the wine-cvs
mailing list