dwrite/tests: Add more tests for font sets.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
633db76f78
commit
1aa26bfe94
|
@ -124,7 +124,7 @@ static void _expect_ref_broken(IUnknown* obj, ULONG ref, ULONG brokenref, int li
|
||||||
|
|
||||||
static BOOL (WINAPI *pGetFontRealizationInfo)(HDC hdc, void *);
|
static BOOL (WINAPI *pGetFontRealizationInfo)(HDC hdc, void *);
|
||||||
|
|
||||||
static const WCHAR test_fontfile[] = {'w','i','n','e','_','t','e','s','t','_','f','o','n','t','.','t','t','f',0};
|
static const WCHAR test_fontfile[] = L"wine_test_font.ttf";
|
||||||
|
|
||||||
/* PANOSE is 10 bytes in size, need to pack the structure properly */
|
/* PANOSE is 10 bytes in size, need to pack the structure properly */
|
||||||
#include "pshpack2.h"
|
#include "pshpack2.h"
|
||||||
|
@ -9363,10 +9363,15 @@ static void test_AnalyzeContainerType(void)
|
||||||
|
|
||||||
static void test_fontsetbuilder(void)
|
static void test_fontsetbuilder(void)
|
||||||
{
|
{
|
||||||
|
IDWriteFontFaceReference *ref, *ref2, *ref3;
|
||||||
IDWriteFontCollection1 *collection;
|
IDWriteFontCollection1 *collection;
|
||||||
|
IDWriteFontSetBuilder1 *builder1;
|
||||||
IDWriteFontSetBuilder *builder;
|
IDWriteFontSetBuilder *builder;
|
||||||
IDWriteFactory3 *factory;
|
IDWriteFactory3 *factory;
|
||||||
UINT32 count, i, ref;
|
UINT32 count, i, refcount;
|
||||||
|
IDWriteFontSet *fontset;
|
||||||
|
IDWriteFontFile *file;
|
||||||
|
WCHAR *path;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
factory = create_factory_iid(&IID_IDWriteFactory3);
|
factory = create_factory_iid(&IID_IDWriteFactory3);
|
||||||
|
@ -9380,6 +9385,40 @@ static void test_fontsetbuilder(void)
|
||||||
hr = IDWriteFactory3_CreateFontSetBuilder(factory, &builder);
|
hr = IDWriteFactory3_CreateFontSetBuilder(factory, &builder);
|
||||||
ok(hr == S_OK, "Failed to create font set builder, hr %#x.\n", hr);
|
ok(hr == S_OK, "Failed to create font set builder, hr %#x.\n", hr);
|
||||||
EXPECT_REF(factory, 2);
|
EXPECT_REF(factory, 2);
|
||||||
|
|
||||||
|
if (SUCCEEDED(hr = IDWriteFontSetBuilder_QueryInterface(builder, &IID_IDWriteFontSetBuilder1, (void **)&builder1)))
|
||||||
|
{
|
||||||
|
path = create_testfontfile(test_fontfile);
|
||||||
|
|
||||||
|
hr = IDWriteFactory3_CreateFontFileReference(factory, path, NULL, &file);
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
|
||||||
|
|
||||||
|
hr = IDWriteFontSetBuilder1_AddFontFile(builder1, file);
|
||||||
|
todo_wine
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
|
||||||
|
|
||||||
|
hr = IDWriteFontSetBuilder1_AddFontFile(builder1, file);
|
||||||
|
todo_wine
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
|
||||||
|
|
||||||
|
hr = IDWriteFontSetBuilder1_CreateFontSet(builder1, &fontset);
|
||||||
|
todo_wine
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n",hr);
|
||||||
|
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
/* No attempt to eliminate duplicates. */
|
||||||
|
count = IDWriteFontSet_GetFontCount(fontset);
|
||||||
|
ok(count == 2, "Unexpected font count %u.\n", count);
|
||||||
|
|
||||||
|
IDWriteFontSet_Release(fontset);
|
||||||
|
}
|
||||||
|
|
||||||
|
IDWriteFontFile_Release(file);
|
||||||
|
IDWriteFontSetBuilder1_Release(builder1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
win_skip("IDWriteFontSetBuilder1 is not available.\n");
|
||||||
IDWriteFontSetBuilder_Release(builder);
|
IDWriteFontSetBuilder_Release(builder);
|
||||||
|
|
||||||
hr = IDWriteFactory3_GetSystemFontCollection(factory, FALSE, &collection, FALSE);
|
hr = IDWriteFactory3_GetSystemFontCollection(factory, FALSE, &collection, FALSE);
|
||||||
|
@ -9395,8 +9434,8 @@ static void test_fontsetbuilder(void)
|
||||||
ok(hr == S_OK, "Failed to get family, hr %#x.\n", hr);
|
ok(hr == S_OK, "Failed to get family, hr %#x.\n", hr);
|
||||||
|
|
||||||
fontcount = IDWriteFontFamily1_GetFontCount(family);
|
fontcount = IDWriteFontFamily1_GetFontCount(family);
|
||||||
for (j = 0; j < fontcount; j++) {
|
for (j = 0; j < fontcount; ++j)
|
||||||
IDWriteFontFaceReference *ref, *ref2;
|
{
|
||||||
IDWriteFontSet *fontset;
|
IDWriteFontSet *fontset;
|
||||||
UINT32 setcount, id;
|
UINT32 setcount, id;
|
||||||
|
|
||||||
|
@ -9428,6 +9467,12 @@ static void test_fontsetbuilder(void)
|
||||||
hr = IDWriteFontSet_GetFontFaceReference(fontset, 0, &ref2);
|
hr = IDWriteFontSet_GetFontFaceReference(fontset, 0, &ref2);
|
||||||
ok(hr == S_OK, "Failed to get font face reference, hr %#x.\n", hr);
|
ok(hr == S_OK, "Failed to get font face reference, hr %#x.\n", hr);
|
||||||
ok(ref2 != ref, "Unexpected reference.\n");
|
ok(ref2 != ref, "Unexpected reference.\n");
|
||||||
|
|
||||||
|
hr = IDWriteFontSet_GetFontFaceReference(fontset, 0, &ref3);
|
||||||
|
ok(hr == S_OK, "Failed to get font face reference, hr %#x.\n", hr);
|
||||||
|
ok(ref2 != ref3, "Unexpected reference.\n");
|
||||||
|
|
||||||
|
IDWriteFontFaceReference_Release(ref3);
|
||||||
IDWriteFontFaceReference_Release(ref2);
|
IDWriteFontFaceReference_Release(ref2);
|
||||||
|
|
||||||
for (id = DWRITE_FONT_PROPERTY_ID_FAMILY_NAME; id < DWRITE_FONT_PROPERTY_ID_TOTAL; ++id)
|
for (id = DWRITE_FONT_PROPERTY_ID_FAMILY_NAME; id < DWRITE_FONT_PROPERTY_ID_TOTAL; ++id)
|
||||||
|
@ -9499,8 +9544,8 @@ static void test_fontsetbuilder(void)
|
||||||
|
|
||||||
IDWriteFontCollection1_Release(collection);
|
IDWriteFontCollection1_Release(collection);
|
||||||
|
|
||||||
ref = IDWriteFactory3_Release(factory);
|
refcount = IDWriteFactory3_Release(factory);
|
||||||
ok(ref == 0, "factory not released, %u\n", ref);
|
ok(!refcount, "Factory not released, %u.\n", refcount);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_font_resource(void)
|
static void test_font_resource(void)
|
||||||
|
@ -9805,6 +9850,112 @@ static void test_GetVerticalGlyphVariants(void)
|
||||||
ok(!refcount, "Factory not released, refcount %u.\n", refcount);
|
ok(!refcount, "Factory not released, refcount %u.\n", refcount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HANDLE get_collection_expiration_event(IDWriteFontCollection *collection)
|
||||||
|
{
|
||||||
|
IDWriteFontCollection3 *collection3;
|
||||||
|
HANDLE event;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
hr = IDWriteFontCollection_QueryInterface(collection, &IID_IDWriteFontCollection3, (void **)&collection3);
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
event = IDWriteFontCollection3_GetExpirationEvent(collection3);
|
||||||
|
IDWriteFontCollection3_Release(collection3);
|
||||||
|
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_expiration_event(void)
|
||||||
|
{
|
||||||
|
IDWriteFontCollection *collection, *collection2;
|
||||||
|
IDWriteFontCollection3 *collection3;
|
||||||
|
IDWriteFactory *factory, *factory2;
|
||||||
|
unsigned int refcount;
|
||||||
|
HANDLE event, event2;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
factory = create_factory();
|
||||||
|
|
||||||
|
hr = IDWriteFactory_GetSystemFontCollection(factory, &collection, FALSE);
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = IDWriteFontCollection_QueryInterface(collection, &IID_IDWriteFontCollection3, (void **)&collection3);
|
||||||
|
if (FAILED(hr))
|
||||||
|
{
|
||||||
|
win_skip("Expiration events are not supported.\n");
|
||||||
|
IDWriteFontCollection_Release(collection);
|
||||||
|
IDWriteFactory_Release(factory);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
IDWriteFontCollection3_Release(collection3);
|
||||||
|
|
||||||
|
event = get_collection_expiration_event(collection);
|
||||||
|
todo_wine
|
||||||
|
ok(!!event, "Unexpected event handle.\n");
|
||||||
|
|
||||||
|
/* Compare handles with another isolated factory. */
|
||||||
|
factory2 = create_factory();
|
||||||
|
|
||||||
|
hr = IDWriteFactory_GetSystemFontCollection(factory2, &collection2, FALSE);
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
event2 = get_collection_expiration_event(collection2);
|
||||||
|
todo_wine {
|
||||||
|
ok(!!event2, "Unexpected event handle.\n");
|
||||||
|
ok(event != event2, "Unexpected event handle.\n");
|
||||||
|
}
|
||||||
|
IDWriteFontCollection_Release(collection2);
|
||||||
|
|
||||||
|
IDWriteFontCollection_Release(collection);
|
||||||
|
|
||||||
|
refcount = IDWriteFactory_Release(factory2);
|
||||||
|
ok(!refcount, "Unexpected factory refcount %u.\n", refcount);
|
||||||
|
refcount = IDWriteFactory_Release(factory);
|
||||||
|
ok(!refcount, "Unexpected factory refcount %u.\n", refcount);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_family_font_set(void)
|
||||||
|
{
|
||||||
|
IDWriteFontCollection *collection;
|
||||||
|
IDWriteFontFamily2 *family2;
|
||||||
|
IDWriteFontFamily *family;
|
||||||
|
IDWriteFactory *factory;
|
||||||
|
unsigned int refcount;
|
||||||
|
IDWriteFontSet1 *fontset, *fontset2;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
factory = create_factory();
|
||||||
|
|
||||||
|
hr = IDWriteFactory_GetSystemFontCollection(factory, &collection, FALSE);
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = IDWriteFontCollection_GetFontFamily(collection, 0, &family);
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
|
if (SUCCEEDED(IDWriteFontFamily_QueryInterface(family, &IID_IDWriteFontFamily2, (void **)&family2)))
|
||||||
|
{
|
||||||
|
hr = IDWriteFontFamily2_GetFontSet(family2, &fontset);
|
||||||
|
todo_wine
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
hr = IDWriteFontFamily2_GetFontSet(family2, &fontset2);
|
||||||
|
todo_wine
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
ok(fontset != fontset2, "Unexpected fontset instance.\n");
|
||||||
|
IDWriteFontSet1_Release(fontset2);
|
||||||
|
IDWriteFontSet1_Release(fontset);
|
||||||
|
}
|
||||||
|
IDWriteFontFamily2_Release(family2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
win_skip("IDWriteFontFamily2 is not supported.\n");
|
||||||
|
|
||||||
|
IDWriteFontFamily_Release(family);
|
||||||
|
IDWriteFontCollection_Release(collection);
|
||||||
|
|
||||||
|
refcount = IDWriteFactory_Release(factory);
|
||||||
|
ok(!refcount, "Unexpected factory refcount %u.\n", refcount);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(font)
|
START_TEST(font)
|
||||||
{
|
{
|
||||||
IDWriteFactory *factory;
|
IDWriteFactory *factory;
|
||||||
|
@ -9875,6 +10026,8 @@ START_TEST(font)
|
||||||
test_font_resource();
|
test_font_resource();
|
||||||
test_IsColorFont();
|
test_IsColorFont();
|
||||||
test_GetVerticalGlyphVariants();
|
test_GetVerticalGlyphVariants();
|
||||||
|
test_expiration_event();
|
||||||
|
test_family_font_set();
|
||||||
|
|
||||||
IDWriteFactory_Release(factory);
|
IDWriteFactory_Release(factory);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue