sw/qa/extras/embedded_fonts/embedded_fonts.cxx | 74 +++++++++++++++++++++++++ sw/qa/extras/ooxmlexport/ooxmlexport25.cxx | 35 ----------- sw/qa/extras/uiwriter/uiwriter9.cxx | 50 ---------------- 3 files changed, 74 insertions(+), 85 deletions(-)
New commits: commit 09e164788591a9f0e4e678e83ef7784c1cc3ad4f Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Wed Aug 13 09:45:11 2025 +0500 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Mon Aug 18 09:09:14 2025 +0200 Move some tests to sw_embedded_fonts Change-Id: I19347e42f00d3534a33d5e8cae31fccb3e00f35e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189466 Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> Tested-by: Jenkins (cherry picked from commit c96dd50bac82fb9341e2c979cb509182b460688f) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189469 Reviewed-by: Miklos Vajna <vmik...@collabora.com> Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> diff --git a/sw/qa/extras/uiwriter/data/embed-unrestricted1.odt b/sw/qa/extras/embedded_fonts/data/embed-unrestricted1.odt similarity index 100% rename from sw/qa/extras/uiwriter/data/embed-unrestricted1.odt rename to sw/qa/extras/embedded_fonts/data/embed-unrestricted1.odt diff --git a/sw/qa/extras/uiwriter/data/embed-unrestricted2.odt b/sw/qa/extras/embedded_fonts/data/embed-unrestricted2.odt similarity index 100% rename from sw/qa/extras/uiwriter/data/embed-unrestricted2.odt rename to sw/qa/extras/embedded_fonts/data/embed-unrestricted2.odt diff --git a/sw/qa/extras/ooxmlexport/data/font_used_in_header_only.fodt b/sw/qa/extras/embedded_fonts/data/font_used_in_header_only.fodt similarity index 100% rename from sw/qa/extras/ooxmlexport/data/font_used_in_header_only.fodt rename to sw/qa/extras/embedded_fonts/data/font_used_in_header_only.fodt diff --git a/sw/qa/extras/embedded_fonts/embedded_fonts.cxx b/sw/qa/extras/embedded_fonts/embedded_fonts.cxx index c0c26a44df8f..bcbac3f13cca 100644 --- a/sw/qa/extras/embedded_fonts/embedded_fonts.cxx +++ b/sw/qa/extras/embedded_fonts/embedded_fonts.cxx @@ -335,6 +335,80 @@ CPPUNIT_TEST_FIXTURE(Test, testOpenDOCXWithRestrictedEmbeddedFont) } } +#if !defined(MACOSX) +CPPUNIT_TEST_FIXTURE(Test, testTdf167849) +{ + // Given two documents with embedded fonts, that will not require substitution, if present: + + FontMappingUseListener fontMappingData; + + // Load the first document + createSwDoc("embed-unrestricted1.odt"); + // At this point, 'Manbow Solid' embedded font is loaded + std::swap(mxComponent, mxComponent2); // keep it from unloading upon the next load + + fontMappingData.checkpoint(); + CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Manbow Solid")); + CPPUNIT_ASSERT(!fontMappingData.wasSubstituted(u"Manbow Solid")); + + // Load the second document + createSwDoc("embed-unrestricted2.odt"); + // At this point, 'Unsteady Oversteer' font is also loaded + + fontMappingData.checkpoint(); + CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Unsteady Oversteer")); + CPPUNIT_ASSERT(!fontMappingData.wasSubstituted(u"Unsteady Oversteer")); + + // Re-layout both documents; both fonts must still be loaded + calcLayout(true); + std::swap(mxComponent, mxComponent2); + calcLayout(true); + + fontMappingData.checkpoint(); + CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Manbow Solid")); + // Without the fix, it would fail, because loading the second document unregistered + // the embedded font from the first one. + CPPUNIT_ASSERT(!fontMappingData.wasSubstituted(u"Manbow Solid")); + CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Unsteady Oversteer")); + CPPUNIT_ASSERT(!fontMappingData.wasSubstituted(u"Unsteady Oversteer")); +} +#endif + +CPPUNIT_TEST_FIXTURE(Test, testFontEmbeddingDOCX) +{ + createSwDoc("font_used_in_header_only.fodt"); + uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY_THROW); + uno::Reference<beans::XPropertySet> xProps( + xFactory->createInstance(u"com.sun.star.document.Settings"_ustr), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(uno::Any(true), xProps->getPropertyValue(u"EmbedFonts"_ustr)); + + save(u"Office Open XML Text"_ustr); + + xmlDocUniquePtr pXml = parseExport(u"word/fontTable.xml"_ustr); + + // Test that DejaVu Sans is embedded + assertXPath(pXml, "/w:fonts/w:font[@w:name='DejaVu Sans']/w:embedRegular"); + assertXPath(pXml, "/w:fonts/w:font[@w:name='DejaVu Sans']/w:embedBold"); + assertXPath(pXml, "/w:fonts/w:font[@w:name='DejaVu Sans']/w:embedItalic"); +// It is strange that DejaVu is different on Linux: see e.g. tdf166627 in odfexport2.cxx +#if defined(_WIN32) || defined(MACOSX) + assertXPath(pXml, "/w:fonts/w:font[@w:name='DejaVu Sans']/w:embedBoldItalic"); +#endif + + // Test that common fonts (here: Liberation Serif, Liberation Sans) are not embedded + assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Serif']"); + assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Serif']/w:embedRegular", 0); + assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Serif']/w:embedBold", 0); + assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Serif']/w:embedItalic", 0); + assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Serif']/w:embedBoldItalic", 0); + + assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Sans']"); + assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Sans']/w:embedRegular", 0); + assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Sans']/w:embedBold", 0); + assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Sans']/w:embedItalic", 0); + assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Sans']/w:embedBoldItalic", 0); +} + } // end of anonymous namespace CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport25.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport25.cxx index bdbc66cdd764..895eb8879719 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport25.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport25.cxx @@ -176,41 +176,6 @@ CPPUNIT_TEST_FIXTURE(Test, testFloatingTableAnchorPosExport) CPPUNIT_ASSERT_EQUAL(u"D"_ustr, getXPathContent(pXmlDoc, "//w:body/w:p/w:r/w:t")); } -CPPUNIT_TEST_FIXTURE(Test, testFontEmbeddingDOCX) -{ - createSwDoc("font_used_in_header_only.fodt"); - uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY_THROW); - uno::Reference<beans::XPropertySet> xProps( - xFactory->createInstance(u"com.sun.star.document.Settings"_ustr), uno::UNO_QUERY_THROW); - CPPUNIT_ASSERT_EQUAL(uno::Any(true), xProps->getPropertyValue(u"EmbedFonts"_ustr)); - - save(mpFilter); - - xmlDocUniquePtr pXml = parseExport(u"word/fontTable.xml"_ustr); - - // Test that DejaVu Sans is embedded - assertXPath(pXml, "/w:fonts/w:font[@w:name='DejaVu Sans']/w:embedRegular"); - assertXPath(pXml, "/w:fonts/w:font[@w:name='DejaVu Sans']/w:embedBold"); - assertXPath(pXml, "/w:fonts/w:font[@w:name='DejaVu Sans']/w:embedItalic"); -// It is strange that DejaVu is different on Linux: see e.g. tdf166627 in odfexport2.cxx -#if defined(_WIN32) || defined(MACOSX) - assertXPath(pXml, "/w:fonts/w:font[@w:name='DejaVu Sans']/w:embedBoldItalic"); -#endif - - // Test that common fonts (here: Liberation Serif, Liberation Sans) are not embedded - assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Serif']"); - assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Serif']/w:embedRegular", 0); - assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Serif']/w:embedBold", 0); - assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Serif']/w:embedItalic", 0); - assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Serif']/w:embedBoldItalic", 0); - - assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Sans']"); - assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Sans']/w:embedRegular", 0); - assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Sans']/w:embedBold", 0); - assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Sans']/w:embedItalic", 0); - assertXPath(pXml, "/w:fonts/w:font[@w:name='Liberation Sans']/w:embedBoldItalic", 0); -} - } // end of anonymous namespace CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/qa/extras/uiwriter/uiwriter9.cxx b/sw/qa/extras/uiwriter/uiwriter9.cxx index 47736650b500..883db6d14a77 100644 --- a/sw/qa/extras/uiwriter/uiwriter9.cxx +++ b/sw/qa/extras/uiwriter/uiwriter9.cxx @@ -1162,56 +1162,6 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf167006) getSwDocShell()->GetWrtShell()->LaunchOLEObj(); } -#if !defined(MACOSX) -CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf167849) -{ - auto assertNoSubstitution = [](const uno::Reference<awt::XFontMappingUse>& xUse, int pass) { - const auto trackingData = xUse->finishTrackingFontMappingUse(); - for (const auto& element : trackingData) - { - for (const auto& used : element.usedFonts) - { - OUString message = "Pass " + OUString::number(pass) + ": " + element.originalFont - + " substituted with " + used; - CPPUNIT_ASSERT_MESSAGE(message.toUtf8().getStr(), - used.startsWith(element.originalFont)); - } - } - xUse->startTrackingFontMappingUse(); - }; - - auto xFontMappingUse = awt::Toolkit::create(comphelper::getProcessComponentContext()) - .queryThrow<awt::XFontMappingUse>(); - xFontMappingUse->startTrackingFontMappingUse(); - - // Given two documents with embedded fonts, that will not require substitution, if present: - - // Load the first document - createSwDoc("embed-unrestricted1.odt"); - // At this point, 'Manbow Solid' embedded font is loaded - std::swap(mxComponent, mxComponent2); // keep it from unloading upon the next load - - assertNoSubstitution(xFontMappingUse, 1); - - // Load the second document - createSwDoc("embed-unrestricted2.odt"); - // At this point, 'Unsteady Oversteer' font is also loaded - - assertNoSubstitution(xFontMappingUse, 2); - - // Re-layout both documents; both fonts must still be loaded - calcLayout(true); - std::swap(mxComponent, mxComponent2); - calcLayout(true); - - // Without the fix, it would fail with - // - Pass 3: Manbow Solid substituted with Liberation Serif/Regular - // because loading the second document unregistered the embedded font from the first one. - assertNoSubstitution(xFontMappingUse, 3); - xFontMappingUse->finishTrackingFontMappingUse(); -} -#endif - } // end of anonymous namespace CPPUNIT_PLUGIN_IMPLEMENT();