vcl/CppunitTest_vcl_pdfexport.mk | 5 +++++ vcl/source/outdev/font.cxx | 16 ++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-)
New commits: commit b04507b6cc36de337b6aae67ed51fd36cc4a3482 Author: Caolán McNamara <[email protected]> AuthorDate: Sat Aug 20 13:38:38 2022 +0100 Commit: Caolán McNamara <[email protected]> CommitDate: Mon Aug 22 16:13:44 2022 +0200 ensure no font/glyph fallback is happening for repeatable results Change-Id: I7098ea59f1da2c80cde138109dd6a5c8e5b7e997 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138681 Tested-by: Jenkins Reviewed-by: Caolán McNamara <[email protected]> diff --git a/vcl/CppunitTest_vcl_pdfexport.mk b/vcl/CppunitTest_vcl_pdfexport.mk index 2721d15e410b..1810d69042e0 100644 --- a/vcl/CppunitTest_vcl_pdfexport.mk +++ b/vcl/CppunitTest_vcl_pdfexport.mk @@ -43,6 +43,11 @@ $(eval $(call gb_CppunitTest_use_rdb,vcl_pdfexport,services)) $(eval $(call gb_CppunitTest_use_configuration,vcl_pdfexport)) +# assert if font/glyph fallback occurs +$(call gb_CppunitTest_get_target,vcl_pdfexport): \ + EXTRA_ENV_VARS := \ + SAL_ABORT_ON_NON_APPLICATION_FONT_USE=1 + $(eval $(call gb_CppunitTest_use_more_fonts,vcl_pdfexport)) # vim: set noet sw=4 ts=4: diff --git a/vcl/source/outdev/font.cxx b/vcl/source/outdev/font.cxx index af0faea6dd74..e334d1bb1fb9 100644 --- a/vcl/source/outdev/font.cxx +++ b/vcl/source/outdev/font.cxx @@ -613,11 +613,14 @@ void OutputDevice::RemoveFontsSubstitute() vcl::Font OutputDevice::GetDefaultFont( DefaultFontType nType, LanguageType eLang, GetDefaultFontFlags nFlags, const OutputDevice* pOutDev ) { - if (!pOutDev && !utl::ConfigManager::IsFuzzing()) // default is NULL + static bool bFuzzing = utl::ConfigManager::IsFuzzing(); + static bool bAbortOnFontSubstitute = getenv("SAL_ABORT_ON_NON_APPLICATION_FONT_USE") != nullptr; + + if (!pOutDev && !bFuzzing) // default is NULL pOutDev = Application::GetDefaultDevice(); OUString aSearch; - if (!utl::ConfigManager::IsFuzzing()) + if (!bFuzzing) { LanguageTag aLanguageTag( ( eLang == LANGUAGE_NONE || eLang == LANGUAGE_SYSTEM || eLang == LANGUAGE_DONTKNOW ) ? @@ -631,6 +634,15 @@ vcl::Font OutputDevice::GetDefaultFont( DefaultFontType nType, LanguageType eLan aSearch = aDefault; else aSearch = rDefaults.getUserInterfaceFont( aLanguageTag ); // use the UI font as a fallback + + // during SAL_ABORT_ON_NON_APPLICATION_FONT_USE cppunit tests we don't have any bundled fonts + // that support the default CTL and CJK languages of Hindi and Chinese, so just pick something + // (unsuitable) that does exist, if they get used, then glyph fallback will trigger std::abort + if (bAbortOnFontSubstitute) + { + if (eLang == LANGUAGE_HINDI || eLang == LANGUAGE_CHINESE_SIMPLIFIED) + aSearch = "DejaVu Sans"; + } } else aSearch = "Liberation Serif";
