dwrite/tests: Add some tests for CreateFontCollectionFromFontSet().

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2021-03-29 10:15:17 +03:00 committed by Alexandre Julliard
parent 2c77f717c8
commit ff983fe75f

View file

@ -587,6 +587,20 @@ static BOOL has_face_variations(IDWriteFontFace *fontface)
return ret;
}
#define check_familymodel(a,b) _check_familymodel(a,b,__LINE__)
static void _check_familymodel(void *iface_ptr, DWRITE_FONT_FAMILY_MODEL expected_model, unsigned int line)
{
IDWriteFontCollection2 *collection;
DWRITE_FONT_FAMILY_MODEL model;
if (SUCCEEDED(IUnknown_QueryInterface((IUnknown *)iface_ptr, &IID_IDWriteFontCollection2, (void **)&collection)))
{
model = IDWriteFontCollection2_GetFontFamilyModel(collection);
ok_(__FILE__,line)(model == expected_model, "Unexpected family model %d, expected %d.\n", model, expected_model);
IDWriteFontCollection2_Release(collection);
}
}
struct test_fontenumerator
{
IDWriteFontFileEnumerator IDWriteFontFileEnumerator_iface;
@ -2441,7 +2455,6 @@ static void test_system_fontcollection(void)
IDWriteFontCollection2 *collection2;
IDWriteFontCollection3 *collection3;
IDWriteFactory *factory, *factory2;
DWRITE_FONT_FAMILY_MODEL model;
IDWriteFontFileLoader *loader;
IDWriteFontFamily *family;
IDWriteFontFace *fontface;
@ -2621,8 +2634,7 @@ static void test_system_fontcollection(void)
todo_wine
ok(!!event, "Expected event handle.\n");
model = IDWriteFontCollection3_GetFontFamilyModel(collection3);
ok(model == DWRITE_FONT_FAMILY_MODEL_WEIGHT_STRETCH_STYLE, "Unexpected model.\n");
check_familymodel(collection3, DWRITE_FONT_FAMILY_MODEL_WEIGHT_STRETCH_STYLE);
IDWriteFontCollection3_Release(collection3);
}
@ -9423,8 +9435,8 @@ static void test_AnalyzeContainerType(void)
static void test_fontsetbuilder(void)
{
IDWriteFontFaceReference *ref, *ref2, *ref3;
IDWriteFontFaceReference1 *ref1;
IDWriteFontCollection1 *collection;
IDWriteFontFaceReference1 *ref1;
IDWriteFontSetBuilder1 *builder1;
IDWriteFontSetBuilder *builder;
DWRITE_FONT_AXIS_VALUE axis_values[4];
@ -9457,12 +9469,36 @@ static void test_fontsetbuilder(void)
hr = IDWriteFontSetBuilder1_AddFontFile(builder1, file);
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
hr = IDWriteFontSetBuilder1_CreateFontSet(builder1, &fontset);
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
hr = IDWriteFactory3_CreateFontCollectionFromFontSet(factory, fontset, &collection);
todo_wine
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
if (SUCCEEDED(hr))
{
count = IDWriteFontCollection1_GetFontFamilyCount(collection);
ok(count == 1, "Unexpected family count %u.\n", count);
IDWriteFontCollection1_Release(collection);
}
IDWriteFontSet_Release(fontset);
hr = IDWriteFontSetBuilder1_AddFontFile(builder1, file);
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
hr = IDWriteFontSetBuilder1_CreateFontSet(builder1, &fontset);
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
hr = IDWriteFactory3_CreateFontCollectionFromFontSet(factory, fontset, &collection);
todo_wine
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
if (SUCCEEDED(hr))
{
check_familymodel(collection, DWRITE_FONT_FAMILY_MODEL_WEIGHT_STRETCH_STYLE);
count = IDWriteFontCollection1_GetFontFamilyCount(collection);
ok(count == 1, "Unexpected family count %u.\n", count);
IDWriteFontCollection1_Release(collection);
}
/* No attempt to eliminate duplicates. */
count = IDWriteFontSet_GetFontCount(fontset);
ok(count == 2, "Unexpected font count %u.\n", count);
@ -10139,6 +10175,78 @@ static void test_system_font_set(void)
IDWriteFactory3_Release(factory);
}
static void test_CreateFontCollectionFromFontSet(void)
{
unsigned int index, count, refcount;
IDWriteFontCollection1 *collection;
IDWriteFontSetBuilder1 *builder;
DWRITE_FONT_PROPERTY props[1];
IDWriteFontFaceReference *ref;
IDWriteFactory5 *factory;
IDWriteFontSet *fontset;
IDWriteFontFile *file;
WCHAR *path;
BOOL exists;
HRESULT hr;
if (!(factory = create_factory_iid(&IID_IDWriteFactory5)))
{
win_skip("_CreateFontCollectionFromFontSet() is not available.\n");
return;
}
hr = IDWriteFactory5_CreateFontSetBuilder(factory, &builder);
ok(hr == S_OK, "Failed to create font set builder, hr %#x.\n", hr);
path = create_testfontfile(test_fontfile);
hr = IDWriteFactory5_CreateFontFileReference(factory, path, NULL, &file);
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
hr = IDWriteFontSetBuilder1_AddFontFile(builder, file);
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
/* Add same file, with explicit properties. */
hr = IDWriteFactory5_CreateFontFaceReference_(factory, file, 0, DWRITE_FONT_SIMULATIONS_NONE, &ref);
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
props[0].propertyId = DWRITE_FONT_PROPERTY_ID_WEIGHT_STRETCH_STYLE_FAMILY_NAME;
props[0].propertyValue = L"Another Font";
props[0].localeName = L"en-US";
hr = IDWriteFontSetBuilder1_AddFontFaceReference_(builder, ref, props, 1);
todo_wine
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
IDWriteFontFaceReference_Release(ref);
hr = IDWriteFontSetBuilder1_CreateFontSet(builder, &fontset);
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
hr = IDWriteFactory5_CreateFontCollectionFromFontSet(factory, fontset, &collection);
todo_wine
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
if (SUCCEEDED(hr))
{
count = IDWriteFontCollection1_GetFontFamilyCount(collection);
ok(count == 2, "Unexpected family count %u.\n", count);
/* Explicit fontset properties are prioritized and not replaced by actual properties from a file. */
exists = FALSE;
hr = IDWriteFontCollection1_FindFamilyName(collection, L"Another Font", &index, &exists);
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
ok(!!exists, "Unexpected return value %d.\n", exists);
IDWriteFontCollection1_Release(collection);
}
IDWriteFontSet_Release(fontset);
IDWriteFontSetBuilder1_Release(builder);
IDWriteFontFile_Release(file);
refcount = IDWriteFactory5_Release(factory);
ok(!refcount, "Unexpected factory refcount %u.\n", refcount);
DELETE_FONTFILE(path);
}
START_TEST(font)
{
IDWriteFactory *factory;
@ -10212,6 +10320,7 @@ START_TEST(font)
test_expiration_event();
test_family_font_set();
test_system_font_set();
test_CreateFontCollectionFromFontSet();
IDWriteFactory_Release(factory);
}