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();
 

Reply via email to