Module: wine Branch: master Commit: 2bdf470177c1729bd15c369283fff39b67e4d530 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2bdf470177c1729bd15c369283...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Wed Dec 9 13:32:21 2015 +0300
dwrite/tests: Some tests for fallback builder.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/dwrite/tests/layout.c | 157 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+)
diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c index d98ffea..6ea2734 100644 --- a/dlls/dwrite/tests/layout.c +++ b/dlls/dwrite/tests/layout.c @@ -3903,6 +3903,162 @@ if (hr == S_OK) { IDWriteFactory2_Release(factory2); }
+static void test_FontFallbackBuilder(void) +{ + static const WCHAR localeW[] = {'l','o','c','a','l','e',0}; + static const WCHAR strW[] = {'A',0}; + IDWriteFontFallbackBuilder *builder; + IDWriteFontFallback *fallback; + DWRITE_UNICODE_RANGE range; + IDWriteFactory2 *factory2; + IDWriteFactory *factory; + const WCHAR *familyW; + UINT32 mappedlength; + IDWriteFont *font; + FLOAT scale; + HRESULT hr; + + factory = create_factory(); + + hr = IDWriteFactory_QueryInterface(factory, &IID_IDWriteFactory2, (void**)&factory2); + IDWriteFactory_Release(factory); + + if (factory2) + hr = IDWriteFactory2_CreateFontFallbackBuilder(factory2, &builder); + + if (hr != S_OK) { + skip("IDWriteFontFallbackBuilder is not supported\n"); + return; + } + + hr = IDWriteFontFallbackBuilder_CreateFontFallback(builder, &fallback); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteFontFallbackBuilder_AddMapping(builder, NULL, 0, NULL, 0, NULL, NULL, NULL, 0.0f); + ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); + + range.first = 'A'; + range.last = 'B'; + hr = IDWriteFontFallbackBuilder_AddMapping(builder, &range, 0, NULL, 0, NULL, NULL, NULL, 0.0f); + ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); + + hr = IDWriteFontFallbackBuilder_AddMapping(builder, &range, 0, NULL, 0, NULL, NULL, NULL, 1.0f); + ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); + + /* negative scaling factor */ + range.first = range.last = 0; + familyW = g_blahfontW; + hr = IDWriteFontFallbackBuilder_AddMapping(builder, &range, 1, &familyW, 1, NULL, NULL, NULL, -1.0f); + ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); + + /* empty range */ + range.first = range.last = 0; + familyW = g_blahfontW; + hr = IDWriteFontFallbackBuilder_AddMapping(builder, &range, 1, &familyW, 1, NULL, NULL, NULL, 1.0f); + ok(hr == S_OK, "got 0x%08x\n", hr); + + range.first = range.last = 0; + hr = IDWriteFontFallbackBuilder_AddMapping(builder, &range, 1, &familyW, 1, NULL, NULL, NULL, 2.0f); + ok(hr == S_OK, "got 0x%08x\n", hr); + + range.first = range.last = 'A'; + hr = IDWriteFontFallbackBuilder_AddMapping(builder, &range, 1, &familyW, 1, NULL, NULL, NULL, 3.0f); + ok(hr == S_OK, "got 0x%08x\n", hr); + + range.first = 'B'; + range.last = 'A'; + hr = IDWriteFontFallbackBuilder_AddMapping(builder, &range, 1, &familyW, 1, NULL, NULL, NULL, 4.0f); + ok(hr == S_OK, "got 0x%08x\n", hr); + +if (0) /* crashes on native */ + hr = IDWriteFontFallbackBuilder_CreateFontFallback(builder, NULL); + + hr = IDWriteFontFallbackBuilder_CreateFontFallback(builder, &fallback); + ok(hr == S_OK, "got 0x%08x\n", hr); + + /* fallback font missing from system collection */ + g_source = strW; + mappedlength = 0; + scale = 0.0f; + font = (void*)0xdeadbeef; + hr = IDWriteFontFallback_MapCharacters(fallback, &analysissource, 0, 1, NULL, NULL, DWRITE_FONT_WEIGHT_NORMAL, + DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, &mappedlength, &font, &scale); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(mappedlength == 1, "got %u\n", mappedlength); + ok(scale == 1.0f, "got %f\n", scale); + ok(font == NULL, "got %p\n", font); + + IDWriteFontFallback_Release(fallback); + + /* remap with custom collection */ + range.first = range.last = 'A'; + hr = IDWriteFontFallbackBuilder_AddMapping(builder, &range, 1, &familyW, 1, &fallbackcollection, NULL, NULL, 5.0f); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteFontFallbackBuilder_CreateFontFallback(builder, &fallback); + ok(hr == S_OK, "got 0x%08x\n", hr); + + g_source = strW; + mappedlength = 0; + scale = 0.0f; + font = NULL; + hr = IDWriteFontFallback_MapCharacters(fallback, &analysissource, 0, 1, NULL, NULL, DWRITE_FONT_WEIGHT_NORMAL, + DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, &mappedlength, &font, &scale); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(mappedlength == 1, "got %u\n", mappedlength); + ok(scale == 5.0f, "got %f\n", scale); + ok(font != NULL, "got %p\n", font); + IDWriteFont_Release(font); + + IDWriteFontFallback_Release(fallback); + + range.first = 'B'; + range.last = 'A'; + hr = IDWriteFontFallbackBuilder_AddMapping(builder, &range, 1, &familyW, 1, &fallbackcollection, NULL, NULL, 6.0f); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteFontFallbackBuilder_CreateFontFallback(builder, &fallback); + ok(hr == S_OK, "got 0x%08x\n", hr); + + g_source = strW; + mappedlength = 0; + scale = 0.0f; + font = NULL; + hr = IDWriteFontFallback_MapCharacters(fallback, &analysissource, 0, 1, NULL, NULL, DWRITE_FONT_WEIGHT_NORMAL, + DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, &mappedlength, &font, &scale); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(mappedlength == 1, "got %u\n", mappedlength); + ok(scale == 5.0f, "got %f\n", scale); + ok(font != NULL, "got %p\n", font); + IDWriteFont_Release(font); + + IDWriteFontFallback_Release(fallback); + + /* explicit locale */ + range.first = 'A'; + range.last = 'B'; + hr = IDWriteFontFallbackBuilder_AddMapping(builder, &range, 1, &familyW, 1, &fallbackcollection, localeW, NULL, 6.0f); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteFontFallbackBuilder_CreateFontFallback(builder, &fallback); + ok(hr == S_OK, "got 0x%08x\n", hr); + + g_source = strW; + mappedlength = 0; + scale = 0.0f; + font = NULL; + hr = IDWriteFontFallback_MapCharacters(fallback, &analysissource, 0, 1, NULL, NULL, DWRITE_FONT_WEIGHT_NORMAL, + DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, &mappedlength, &font, &scale); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(mappedlength == 1, "got %u\n", mappedlength); + ok(scale == 5.0f, "got %f\n", scale); + ok(font != NULL, "got %p\n", font); + IDWriteFont_Release(font); + + IDWriteFontFallbackBuilder_Release(builder); + IDWriteFactory2_Release(factory2); +} + START_TEST(layout) { static const WCHAR ctrlstrW[] = {0x202a,0}; @@ -3949,6 +4105,7 @@ START_TEST(layout) test_pixelsnapping(); test_SetWordWrapping(); test_MapCharacters(); + test_FontFallbackBuilder();
IDWriteFactory_Release(factory); }