sw/qa/extras/embedded_fonts/embedded_fonts.cxx |   77 +++++++++++++++++++++++++
 sw/qa/extras/ooxmlexport/ooxmlexport25.cxx     |   35 -----------
 sw/qa/extras/uiwriter/uiwriter10.cxx           |   50 ----------------
 3 files changed, 77 insertions(+), 85 deletions(-)

New commits:
commit 63dbc286b88fde128227fb5c03fd611f14578af8
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Wed Aug 13 09:56:37 2025 +0500
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Wed Aug 13 07:57:19 2025 +0200

    Add a SAL_INFO substitution output in the tests
    
    Change-Id: I638e3f1bb46d2efe230c76b80d02097ec4c62415
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189467
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/sw/qa/extras/embedded_fonts/embedded_fonts.cxx 
b/sw/qa/extras/embedded_fonts/embedded_fonts.cxx
index bcbac3f13cca..c111b11a66fe 100644
--- a/sw/qa/extras/embedded_fonts/embedded_fonts.cxx
+++ b/sw/qa/extras/embedded_fonts/embedded_fonts.cxx
@@ -145,7 +145,10 @@ public:
                 std::u16string_view rest;
                 if (!used.startsWith(element.originalFont, &rest)
                     || (!rest.empty() && !rest.starts_with('/')))
+                {
+                    SAL_INFO("test", element.originalFont << " substituted 
with " << used);
                     return true;
+                }
             }
         }
         return false;
commit c96dd50bac82fb9341e2c979cb509182b460688f
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Wed Aug 13 09:45:11 2025 +0500
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Wed Aug 13 07:57:13 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

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 43440ead4814..b7681ff523d3 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport25.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport25.cxx
@@ -274,41 +274,6 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf150822)
     fnVerify();
 }
 
-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/uiwriter10.cxx 
b/sw/qa/extras/uiwriter/uiwriter10.cxx
index dad4bda7b3d1..1ee3144b5a62 100644
--- a/sw/qa/extras/uiwriter/uiwriter10.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter10.cxx
@@ -2098,56 +2098,6 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, testTdf166012)
                          getProperty<short>(getRun(getParagraph(1), 1), 
u"CharScriptHint"_ustr));
 }
 
-#if !defined(MACOSX)
-CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, 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
-
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Reply via email to