sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx |    5 
 sw/qa/core/text/text.cxx                                 |    2 
 sw/qa/core/theme/ThemeTest.cxx                           |    1 
 sw/qa/extras/embedded_fonts/embedded_fonts.cxx           |  327 +++++------
 sw/qa/extras/htmlexport/htmlexport.cxx                   |   14 
 sw/qa/extras/htmlexport/htmlexport2.cxx                  |   77 +-
 sw/qa/extras/layout/layout.cxx                           |    8 
 sw/qa/extras/layout/layout4.cxx                          |   45 +
 sw/qa/extras/layout/layout5.cxx                          |    5 
 sw/qa/extras/mailmerge/mailmerge.cxx                     |    1 
 sw/qa/extras/mailmerge/mailmergetestbase.cxx             |    1 
 sw/qa/extras/odfexport/odfexport4.cxx                    |  124 ++--
 sw/qa/extras/odfimport/odfimport.cxx                     |    1 
 sw/qa/extras/ooxmlexport/ooxmlexport14.cxx               |    1 
 sw/qa/extras/ooxmlexport/ooxmlexport21.cxx               |   18 
 sw/qa/extras/uiwriter/uiwriter.cxx                       |  158 +++--
 sw/qa/extras/uiwriter/uiwriter11.cxx                     |  418 +++++++--------
 sw/qa/extras/uiwriter/uiwriter3.cxx                      |    4 
 sw/qa/extras/uiwriter/uiwriter4.cxx                      |   61 +-
 sw/qa/extras/uiwriter/uiwriter8.cxx                      |    4 
 sw/qa/uibase/fldui/fldui.cxx                             |   85 +--
 sw/qa/unit/swmodeltestbase.cxx                           |    2 
 22 files changed, 753 insertions(+), 609 deletions(-)

New commits:
commit fe2eae0cde585c55b64203ed9bcef8c32d8ffb24
Author:     Xisco Fauli <[email protected]>
AuthorDate: Mon Feb 9 13:04:15 2026 +0100
Commit:     Xisco Fauli <[email protected]>
CommitDate: Mon Feb 16 22:42:57 2026 +0100

    sw: only load one document per test
    
    Change-Id: I3277454a2f2b73fffcff79ad17b2a9d32e02847d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/198979
    Reviewed-by: Xisco Fauli <[email protected]>
    Tested-by: Jenkins

diff --git a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx 
b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
index d701b7437ce8..52145cca082f 100644
--- a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
+++ b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
@@ -340,7 +340,7 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, 
testStylesWithHeader)
 
 // Text contrast tests
 // see https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html
-CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckTextContrast)
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckTextContrast_Fail)
 {
     // first test doc has these issues:
     // * normal text with contrast < 4.5
@@ -355,7 +355,10 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, 
testCheckTextContrast)
     CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_CONTRAST, 
aIssues[0]->m_eIssueID);
     CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_CONTRAST, 
aIssues[1]->m_eIssueID);
     CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_CONTRAST, 
aIssues[2]->m_eIssueID);
+}
 
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckTextContrast_Ok)
+{
     // second test doc has large text with contrast between 3.0 and 4.5,
     // which is sufficient for large text
     // both of these are considered large text according to the spec:
diff --git a/sw/qa/core/text/text.cxx b/sw/qa/core/text/text.cxx
index 75680d8c7ad8..8c2bbd141719 100644
--- a/sw/qa/core/text/text.cxx
+++ b/sw/qa/core/text/text.cxx
@@ -1409,6 +1409,7 @@ CPPUNIT_TEST_FIXTURE(SwCoreTextTest, 
testTdf41652NBSPWidth)
 
         nSectionAfterNBSPX_legacy_leftAligned = getXPath(pXmlDoc, 
"//textarray[4]", "x").toInt32();
         nSectionAfterNBSPX_legacy_justified = getXPath(pXmlDoc, 
"//textarray[10]", "x").toInt32();
+        dispose();
     }
 
     // Measure the X of sections after NBSPs in a file with the option enabled
@@ -1423,6 +1424,7 @@ CPPUNIT_TEST_FIXTURE(SwCoreTextTest, 
testTdf41652NBSPWidth)
             = getXPath(pXmlDoc, "//textarray[4]", "x").toInt32();
         nSectionAfterNBSPX_optionDisabled_justified
             = getXPath(pXmlDoc, "//textarray[10]", "x").toInt32();
+        dispose();
     }
 
     // Measure the X of the sections after NBSPs in a file with the option 
enabled
diff --git a/sw/qa/core/theme/ThemeTest.cxx b/sw/qa/core/theme/ThemeTest.cxx
index 12ecc9cd6460..854ef565e4d9 100644
--- a/sw/qa/core/theme/ThemeTest.cxx
+++ b/sw/qa/core/theme/ThemeTest.cxx
@@ -619,6 +619,7 @@ CPPUNIT_TEST_FIXTURE(SwCoreThemeTest, 
testTdf162715_ownTransferable)
         css::uno::Reference<css::datatransfer::XTransferableSupplier> xTS(
             xModel->getCurrentController(), css::uno::UNO_QUERY_THROW);
         xTransferable = xTS->getTransferable();
+        dispose();
     }
     {
         // Open another document with another custom theme:
diff --git a/sw/qa/extras/embedded_fonts/embedded_fonts.cxx 
b/sw/qa/extras/embedded_fonts/embedded_fonts.cxx
index 761c2a12182f..e8449b31f3ff 100644
--- a/sw/qa/extras/embedded_fonts/embedded_fonts.cxx
+++ b/sw/qa/extras/embedded_fonts/embedded_fonts.cxx
@@ -169,179 +169,178 @@ CPPUNIT_TEST_FIXTURE(Test, 
testOpenODTWithRestrictedEmbeddedFont)
 {
     // The ODT has a restricted embedded font, referenced both from styles.xml 
and content.xml.
     // Test its loading without and with approval; and check that there are no 
double requests
-    {
-        // 1. Load and do not approve the restricted font
-        FontMappingUseListener fontMappingData;
-        rtl::Reference xInteraction(new FontInteractionHandler(false));
-        createSwDoc("embed-restricted-style+autostyle.odt",
-                    { comphelper::makePropertyValue(
-                        u"InteractionHandler"_ustr,
-                        
uno::Reference<task::XInteractionHandler>(xInteraction)) });
-
-        // It asked exactly once, even though both styles.xml and content.xml 
requested the font:
-        CPPUNIT_ASSERT_EQUAL(1, xInteraction->getRequestCount());
-        // It requested the expected font
-        CPPUNIT_ASSERT_EQUAL(u"Naftalene"_ustr, 
xInteraction->getRequestedFontName().trim());
-        // The document is editable:
-        CPPUNIT_ASSERT(!getSwDocShell()->IsReadOnly());
-
-        fontMappingData.checkpoint();
-        // The request was disapproved, and the font didn't load; so it was 
substituted:
-        CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Naftalene"));
-        CPPUNIT_ASSERT(fontMappingData.wasSubstituted(u"Naftalene"));
-
-        // Make sure that saving doesn't somehow embed the font
-        save(TestFilter::ODT);
-        xmlDocUniquePtr pXml = parseExport(u"content.xml"_ustr);
-        assertXPath(pXml, "//style:font-face[@style:name='Naftalene']");
-        assertXPath(pXml, 
"//style:font-face[@style:name='Naftalene']/svg:font-face-src", 0);
-
-        auto xZipFile = packages::zip::ZipFileAccess::createWithURL(
-            comphelper::getProcessComponentContext(), maTempFile.GetURL());
-        CPPUNIT_ASSERT(xZipFile);
-        for (const OUString& name : xZipFile->getElementNames())
-            CPPUNIT_ASSERT(name.indexOf("Naftalene") < 0);
-    }
+    // 1. Load and do not approve the restricted font
+    FontMappingUseListener fontMappingData;
+    rtl::Reference xInteraction(new FontInteractionHandler(false));
+    createSwDoc(
+        "embed-restricted-style+autostyle.odt",
+        { comphelper::makePropertyValue(u"InteractionHandler"_ustr,
+                                        
uno::Reference<task::XInteractionHandler>(xInteraction)) });
+
+    // It asked exactly once, even though both styles.xml and content.xml 
requested the font:
+    CPPUNIT_ASSERT_EQUAL(1, xInteraction->getRequestCount());
+    // It requested the expected font
+    CPPUNIT_ASSERT_EQUAL(u"Naftalene"_ustr, 
xInteraction->getRequestedFontName().trim());
+    // The document is editable:
+    CPPUNIT_ASSERT(!getSwDocShell()->IsReadOnly());
 
-    {
-        // 2. Load and approve the restricted font
-        FontMappingUseListener fontMappingData;
-        rtl::Reference xInteraction(new FontInteractionHandler(true));
-        createSwDoc("embed-restricted-style+autostyle.odt",
-                    { comphelper::makePropertyValue(
-                        u"InteractionHandler"_ustr,
-                        
uno::Reference<task::XInteractionHandler>(xInteraction)) });
-
-        // It asked exactly once, even though both styles.xml and content.xml 
requested the font:
-        CPPUNIT_ASSERT_EQUAL(1, xInteraction->getRequestCount());
-        // It requested the expected font
-        CPPUNIT_ASSERT_EQUAL(u"Naftalene"_ustr, 
xInteraction->getRequestedFontName().trim());
-        // The document loaded read-only:
-        CPPUNIT_ASSERT(getSwDocShell()->IsReadOnly());
-
-        fontMappingData.checkpoint();
-        // The request was approved, and the font loaded; no substitution 
happened:
-        CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Naftalene"));
-        CPPUNIT_ASSERT(!fontMappingData.wasSubstituted(u"Naftalene"));
-
-        // Make sure that saving doesn't somehow embed the font
-        save(TestFilter::ODT);
-        xmlDocUniquePtr pXml = parseExport(u"content.xml"_ustr);
-        assertXPath(pXml, "//style:font-face[@style:name='Naftalene']");
-        assertXPath(pXml, 
"//style:font-face[@style:name='Naftalene']/svg:font-face-src", 0);
-
-        auto xZipFile = packages::zip::ZipFileAccess::createWithURL(
-            comphelper::getProcessComponentContext(), maTempFile.GetURL());
-        CPPUNIT_ASSERT(xZipFile);
-        for (const OUString& name : xZipFile->getElementNames())
-            CPPUNIT_ASSERT(name.indexOf("Naftalene") < 0);
-    }
+    fontMappingData.checkpoint();
+    // The request was disapproved, and the font didn't load; so it was 
substituted:
+    CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Naftalene"));
+    CPPUNIT_ASSERT(fontMappingData.wasSubstituted(u"Naftalene"));
+
+    // Make sure that saving doesn't somehow embed the font
+    save(TestFilter::ODT);
+    xmlDocUniquePtr pXml = parseExport(u"content.xml"_ustr);
+    assertXPath(pXml, "//style:font-face[@style:name='Naftalene']");
+    assertXPath(pXml, 
"//style:font-face[@style:name='Naftalene']/svg:font-face-src", 0);
+
+    auto xZipFile = packages::zip::ZipFileAccess::createWithURL(
+        comphelper::getProcessComponentContext(), maTempFile.GetURL());
+    CPPUNIT_ASSERT(xZipFile);
+    for (const OUString& name : xZipFile->getElementNames())
+        CPPUNIT_ASSERT(name.indexOf("Naftalene") < 0);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testOpenODTWithRestrictedEmbeddedFont2)
+{
+    // 2. Load and approve the restricted font
+    FontMappingUseListener fontMappingData;
+    rtl::Reference xInteraction(new FontInteractionHandler(true));
+    createSwDoc(
+        "embed-restricted-style+autostyle.odt",
+        { comphelper::makePropertyValue(u"InteractionHandler"_ustr,
+                                        
uno::Reference<task::XInteractionHandler>(xInteraction)) });
+
+    // It asked exactly once, even though both styles.xml and content.xml 
requested the font:
+    CPPUNIT_ASSERT_EQUAL(1, xInteraction->getRequestCount());
+    // It requested the expected font
+    CPPUNIT_ASSERT_EQUAL(u"Naftalene"_ustr, 
xInteraction->getRequestedFontName().trim());
+    // The document loaded read-only:
+    CPPUNIT_ASSERT(getSwDocShell()->IsReadOnly());
+
+    fontMappingData.checkpoint();
+    // The request was approved, and the font loaded; no substitution happened:
+    CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Naftalene"));
+    CPPUNIT_ASSERT(!fontMappingData.wasSubstituted(u"Naftalene"));
+
+    // Make sure that saving doesn't somehow embed the font
+    save(TestFilter::ODT);
+    xmlDocUniquePtr pXml = parseExport(u"content.xml"_ustr);
+    assertXPath(pXml, "//style:font-face[@style:name='Naftalene']");
+    assertXPath(pXml, 
"//style:font-face[@style:name='Naftalene']/svg:font-face-src", 0);
+
+    auto xZipFile = packages::zip::ZipFileAccess::createWithURL(
+        comphelper::getProcessComponentContext(), maTempFile.GetURL());
+    CPPUNIT_ASSERT(xZipFile);
+    for (const OUString& name : xZipFile->getElementNames())
+        CPPUNIT_ASSERT(name.indexOf("Naftalene") < 0);
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testOpenDOCXWithRestrictedEmbeddedFont)
 {
     // The DOCX has two embedded fonts, one restricted (Naftalene), one 
unrestricted (Unsteady
     // Oversteer). Test without interaction handler, and with handler (without 
and with approval).
-    {
-        // 1. Load without interaction handler. It must not load the 
restricted font;
-        // unrestricted one must load.
-        FontMappingUseListener fontMappingData;
-        loadFromFile(u"embed-restricted+unrestricted.docx");
-
-        // The document is editable:
-        CPPUNIT_ASSERT(!getSwDocShell()->IsReadOnly());
-
-        fontMappingData.checkpoint();
-
-        // Interaction handler was absent, and the restricted font didn't 
load; it was substituted:
-        CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Naftalene"));
-        CPPUNIT_ASSERT(fontMappingData.wasSubstituted(u"Naftalene"));
-
-        // Unrestricted font was loaded and used without substitution:
-        CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Unsteady Oversteer"));
-        CPPUNIT_ASSERT(!fontMappingData.wasSubstituted(u"Unsteady Oversteer"));
-
-        // Make sure that saving doesn't somehow embed the font
-        save(TestFilter::DOCX);
-        xmlDocUniquePtr pXml = parseExport(u"word/fontTable.xml"_ustr);
-        assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']");
-        assertXPath(pXml, 
"/w:fonts/w:font[@w:name='Naftalene']/w:embedRegular", 0);
-        assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']/w:embedBold", 
0);
-        assertXPath(pXml, 
"/w:fonts/w:font[@w:name='Naftalene']/w:embedItalic", 0);
-        assertXPath(pXml, 
"/w:fonts/w:font[@w:name='Naftalene']/w:embedBoldItalic", 0);
-    }
+    // 1. Load without interaction handler. It must not load the restricted 
font;
+    // unrestricted one must load.
+    FontMappingUseListener fontMappingData;
+    loadFromFile(u"embed-restricted+unrestricted.docx");
 
-    {
-        // 2. Load and do not approve the restricted font. It must not load 
the restricted font;
-        // unrestricted one must load.
-        FontMappingUseListener fontMappingData;
-        rtl::Reference xInteraction(new FontInteractionHandler(false));
-        createSwDoc("embed-restricted+unrestricted.docx",
-                    { comphelper::makePropertyValue(
-                        u"InteractionHandler"_ustr,
-                        
uno::Reference<task::XInteractionHandler>(xInteraction)) });
-
-        CPPUNIT_ASSERT_EQUAL(1, xInteraction->getRequestCount());
-        // It requested only the expected font (no requests for 'Unsteady 
Oversteer')
-        CPPUNIT_ASSERT_EQUAL(u"Naftalene"_ustr, 
xInteraction->getRequestedFontName().trim());
-        // The document is editable:
-        CPPUNIT_ASSERT(!getSwDocShell()->IsReadOnly());
-
-        fontMappingData.checkpoint();
-
-        // The request was disapproved, and the font didn't load; so it was 
substituted:
-        CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Naftalene"));
-        CPPUNIT_ASSERT(fontMappingData.wasSubstituted(u"Naftalene"));
-
-        // Unrestricted font was loaded and used without substitution:
-        CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Unsteady Oversteer"));
-        CPPUNIT_ASSERT(!fontMappingData.wasSubstituted(u"Unsteady Oversteer"));
-
-        // Make sure that saving doesn't somehow embed the font
-        save(TestFilter::DOCX);
-        xmlDocUniquePtr pXml = parseExport(u"word/fontTable.xml"_ustr);
-        assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']");
-        assertXPath(pXml, 
"/w:fonts/w:font[@w:name='Naftalene']/w:embedRegular", 0);
-        assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']/w:embedBold", 
0);
-        assertXPath(pXml, 
"/w:fonts/w:font[@w:name='Naftalene']/w:embedItalic", 0);
-        assertXPath(pXml, 
"/w:fonts/w:font[@w:name='Naftalene']/w:embedBoldItalic", 0);
-    }
+    // The document is editable:
+    CPPUNIT_ASSERT(!getSwDocShell()->IsReadOnly());
 
-    {
-        // 3. Load and approve the restricted font. It must load both fonts, 
and open in read-only
-        // mode.
-        FontMappingUseListener fontMappingData;
-        rtl::Reference xInteraction(new FontInteractionHandler(true));
-        createSwDoc("embed-restricted+unrestricted.docx",
-                    { comphelper::makePropertyValue(
-                        u"InteractionHandler"_ustr,
-                        
uno::Reference<task::XInteractionHandler>(xInteraction)) });
-
-        CPPUNIT_ASSERT_EQUAL(1, xInteraction->getRequestCount());
-        // It requested the expected font
-        CPPUNIT_ASSERT_EQUAL(u"Naftalene"_ustr, 
xInteraction->getRequestedFontName().trim());
-        // The document loaded read-only:
-        CPPUNIT_ASSERT(getSwDocShell()->IsReadOnly());
-
-        fontMappingData.checkpoint();
-
-        // The request was approved, and the restricted font loaded; no 
substitution:
-        CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Naftalene"));
-        CPPUNIT_ASSERT(!fontMappingData.wasSubstituted(u"Naftalene"));
-
-        // Unrestricted font was loaded and used without substitution:
-        CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Unsteady Oversteer"));
-        CPPUNIT_ASSERT(!fontMappingData.wasSubstituted(u"Unsteady Oversteer"));
-
-        // Make sure that saving doesn't somehow embed the font
-        save(TestFilter::DOCX);
-        xmlDocUniquePtr pXml = parseExport(u"word/fontTable.xml"_ustr);
-        assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']");
-        assertXPath(pXml, 
"/w:fonts/w:font[@w:name='Naftalene']/w:embedRegular", 0);
-        assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']/w:embedBold", 
0);
-        assertXPath(pXml, 
"/w:fonts/w:font[@w:name='Naftalene']/w:embedItalic", 0);
-        assertXPath(pXml, 
"/w:fonts/w:font[@w:name='Naftalene']/w:embedBoldItalic", 0);
-    }
+    fontMappingData.checkpoint();
+
+    // Interaction handler was absent, and the restricted font didn't load; it 
was substituted:
+    CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Naftalene"));
+    CPPUNIT_ASSERT(fontMappingData.wasSubstituted(u"Naftalene"));
+
+    // Unrestricted font was loaded and used without substitution:
+    CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Unsteady Oversteer"));
+    CPPUNIT_ASSERT(!fontMappingData.wasSubstituted(u"Unsteady Oversteer"));
+
+    // Make sure that saving doesn't somehow embed the font
+    save(TestFilter::DOCX);
+    xmlDocUniquePtr pXml = parseExport(u"word/fontTable.xml"_ustr);
+    assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']");
+    assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']/w:embedRegular", 
0);
+    assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']/w:embedBold", 0);
+    assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']/w:embedItalic", 0);
+    assertXPath(pXml, 
"/w:fonts/w:font[@w:name='Naftalene']/w:embedBoldItalic", 0);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testOpenDOCXWithRestrictedEmbeddedFont2)
+{
+    // 2. Load and do not approve the restricted font. It must not load the 
restricted font;
+    // unrestricted one must load.
+    FontMappingUseListener fontMappingData;
+    rtl::Reference xInteraction(new FontInteractionHandler(false));
+    createSwDoc(
+        "embed-restricted+unrestricted.docx",
+        { comphelper::makePropertyValue(u"InteractionHandler"_ustr,
+                                        
uno::Reference<task::XInteractionHandler>(xInteraction)) });
+
+    CPPUNIT_ASSERT_EQUAL(1, xInteraction->getRequestCount());
+    // It requested only the expected font (no requests for 'Unsteady 
Oversteer')
+    CPPUNIT_ASSERT_EQUAL(u"Naftalene"_ustr, 
xInteraction->getRequestedFontName().trim());
+    // The document is editable:
+    CPPUNIT_ASSERT(!getSwDocShell()->IsReadOnly());
+
+    fontMappingData.checkpoint();
+
+    // The request was disapproved, and the font didn't load; so it was 
substituted:
+    CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Naftalene"));
+    CPPUNIT_ASSERT(fontMappingData.wasSubstituted(u"Naftalene"));
+
+    // Unrestricted font was loaded and used without substitution:
+    CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Unsteady Oversteer"));
+    CPPUNIT_ASSERT(!fontMappingData.wasSubstituted(u"Unsteady Oversteer"));
+
+    // Make sure that saving doesn't somehow embed the font
+    save(TestFilter::DOCX);
+    xmlDocUniquePtr pXml = parseExport(u"word/fontTable.xml"_ustr);
+    assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']");
+    assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']/w:embedRegular", 
0);
+    assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']/w:embedBold", 0);
+    assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']/w:embedItalic", 0);
+    assertXPath(pXml, 
"/w:fonts/w:font[@w:name='Naftalene']/w:embedBoldItalic", 0);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testOpenDOCXWithRestrictedEmbeddedFont3)
+{
+    // 3. Load and approve the restricted font. It must load both fonts, and 
open in read-only
+    // mode.
+    FontMappingUseListener fontMappingData;
+    rtl::Reference xInteraction(new FontInteractionHandler(true));
+    createSwDoc(
+        "embed-restricted+unrestricted.docx",
+        { comphelper::makePropertyValue(u"InteractionHandler"_ustr,
+                                        
uno::Reference<task::XInteractionHandler>(xInteraction)) });
+
+    CPPUNIT_ASSERT_EQUAL(1, xInteraction->getRequestCount());
+    // It requested the expected font
+    CPPUNIT_ASSERT_EQUAL(u"Naftalene"_ustr, 
xInteraction->getRequestedFontName().trim());
+    // The document loaded read-only:
+    CPPUNIT_ASSERT(getSwDocShell()->IsReadOnly());
+
+    fontMappingData.checkpoint();
+
+    // The request was approved, and the restricted font loaded; no 
substitution:
+    CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Naftalene"));
+    CPPUNIT_ASSERT(!fontMappingData.wasSubstituted(u"Naftalene"));
+
+    // Unrestricted font was loaded and used without substitution:
+    CPPUNIT_ASSERT(fontMappingData.wasUsed(u"Unsteady Oversteer"));
+    CPPUNIT_ASSERT(!fontMappingData.wasSubstituted(u"Unsteady Oversteer"));
+
+    // Make sure that saving doesn't somehow embed the font
+    save(TestFilter::DOCX);
+    xmlDocUniquePtr pXml = parseExport(u"word/fontTable.xml"_ustr);
+    assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']");
+    assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']/w:embedRegular", 
0);
+    assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']/w:embedBold", 0);
+    assertXPath(pXml, "/w:fonts/w:font[@w:name='Naftalene']/w:embedItalic", 0);
+    assertXPath(pXml, 
"/w:fonts/w:font[@w:name='Naftalene']/w:embedBoldItalic", 0);
 }
 
 #if !defined(MACOSX)
diff --git a/sw/qa/extras/htmlexport/htmlexport.cxx 
b/sw/qa/extras/htmlexport/htmlexport.cxx
index 51ac39e67f0d..20cfe024500f 100644
--- a/sw/qa/extras/htmlexport/htmlexport.cxx
+++ b/sw/qa/extras/htmlexport/htmlexport.cxx
@@ -593,8 +593,8 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqIfPngImg)
         comphelper::makePropertyValue(u"FilterOptions"_ustr, 
u"xhtmlns=reqif-xhtml"_ustr),
         comphelper::makePropertyValue(u"ExportImagesAsOLE"_ustr, true),
     };
-    save(TestFilter::HTML_WRITER, aStoreProperties);
-    ImportFromReqif(maTempFile.GetURL());
+    setImportFilterName(TestFilter::HTML_WRITER);
+    saveAndReload(TestFilter::HTML_WRITER, aStoreProperties);
     verify(/*bExported=*/true);
 }
 
@@ -1081,7 +1081,12 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, 
testReqifOle1PDF)
     // Save to reqif-xhtml.
     createSwDoc("pdf-ole.odt");
 
-    ExportToReqif();
+    setImportFilterName(TestFilter::HTML_WRITER);
+    saveAndReload(
+        TestFilter::HTML_WRITER,
+        {
+            comphelper::makePropertyValue(u"FilterOptions"_ustr, 
u"xhtmlns=reqif-xhtml"_ustr),
+        });
     OUString aRtfUrl = GetOlePath();
     SvMemoryStream aOle1;
     ParseOle1FromRtfUrl(aRtfUrl, aOle1);
@@ -1096,8 +1101,7 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, 
testReqifOle1PDF)
     // OLE1-in-OLE2 data, resulting in additional size.
     CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(0x99ed), 
aOle1Reader.m_nNativeDataSize);
 
-    // Now import this back and check the ODT result.
-    ImportFromReqif(maTempFile.GetURL());
+    // Now check the ODT result.
     save(TestFilter::ODT);
     uno::Reference<packages::zip::XZipFileAccess2> xNameAccess
         = 
packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory),
diff --git a/sw/qa/extras/htmlexport/htmlexport2.cxx 
b/sw/qa/extras/htmlexport/htmlexport2.cxx
index b1bea2f058f3..c02c175bc37a 100644
--- a/sw/qa/extras/htmlexport/htmlexport2.cxx
+++ b/sw/qa/extras/htmlexport/htmlexport2.cxx
@@ -375,7 +375,12 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, 
testTrailingLineBreak)
     pWrtShell->Insert(u"test
"_ustr);
 
     // When exporting to reqif-xhtml:
-    ExportToReqif();
+    setImportFilterName(TestFilter::HTML_WRITER);
+    saveAndReload(
+        TestFilter::HTML_WRITER,
+        {
+            comphelper::makePropertyValue(u"FilterOptions"_ustr, 
u"xhtmlns=reqif-xhtml"_ustr),
+        });
 
     // Then make sure that we still have a single line-break:
     xmlDocUniquePtr pXmlDoc = WrapReqifFromTempFile();
@@ -388,8 +393,6 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, 
testTrailingLineBreak)
     // Then test the import side:
     // Given an empty document:
     // When importing a <br> from reqif-xhtml:
-    ImportFromReqif(maTempFile.GetURL());
-
     // Then make sure that line-break is not lost:
     pWrtShell = getSwDocShell()->GetWrtShell();
     OUString aActual = 
pWrtShell->GetCursor()->GetPointNode().GetTextNode()->GetText();
@@ -926,12 +929,16 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, 
testTdf156647_CellPaddingRoundtrip)
         CPPUNIT_ASSERT(aTableBorder.IsDistanceValid);
     }
     // When exporting to reqif-xhtml:
-    ExportToReqif();
+    setImportFilterName(TestFilter::HTML_WRITER);
+    saveAndReload(
+        TestFilter::HTML_WRITER,
+        {
+            comphelper::makePropertyValue(u"FilterOptions"_ustr, 
u"xhtmlns=reqif-xhtml"_ustr),
+        });
     // Make sure that we export it:
     xmlDocUniquePtr pXmlDoc = WrapReqifFromTempFile();
     assertXPath(pXmlDoc, "//reqif-xhtml:table", "cellpadding", u"48"); // px
     // Now import it
-    ImportFromReqif(maTempFile.GetURL());
     // Then make sure that padding is not lost:
     {
         auto xTable = getParagraphOrTable(1);
@@ -965,9 +972,11 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, 
testHTML_PreserveSpaces)
     pWrtShell->Insert(paraText);
 
     // When exporting to plain HTML, using PreserveSpaces:
-    save(TestFilter::HTML_WRITER, {
-                                      
comphelper::makePropertyValue(u"PreserveSpaces"_ustr, true),
-                                  });
+    setImportFilterName(TestFilter::HTML_WRITER);
+    saveAndReload(TestFilter::HTML_WRITER,
+                  {
+                      comphelper::makePropertyValue(u"PreserveSpaces"_ustr, 
true),
+                  });
 
     // Then make sure that "white-space: pre-wrap" is written into the 
paragraph's style:
     htmlDocUniquePtr pHtmlDoc = parseHtml(maTempFile);
@@ -978,9 +987,6 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, 
testHTML_PreserveSpaces)
     assertXPathContent(pHtmlDoc, "/html/body/p", paraText);
 
     // Test import
-
-    setImportFilterName(TestFilter::HTML_WRITER);
-    loadFromURL(maTempFile.GetURL());
     CPPUNIT_ASSERT_EQUAL(paraText, getParagraph(1)->getString());
 }
 
@@ -993,11 +999,13 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, 
testReqIF_PreserveSpaces)
     pWrtShell->Insert(paraText);
 
     // When exporting to ReqIF, using PreserveSpaces:
-    save(TestFilter::HTML_WRITER,
-         {
-             comphelper::makePropertyValue(u"FilterOptions"_ustr, 
u"xhtmlns=reqif-xhtml"_ustr),
-             comphelper::makePropertyValue(u"PreserveSpaces"_ustr, true),
-         });
+    setImportFilterName(TestFilter::HTML_WRITER);
+    saveAndReload(
+        TestFilter::HTML_WRITER,
+        {
+            comphelper::makePropertyValue(u"FilterOptions"_ustr, 
u"xhtmlns=reqif-xhtml"_ustr),
+            comphelper::makePropertyValue(u"PreserveSpaces"_ustr, true),
+        });
 
     // Then make sure that xml:space="preserve" attribute exists in the 
paragraph element:
     xmlDocUniquePtr pXmlDoc = WrapReqifFromTempFile();
@@ -1006,12 +1014,6 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, 
testReqIF_PreserveSpaces)
     assertXPathContent(pXmlDoc, 
"/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:p", paraText);
 
     // Test import
-
-    setImportFilterName(TestFilter::HTML_WRITER);
-    loadFromURL(maTempFile.GetURL(), {
-                                         
comphelper::makePropertyValue(u"FilterOptions"_ustr,
-                                                                       
u"xhtmlns=reqif-xhtml"_ustr),
-                                     });
     CPPUNIT_ASSERT_EQUAL(paraText, getParagraph(1)->getString());
 }
 
@@ -1042,9 +1044,11 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, 
testHTML_NoPreserveSpaces)
     createSwDoc("test_no_space_preserve.fodt");
 
     // Export to plain HTML, using PreserveSpaces:
-    save(TestFilter::HTML_WRITER, {
-                                      
comphelper::makePropertyValue(u"PreserveSpaces"_ustr, true),
-                                  });
+    setImportFilterName(TestFilter::HTML_WRITER);
+    saveAndReload(TestFilter::HTML_WRITER,
+                  {
+                      comphelper::makePropertyValue(u"PreserveSpaces"_ustr, 
true),
+                  });
 
     htmlDocUniquePtr pHtmlDoc = parseHtml(maTempFile);
     CPPUNIT_ASSERT(pHtmlDoc);
@@ -1073,10 +1077,6 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, 
testHTML_NoPreserveSpaces)
     assertXPath_NoWhiteSpaceInStyle(pHtmlDoc, "/html/body/p[11]");
 
     // Test import
-
-    setImportFilterName(TestFilter::HTML_WRITER);
-    loadFromURL(maTempFile.GetURL());
-
     CPPUNIT_ASSERT_EQUAL(u"No special spaces"_ustr, 
getParagraph(1)->getString());
     CPPUNIT_ASSERT_EQUAL(u" Leading space"_ustr, getParagraph(2)->getString());
     CPPUNIT_ASSERT_EQUAL(u"Trailing space "_ustr, 
getParagraph(3)->getString());
@@ -1100,11 +1100,13 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, 
testReqIF_NoPreserveSpaces)
     createSwDoc("test_no_space_preserve.fodt");
 
     // Export to ReqIF, using PreserveSpaces:
-    save(TestFilter::HTML_WRITER,
-         {
-             comphelper::makePropertyValue(u"FilterOptions"_ustr, 
u"xhtmlns=reqif-xhtml"_ustr),
-             comphelper::makePropertyValue(u"PreserveSpaces"_ustr, true),
-         });
+    setImportFilterName(TestFilter::HTML_WRITER);
+    saveAndReload(
+        TestFilter::HTML_WRITER,
+        {
+            comphelper::makePropertyValue(u"FilterOptions"_ustr, 
u"xhtmlns=reqif-xhtml"_ustr),
+            comphelper::makePropertyValue(u"PreserveSpaces"_ustr, true),
+        });
 
     xmlDocUniquePtr pXmlDoc = WrapReqifFromTempFile();
 
@@ -1137,13 +1139,6 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, 
testReqIF_NoPreserveSpaces)
     assertXPathNoAttribute(pXmlDoc, 
"/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:p[11]", "space");
 
     // Test import
-
-    setImportFilterName(TestFilter::HTML_WRITER);
-    loadFromURL(maTempFile.GetURL(), {
-                                         
comphelper::makePropertyValue(u"FilterOptions"_ustr,
-                                                                       
u"xhtmlns=reqif-xhtml"_ustr),
-                                     });
-
     CPPUNIT_ASSERT_EQUAL(u"No special spaces"_ustr, 
getParagraph(1)->getString());
     CPPUNIT_ASSERT_EQUAL(u" Leading space"_ustr, getParagraph(2)->getString());
     CPPUNIT_ASSERT_EQUAL(u"Trailing space "_ustr, 
getParagraph(3)->getString());
diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx
index 85ed844a6015..c5703606d0a7 100644
--- a/sw/qa/extras/layout/layout.cxx
+++ b/sw/qa/extras/layout/layout.cxx
@@ -3633,11 +3633,9 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint92)
 }
 
 //just care it doesn't crash/assert
-CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint93)
-{
-    createSwDoc("forcepoint93-1.rtf");
-    createSwDoc("forcepoint93-2.rtf");
-}
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint93_1) { 
createSwDoc("forcepoint93-1.rtf"); }
+
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint93_2) { 
createSwDoc("forcepoint93-2.rtf"); }
 
 //just care it doesn't crash/assert
 CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint94) { 
createSwWebDoc("forcepoint94.html"); }
diff --git a/sw/qa/extras/layout/layout4.cxx b/sw/qa/extras/layout/layout4.cxx
index 2d5ec972dc5c..cb6c831cbd4a 100644
--- a/sw/qa/extras/layout/layout4.cxx
+++ b/sw/qa/extras/layout/layout4.cxx
@@ -638,7 +638,7 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter4, testTdf134548)
     }
 }
 
-CPPUNIT_TEST_FIXTURE(SwLayoutWriter4, testTdf124423)
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter4, testTdf124423_DOCX)
 {
     createSwDoc("tdf124423.docx");
     xmlDocUniquePtr pXmlDoc = parseLayoutDump();
@@ -649,12 +649,17 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter4, testTdf124423)
     sal_Int32 nPageWidth = getXPath(pXmlDoc, "//page/infos/prtBounds", 
"width").toInt32();
     CPPUNIT_ASSERT_EQUAL(nPageWidth, nFly2Width);
     CPPUNIT_ASSERT_LESS(nPageWidth / 2, nFly1Width);
+}
 
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter4, testTdf124423_ODT)
+{
     createSwDoc("tdf124423.odt");
-    pXmlDoc = parseLayoutDump();
-    nFly1Width = getXPath(pXmlDoc, "(//anchored/fly)[1]/infos/prtBounds", 
"width").toInt32();
-    nFly2Width = getXPath(pXmlDoc, "(//anchored/fly)[2]/infos/prtBounds", 
"width").toInt32();
-    nPageWidth = getXPath(pXmlDoc, "//page/infos/prtBounds", 
"width").toInt32();
+    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+    sal_Int32 nFly1Width
+        = getXPath(pXmlDoc, "(//anchored/fly)[1]/infos/prtBounds", 
"width").toInt32();
+    sal_Int32 nFly2Width
+        = getXPath(pXmlDoc, "(//anchored/fly)[2]/infos/prtBounds", 
"width").toInt32();
+    sal_Int32 nPageWidth = getXPath(pXmlDoc, "//page/infos/prtBounds", 
"width").toInt32();
     CPPUNIT_ASSERT_LESS(nPageWidth / 2, nFly2Width);
     CPPUNIT_ASSERT_LESS(nPageWidth / 2, nFly1Width);
 }
@@ -714,7 +719,7 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter4, testTdf138782)
             .toInt32());
 }
 
-CPPUNIT_TEST_FIXTURE(SwLayoutWriter4, testTdf135035)
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter4, testTdf135035_DOCX)
 {
     createSwDoc("tdf135035.docx");
     xmlDocUniquePtr pXmlDoc = parseLayoutDump();
@@ -728,13 +733,19 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter4, testTdf135035)
     CPPUNIT_ASSERT_EQUAL(nParentWidth, nFly2Width);
     CPPUNIT_ASSERT_EQUAL(nParentWidth, nFly3Width);
     CPPUNIT_ASSERT_LESS(nParentWidth / 2, nFly1Width);
+}
 
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter4, testTdf135035_ODT)
+{
     createSwDoc("tdf135035.odt");
-    pXmlDoc = parseLayoutDump();
-    nFly1Width = getXPath(pXmlDoc, "(//anchored/fly)[1]/infos/prtBounds", 
"width").toInt32();
-    nFly2Width = getXPath(pXmlDoc, "(//anchored/fly)[2]/infos/prtBounds", 
"width").toInt32();
-    nFly3Width = getXPath(pXmlDoc, "(//anchored/fly)[3]/infos/prtBounds", 
"width").toInt32();
-    nParentWidth = getXPath(pXmlDoc, "(//txt)[1]/infos/prtBounds", 
"width").toInt32();
+    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+    sal_Int32 nFly1Width
+        = getXPath(pXmlDoc, "(//anchored/fly)[1]/infos/prtBounds", 
"width").toInt32();
+    sal_Int32 nFly2Width
+        = getXPath(pXmlDoc, "(//anchored/fly)[2]/infos/prtBounds", 
"width").toInt32();
+    sal_Int32 nFly3Width
+        = getXPath(pXmlDoc, "(//anchored/fly)[3]/infos/prtBounds", 
"width").toInt32();
+    sal_Int32 nParentWidth = getXPath(pXmlDoc, "(//txt)[1]/infos/prtBounds", 
"width").toInt32();
     CPPUNIT_ASSERT_LESS(nParentWidth / 2, nFly2Width);
     CPPUNIT_ASSERT_LESS(nParentWidth / 2, nFly1Width);
     CPPUNIT_ASSERT_GREATER(nParentWidth, nFly3Width);
@@ -760,7 +771,7 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter4, 
testTdf139336_ColumnsWithFootnoteDoNotOccu
     assertXPath(pXmlDoc, "/root/page", 2);
 }
 
-CPPUNIT_TEST_FIXTURE(SwLayoutWriter4, 
testTdf54465_ColumnsWithFootnoteDoNotOccupyEntirePage)
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter4, 
testTdf54465_ColumnsWithFootnoteDoNotOccupyEntirePage_Old)
 {
     // Old odt files should keep their original layout, as it was before 
Tdf139336 fix.
     // The new odt file is only 1 page long, while the old odt file (with the 
same content)
@@ -774,9 +785,12 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter4, 
testTdf54465_ColumnsWithFootnoteDoNotOccup
     xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
     CPPUNIT_ASSERT_GREATER(1, xmlXPathNodeSetGetLength(pXmlNodes));
     xmlXPathFreeObject(pXmlObj);
+}
 
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter4, 
testTdf54465_ColumnsWithFootnoteDoNotOccupyEntirePage_New)
+{
     createSwDoc("tdf54465_ColumnsWithFootnoteDoNotOccupyEntirePage_New.odt");
-    pXmlDoc = parseLayoutDump();
+    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
     assertXPath(pXmlDoc, "/root/page", 1);
 }
 
@@ -1828,12 +1842,15 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter4, TestTdf162614)
     // - Expected: 770
     // - Actual  : 267
     assertXPath(pXmlDoc, "//page[2]/body/tab[2]/infos/bounds", "height", 
u"770");
+}
 
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter4, TestTdf162614_2)
+{
     // Now a test for a case that took me some time to fix when creating the 
patch.
     // It is the greatly simplified tdf124795-5.
 
     createSwDoc("C4_must_start_on_p1.fodt");
-    pXmlDoc = parseLayoutDump();
+    auto pXmlDoc = parseLayoutDump();
 
     // The first line of C4 text must start on the first page - the initial 
version of the fix
     // moved it to page 2.
diff --git a/sw/qa/extras/layout/layout5.cxx b/sw/qa/extras/layout/layout5.cxx
index 0fcf72b12bf0..f49e6ffcce7c 100644
--- a/sw/qa/extras/layout/layout5.cxx
+++ b/sw/qa/extras/layout/layout5.cxx
@@ -2137,7 +2137,7 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter5, 
testTdf72341GrowAllScripts)
     CPPUNIT_ASSERT_GREATER(nWidthAlephInitial, nWidthAlephResized);
 }
 
-CPPUNIT_TEST_FIXTURE(SwLayoutWriter5, testTdf168858)
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter5, testTdf168858_singleHiddenSection)
 {
     // Both test documents have no content outside of hidden sections.
     // Each test checks, that the document loads OK, sections in the document 
load with correct
@@ -2186,7 +2186,10 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter5, testTdf168858)
         assertXPath(pXmlDoc, "//page['pass 2']/body/section", "formatName", 
u"abc");
         assertXPath(pXmlDoc, "//page['pass 2']/body/section/infos/bounds", 
"height", u"0");
     }
+}
 
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter5, testTdf168858_nestedHiddenSection)
+{
     // 2. A conditionally hidden section inside another hidden section
     {
         createSwDoc("tdf168858_nested_hidden_section.fodt");
diff --git a/sw/qa/extras/mailmerge/mailmerge.cxx 
b/sw/qa/extras/mailmerge/mailmerge.cxx
index 1df98ff75280..76445bd2eee5 100644
--- a/sw/qa/extras/mailmerge/mailmerge.cxx
+++ b/sw/qa/extras/mailmerge/mailmerge.cxx
@@ -340,6 +340,7 @@ DECLARE_FILE_MAILMERGE_TEST(testTdf102010, "empty.odt", 
"10-testing-addresses.od
 
     // Generate correct mail merge result filename
     executeMailMerge();
+    dispose();
     // Don't overwrite previous result
     executeMailMerge( true );
     loadMailMergeDocument( 1 );
diff --git a/sw/qa/extras/mailmerge/mailmergetestbase.cxx 
b/sw/qa/extras/mailmerge/mailmergetestbase.cxx
index f9fe83b8d517..daa79591a075 100644
--- a/sw/qa/extras/mailmerge/mailmergetestbase.cxx
+++ b/sw/qa/extras/mailmerge/mailmergetestbase.cxx
@@ -260,6 +260,7 @@ public:
     void loadMailMergeDocument(const OUString& filename)
     {
         assert(mnCurOutputType == text::MailMergeType::FILE);
+        dispose();
         // Output name early, so in the case of a hang, the name of the 
hanging input file is visible.
         std::cout << filename << ",";
         loadFromURL(msMailMergeOutputURL + "/" + filename);
diff --git a/sw/qa/extras/odfexport/odfexport4.cxx 
b/sw/qa/extras/odfexport/odfexport4.cxx
index 39019bf9df7f..3722eef414ad 100644
--- a/sw/qa/extras/odfexport/odfexport4.cxx
+++ b/sw/qa/extras/odfexport/odfexport4.cxx
@@ -83,65 +83,64 @@ CPPUNIT_TEST_FIXTURE(Test, tdf150927)
         
"/office:document-styles/office:automatic-styles/style:style[@style:family='table']",
 2);
 }
 
+CPPUNIT_TEST_FIXTURE(Test, testPersonalMetaDataAndKeepUserInformation)
+{
+    ScopedConfigValue<ScriptingCfg::RemovePersonalInfoOnSaving> aCfg1(true);
+    // 1. Remove personal info, keep user info
+    ScopedConfigValue<ScriptingCfg::KeepDocUserInfoOnSaving> aCfg2(true);
+
+    createSwDoc("personalmetadata.odt");
+    saveAndReload(TestFilter::ODT);
+    xmlDocUniquePtr pXmlDoc = parseExport(u"meta.xml"_ustr);
+    assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:initial-creator", 1);
+    assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:creation-date", 1);
+    assertXPath(pXmlDoc, "/office:document-meta/office:meta/dc:date", 1);
+    assertXPath(pXmlDoc, "/office:document-meta/office:meta/dc:creator", 1);
+    assertXPath(pXmlDoc, "/office:document-meta/office:meta/meta:printed-by", 
1);
+    assertXPath(pXmlDoc, "/office:document-meta/office:meta/meta:print-date", 
1);
+    assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:editing-duration", 0);
+    assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:editing-cycles", 0);
+    assertXPath(pXmlDoc, "/office:document-meta/office:meta/meta:template", 0);
+    pXmlDoc = parseExport(u"settings.xml"_ustr);
+    assertXPath(pXmlDoc,
+                
"/office:document-settings/office:settings/config:config-item-set[2]/"
+                "config:config-item[@config:name='PrinterName']",
+                0);
+    assertXPath(pXmlDoc,
+                
"/office:document-settings/office:settings/config:config-item-set[2]/"
+                "config:config-item[@config:name='PrinterSetup']",
+                0);
+}
+
 CPPUNIT_TEST_FIXTURE(Test, testPersonalMetaData)
 {
+    // 1. Remove all personal info
     ScopedConfigValue<ScriptingCfg::RemovePersonalInfoOnSaving> aCfg1(true);
-    {
-        // 1. Remove personal info, keep user info
-        ScopedConfigValue<ScriptingCfg::KeepDocUserInfoOnSaving> aCfg2(true);
-
-        createSwDoc("personalmetadata.odt");
-        saveAndReload(TestFilter::ODT);
-        xmlDocUniquePtr pXmlDoc = parseExport(u"meta.xml"_ustr);
-        assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:initial-creator", 1);
-        assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:creation-date", 1);
-        assertXPath(pXmlDoc, "/office:document-meta/office:meta/dc:date", 1);
-        assertXPath(pXmlDoc, "/office:document-meta/office:meta/dc:creator", 
1);
-        assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:printed-by", 1);
-        assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:print-date", 1);
-        assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:editing-duration", 0);
-        assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:editing-cycles", 0);
-        assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:template", 0);
-        pXmlDoc = parseExport(u"settings.xml"_ustr);
-        assertXPath(pXmlDoc,
-                    
"/office:document-settings/office:settings/config:config-item-set[2]/"
-                    "config:config-item[@config:name='PrinterName']",
-                    0);
-        assertXPath(pXmlDoc,
-                    
"/office:document-settings/office:settings/config:config-item-set[2]/"
-                    "config:config-item[@config:name='PrinterSetup']",
-                    0);
-    }
 
-    {
-        // 2. Remove user info too
-        ScopedConfigValue<ScriptingCfg::KeepDocUserInfoOnSaving> aCfg2(false);
-
-        createSwDoc("personalmetadata.odt");
-        saveAndReload(TestFilter::ODT);
-        xmlDocUniquePtr pXmlDoc = parseExport(u"meta.xml"_ustr);
-        assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:initial-creator", 0);
-        assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:creation-date", 0);
-        assertXPath(pXmlDoc, "/office:document-meta/office:meta/dc:date", 0);
-        assertXPath(pXmlDoc, "/office:document-meta/office:meta/dc:creator", 
0);
-        assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:printed-by", 0);
-        assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:print-date", 0);
-        assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:editing-duration", 0);
-        assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:editing-cycles", 0);
-        assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:template", 0);
-        pXmlDoc = parseExport(u"settings.xml"_ustr);
-        assertXPath(pXmlDoc,
-                    
"/office:document-settings/office:settings/config:config-item-set[2]/"
-                    "config:config-item[@config:name='PrinterName']",
-                    0);
-        assertXPath(pXmlDoc,
-                    
"/office:document-settings/office:settings/config:config-item-set[2]/"
-                    "config:config-item[@config:name='PrinterSetup']",
-                    0);
-    }
+    createSwDoc("personalmetadata.odt");
+    saveAndReload(TestFilter::ODT);
+    xmlDocUniquePtr pXmlDoc = parseExport(u"meta.xml"_ustr);
+    assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:initial-creator", 0);
+    assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:creation-date", 0);
+    assertXPath(pXmlDoc, "/office:document-meta/office:meta/dc:date", 0);
+    assertXPath(pXmlDoc, "/office:document-meta/office:meta/dc:creator", 0);
+    assertXPath(pXmlDoc, "/office:document-meta/office:meta/meta:printed-by", 
0);
+    assertXPath(pXmlDoc, "/office:document-meta/office:meta/meta:print-date", 
0);
+    assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:editing-duration", 0);
+    assertXPath(pXmlDoc, 
"/office:document-meta/office:meta/meta:editing-cycles", 0);
+    assertXPath(pXmlDoc, "/office:document-meta/office:meta/meta:template", 0);
+    pXmlDoc = parseExport(u"settings.xml"_ustr);
+    assertXPath(pXmlDoc,
+                
"/office:document-settings/office:settings/config:config-item-set[2]/"
+                "config:config-item[@config:name='PrinterName']",
+                0);
+    assertXPath(pXmlDoc,
+                
"/office:document-settings/office:settings/config:config-item-set[2]/"
+                "config:config-item[@config:name='PrinterSetup']",
+                0);
 }
 
-CPPUNIT_TEST_FIXTURE(Test, testRemoveOnlyEditTimeMetaData)
+CPPUNIT_TEST_FIXTURE(Test, testRemoveOnlyEditTimeMetaData_Disabled)
 {
     // 1. Check we have the original edit time info
     createSwDoc("personalmetadata.odt");
@@ -149,14 +148,17 @@ CPPUNIT_TEST_FIXTURE(Test, testRemoveOnlyEditTimeMetaData)
     xmlDocUniquePtr pXmlDoc = parseExport(u"meta.xml"_ustr);
     assertXPathContent(pXmlDoc, 
"/office:document-meta/office:meta/meta:editing-duration",
                        u"PT21M22S");
+}
 
+CPPUNIT_TEST_FIXTURE(Test, testRemoveOnlyEditTimeMetaData_Enabled)
+{
     // Set config RemoveEditingTimeOnSaving to true
     ScopedConfigValue<ScriptingCfg::RemoveEditingTimeOnSaving> aCfg(true);
 
     // 2. Check edit time info is 0
     createSwDoc("personalmetadata.odt");
     save(TestFilter::ODT);
-    pXmlDoc = parseExport(u"meta.xml"_ustr);
+    xmlDocUniquePtr pXmlDoc = parseExport(u"meta.xml"_ustr);
     assertXPathContent(pXmlDoc, 
"/office:document-meta/office:meta/meta:editing-duration", u"P0D");
 }
 
@@ -898,7 +900,7 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf150408_IsLegal)
         "is-legal", u"true");
 }
 
-CPPUNIT_TEST_FIXTURE(Test, testTdf159382)
+CPPUNIT_TEST_FIXTURE(Test, testTdf159382_DOCX)
 {
     // Testing NoGapAfterNoteNumber compat option
 
@@ -945,7 +947,10 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf159382)
         CPPUNIT_ASSERT(width);
         CPPUNIT_ASSERT_LESS(sal_Int32(100), width);
     }
+}
 
+CPPUNIT_TEST_FIXTURE(Test, testTdf159382_DOC)
+{
     createSwDoc("footnote_spacing_hanging_para.doc");
     // 3. Make sure that DOC import sets NoGapAfterNoteNumber option, and 
creates
     // correct layout
@@ -965,7 +970,10 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf159382)
         CPPUNIT_ASSERT(width);
         CPPUNIT_ASSERT_LESS(sal_Int32(100), width);
     }
+}
 
+CPPUNIT_TEST_FIXTURE(Test, testTdf159382_RTF)
+{
     createSwDoc("footnote_spacing_hanging_para.rtf");
     // 4. Make sure that RTF import sets NoGapAfterNoteNumber option, and 
creates
     // correct layout
@@ -985,7 +993,10 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf159382)
         CPPUNIT_ASSERT(width);
         CPPUNIT_ASSERT_LESS(sal_Int32(100), width);
     }
+}
 
+CPPUNIT_TEST_FIXTURE(Test, testTdf159382_NewDocument)
+{
     createSwDoc();
     // 5. Make sure that a new Writer document has this setting set to false
     {
@@ -1520,7 +1531,10 @@ CPPUNIT_TEST_FIXTURE(Test, testMsWordUlTrailSpace)
         CPPUNIT_ASSERT_EQUAL(uno::Any(false),
                              
xSettings->getPropertyValue(u"MsWordUlTrailSpace"_ustr));
     }
+}
 
+CPPUNIT_TEST_FIXTURE(Test, testMsWordUlTrailSpace_NewDocument)
+{
     createSwDoc();
     // 5. Make sure that a new Writer document has this setting set to false
     {
diff --git a/sw/qa/extras/odfimport/odfimport.cxx 
b/sw/qa/extras/odfimport/odfimport.cxx
index d8f4a6cfccd6..65dc904d60c6 100644
--- a/sw/qa/extras/odfimport/odfimport.cxx
+++ b/sw/qa/extras/odfimport/odfimport.cxx
@@ -390,6 +390,7 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf149978)
 {
     createSwDoc("tdf149978.fodt");
     // on Linux the bug only reproduces if a document has been loaded 
previously
+    dispose();
     createSwDoc("tdf149978.fodt");
     // this was nondeterministic so try 10 times
     for (int i = 1; i <= 10; ++i)
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
index 1e3ee19f47ae..8e1730693e81 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
@@ -72,6 +72,7 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf128197)
     xmlDocUniquePtr pLayout14 = parseLayoutDump();
     sal_Int32 nHeight14 = getXPath(pLayout14, 
"//page[1]/body/txt[1]/infos/bounds", "height").toInt32();
 
+    dispose();
     createSwDoc("128197_compat15.docx");
     xmlDocUniquePtr pLayout15 = parseLayoutDump();
     sal_Int32 nHeight15 = getXPath(pLayout15, 
"//page[1]/body/txt[1]/infos/bounds", "height").toInt32();
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx
index bfee6ba34487..8bafe21b75b5 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx
@@ -800,6 +800,13 @@ CPPUNIT_TEST_FIXTURE(Test, testPersonalMetaData)
     assertXPath(pCoreDoc, "/cp:coreProperties/cp:lastModifiedBy", 0);
     assertXPath(pCoreDoc, "/cp:coreProperties/cp:lastPrinted", 0);
     assertXPath(pCoreDoc, "/cp:coreProperties/cp:revision", 0);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testPersonalMetaDataAndKeepUserInformation)
+{
+    // 1. Remove all personal info
+    
ScopedConfigValue<officecfg::Office::Common::Security::Scripting::RemovePersonalInfoOnSaving>
+        aCfg1(true);
 
     // 2. Remove personal information, keep user information
     
ScopedConfigValue<officecfg::Office::Common::Security::Scripting::KeepDocUserInfoOnSaving>
@@ -808,10 +815,10 @@ CPPUNIT_TEST_FIXTURE(Test, testPersonalMetaData)
     createSwDoc("personalmetadata.docx");
     save(TestFilter::DOCX);
 
-    pAppDoc = parseExport(u"docProps/app.xml"_ustr);
+    xmlDocUniquePtr pAppDoc = parseExport(u"docProps/app.xml"_ustr);
     assertXPath(pAppDoc, 
"/extended-properties:Properties/extended-properties:Template", 0);
     assertXPath(pAppDoc, 
"/extended-properties:Properties/extended-properties:TotalTime", 0);
-    pCoreDoc = parseExport(u"docProps/core.xml"_ustr);
+    xmlDocUniquePtr pCoreDoc = parseExport(u"docProps/core.xml"_ustr);
     assertXPath(pCoreDoc, "/cp:coreProperties/dcterms:created", 1);
     assertXPath(pCoreDoc, "/cp:coreProperties/dcterms:modified", 1);
     assertXPath(pCoreDoc, "/cp:coreProperties/dc:creator", 1);
@@ -834,14 +841,17 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf169072_illegalDates)
     assertXPath(pXmlCore, "/cp:coreProperties/cp:lastPrinted", 0); // was 
1600-12-31T00:00:52Z
 }
 
-CPPUNIT_TEST_FIXTURE(Test, testRemoveOnlyEditTimeMetaData)
+CPPUNIT_TEST_FIXTURE(Test, testRemoveOnlyEditTimeMetaData_Disabled)
 {
     // 1. Check we have the original edit time info
     createSwDoc("personalmetadata.docx");
     save(TestFilter::DOCX);
     xmlDocUniquePtr pAppDoc = parseExport(u"docProps/app.xml"_ustr);
     assertXPath(pAppDoc, 
"/extended-properties:Properties/extended-properties:TotalTime", 1);
+}
 
+CPPUNIT_TEST_FIXTURE(Test, testRemoveOnlyEditTimeMetaData_Enabled)
+{
     // Set config RemoveEditingTimeOnSaving to true
     
ScopedConfigValue<officecfg::Office::Common::Security::Scripting::RemoveEditingTimeOnSaving>
         aCfg(true);
@@ -849,7 +859,7 @@ CPPUNIT_TEST_FIXTURE(Test, testRemoveOnlyEditTimeMetaData)
     // 2. Check edit time info is removed
     createSwDoc("personalmetadata.docx");
     save(TestFilter::DOCX);
-    pAppDoc = parseExport(u"docProps/app.xml"_ustr);
+    xmlDocUniquePtr pAppDoc = parseExport(u"docProps/app.xml"_ustr);
     assertXPath(pAppDoc, 
"/extended-properties:Properties/extended-properties:TotalTime", 0);
 }
 
diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx 
b/sw/qa/extras/uiwriter/uiwriter.cxx
index 7eac156eca13..1bac82c4254e 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -86,6 +86,7 @@ public:
     std::unique_ptr<SwTextBlocks> readDOCXAutotext(
         std::u16string_view sFileName, bool bEmpty = false);
     void testRedlineFrame(char const*const file);
+    void testWatermarkPosition(int nAdditionalPagesCount, bool bChangeHeader);
 };
 
 std::unique_ptr<SwTextBlocks> 
SwUiWriterTest::readDOCXAutotext(std::u16string_view sFileName, bool bEmpty)
@@ -387,6 +388,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testCopyPastePageBreak)
     pWrtShell->SelAll();
     dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
 
+    dispose();
     createSwDoc("pagebreak-target.fodt");
     SwDoc* pDoc = getSwDoc();
     pWrtShell = getSwDocShell()->GetWrtShell();
@@ -1011,81 +1013,115 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testWatermarkDOCX)
     CPPUNIT_ASSERT_EQUAL(sal_Int16(50), pWatermark->GetTransparency());
 }
 
-CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testWatermarkPosition)
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testWatermarkPosition1)
+{
+    testWatermarkPosition(0, true);
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testWatermarkPosition2)
+{
+    testWatermarkPosition(0, false);
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testWatermarkPosition3)
+{
+    testWatermarkPosition(1, true);
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testWatermarkPosition4)
+{
+    testWatermarkPosition(1, false);
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testWatermarkPosition5)
+{
+    testWatermarkPosition(5, true);
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testWatermarkPosition6)
+{
+    testWatermarkPosition(5, false);
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testWatermarkPosition7)
+{
+    testWatermarkPosition(20, true);
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testWatermarkPosition8)
+{
+    testWatermarkPosition(20, false);
+}
+
+void SwUiWriterTest::testWatermarkPosition(int nAdditionalPagesCount, bool 
bChangeHeader)
 {
     // tdf#108494 Watermark inserted in the document with page break was 
outside the first page
     const int aPagesInDocument = 2;
-    const int aAdditionalPagesCount[] = {    0,     0,    1,     1,    5,     
5,   20,    20 };
-    const bool aChangeHeader[]        = { true, false, true, false, true, 
false, true, false };
+    int aPages = aPagesInDocument + nAdditionalPagesCount;
 
-    for (tools::ULong i = 0; i < sizeof(aAdditionalPagesCount) / sizeof(int); 
++i)
+    // Empty document with one Page Break
+    createSwDoc("watermark-position.odt");
+    SwDoc* pDoc = getSwDoc();
+    SwEditShell* pEditShell = pDoc->GetEditShell();
+    CPPUNIT_ASSERT(pEditShell);
+    SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+    uno::Reference<style::XStyleFamiliesSupplier> 
xStyleFamiliesSupplier(mxComponent,
+                                                                     
uno::UNO_QUERY);
+    uno::Reference<container::XNameAccess> xStyleFamilies = 
xStyleFamiliesSupplier->getStyleFamilies();
+
+    // 1. Add additional page breaks
+    for (int j = 0; j < nAdditionalPagesCount; ++j)
+        pWrtShell->InsertPageBreak();
+
+    // 2. Change header state (On, Off, On)
+    if (bChangeHeader)
     {
-        int aPages = aPagesInDocument + aAdditionalPagesCount[i];
-
-        // Empty document with one Page Break
-        createSwDoc("watermark-position.odt");
-        SwDoc* pDoc = getSwDoc();
-        SwEditShell* pEditShell = pDoc->GetEditShell();
-        CPPUNIT_ASSERT(pEditShell);
-        SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
-        uno::Reference<style::XStyleFamiliesSupplier> 
xStyleFamiliesSupplier(mxComponent,
-                                                                         
uno::UNO_QUERY);
-        uno::Reference<container::XNameAccess> xStyleFamilies = 
xStyleFamiliesSupplier->getStyleFamilies();
-
-        // 1. Add additional page breaks
-        for (int j = 0; j < aAdditionalPagesCount[i]; ++j)
-            pWrtShell->InsertPageBreak();
-
-        // 2. Change header state (On, Off, On)
-        if (aChangeHeader[i])
-        {
-            SwPageDesc aDesc(pDoc->GetPageDesc(0));
-            SwFrameFormat& rMaster = aDesc.GetMaster();
-            rMaster.SetFormatAttr(SwFormatHeader(true));
-            pDoc->ChgPageDesc(0, aDesc);
-
-            aDesc = pDoc->GetPageDesc(0);
-            SwFrameFormat& rMaster2 = aDesc.GetMaster();
-            rMaster2.SetFormatAttr(SwFormatHeader(false));
-            pDoc->ChgPageDesc(0, aDesc);
-
-            aDesc = pDoc->GetPageDesc(0);
-            SwFrameFormat& rMaster3 = aDesc.GetMaster();
-            rMaster3.SetFormatAttr(SwFormatHeader(true));
-            pDoc->ChgPageDesc(0, aDesc);
-        }
+        SwPageDesc aDesc(pDoc->GetPageDesc(0));
+        SwFrameFormat& rMaster = aDesc.GetMaster();
+        rMaster.SetFormatAttr(SwFormatHeader(true));
+        pDoc->ChgPageDesc(0, aDesc);
+
+        aDesc = pDoc->GetPageDesc(0);
+        SwFrameFormat& rMaster2 = aDesc.GetMaster();
+        rMaster2.SetFormatAttr(SwFormatHeader(false));
+        pDoc->ChgPageDesc(0, aDesc);
+
+        aDesc = pDoc->GetPageDesc(0);
+        SwFrameFormat& rMaster3 = aDesc.GetMaster();
+        rMaster3.SetFormatAttr(SwFormatHeader(true));
+        pDoc->ChgPageDesc(0, aDesc);
+    }
 
-        // 3. Insert Watermark
-        SfxWatermarkItem aWatermark;
-        aWatermark.SetText(u"Watermark"_ustr);
-        aWatermark.SetFont(u"DejaVu Sans"_ustr);
+    // 3. Insert Watermark
+    SfxWatermarkItem aWatermark;
+    aWatermark.SetText(u"Watermark"_ustr);
+    aWatermark.SetFont(u"DejaVu Sans"_ustr);
 
-        pEditShell->SetWatermark(aWatermark);
+    pEditShell->SetWatermark(aWatermark);
 
-        uno::Reference<css::drawing::XShape> xShape = getShape(1);
-        CPPUNIT_ASSERT(xShape.is());
+    uno::Reference<css::drawing::XShape> xShape = getShape(1);
+    CPPUNIT_ASSERT(xShape.is());
 
-        SdrPage* pPage = 
pWrtShell->GetDoc()->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
+    SdrPage* pPage = 
pWrtShell->GetDoc()->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
 
-        // Get Watermark object
-        SdrObject* pObject = pPage->GetObj(0);
-        pObject->RecalcBoundRect();
-        const tools::Rectangle& rRect = pObject->GetSnapRect();
-        Size rSize = pPage->GetSize();
+    // Get Watermark object
+    SdrObject* pObject = pPage->GetObj(0);
+    pObject->RecalcBoundRect();
+    const tools::Rectangle& rRect = pObject->GetSnapRect();
+    Size rSize = pPage->GetSize();
 
-        // Page break, calculate height of a page
-        const int nPageHeight = rSize.getHeight() / aPages;
+    // Page break, calculate height of a page
+    const int nPageHeight = rSize.getHeight() / aPages;
 
-        std::stringstream aMessage;
-        aMessage << "Case: " << i << ", nPageHeight = " << nPageHeight << ", 
rRect.Bottom = " << rRect.Bottom();
+    std::stringstream aMessage;
+    aMessage << ", nPageHeight = " << nPageHeight << ", rRect.Bottom = " << 
rRect.Bottom();
 
-        // Check if Watermark is inside a page
-        CPPUNIT_ASSERT_MESSAGE(aMessage.str(), nPageHeight >= rRect.Bottom());
+    // Check if Watermark is inside a page
+    CPPUNIT_ASSERT_MESSAGE(aMessage.str(), nPageHeight >= rRect.Bottom());
 
-        // Check if Watermark is centered
-        CPPUNIT_ASSERT_EQUAL(text::HoriOrientation::CENTER, 
getProperty<sal_Int16>(xShape, u"HoriOrient"_ustr));
-        CPPUNIT_ASSERT_EQUAL(text::VertOrientation::CENTER, 
getProperty<sal_Int16>(xShape, u"VertOrient"_ustr));
-    }
+    // Check if Watermark is centered
+    CPPUNIT_ASSERT_EQUAL(text::HoriOrientation::CENTER, 
getProperty<sal_Int16>(xShape, u"HoriOrient"_ustr));
+    CPPUNIT_ASSERT_EQUAL(text::VertOrientation::CENTER, 
getProperty<sal_Int16>(xShape, u"VertOrient"_ustr));
 }
 
 CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testFdo74981)
diff --git a/sw/qa/extras/uiwriter/uiwriter11.cxx 
b/sw/qa/extras/uiwriter/uiwriter11.cxx
index 92548813bd25..f444a763d94d 100644
--- a/sw/qa/extras/uiwriter/uiwriter11.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter11.cxx
@@ -96,290 +96,290 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest11, 
testTdf113213_addToList)
     CPPUNIT_ASSERT_EQUAL(OUString("1."), 
getProperty<OUString>(getParagraph(6), "ListLabelString"));
 }
 
-CPPUNIT_TEST_FIXTURE(SwUiWriterTest11, testTdf108791)
+SwPostItMgr* getPostItMgr(SwDocShell* pDocShell)
 {
-    auto getPostItMgr = [](SwDocShell* pDocShell) {
-        CPPUNIT_ASSERT(pDocShell);
-        SwView* pView = pDocShell->GetView();
-        CPPUNIT_ASSERT(pView);
-        SwPostItMgr* pPostItMgr = pView->GetPostItMgr();
-        CPPUNIT_ASSERT(pPostItMgr);
-        return pPostItMgr;
-    };
+    CPPUNIT_ASSERT(pDocShell);
+    SwView* pView = pDocShell->GetView();
+    CPPUNIT_ASSERT(pView);
+    SwPostItMgr* pPostItMgr = pView->GetPostItMgr();
+    CPPUNIT_ASSERT(pPostItMgr);
+    return pPostItMgr;
+}
 
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest11, testTdf108791)
+{
     // Given a document with tracked changes enabled, having some threads of 
comments:
 
     createSwDoc("tdf108791_comments_with_tracked_changes.fodt");
 
-    {
-        // Test "Delete Comment": the selected comment must be marked as 
deleted
+    // Test "Delete Comment": the selected comment must be marked as deleted
 
-        SwPostItMgr* pPostItMgr = getPostItMgr(getSwDocShell());
-        auto& aPostItFields = pPostItMgr->GetPostItFields();
+    SwPostItMgr* pPostItMgr = getPostItMgr(getSwDocShell());
+    auto& aPostItFields = pPostItMgr->GetPostItFields();
 
-        CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
-        for (size_t i = 0; i < aPostItFields.size(); ++i)
-        {
-            CPPUNIT_ASSERT(aPostItFields[i]);
-            CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::VISIBLE,
-                                 aPostItFields[i]->mLayoutStatus);
-        }
+    CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
+    for (size_t i = 0; i < aPostItFields.size(); ++i)
+    {
+        CPPUNIT_ASSERT(aPostItFields[i]);
+        CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::VISIBLE,
+                             aPostItFields[i]->mLayoutStatus);
+    }
 
-        // Select "Comment thread 1 reply 2"
-        CPPUNIT_ASSERT(aPostItFields[2]->mpPostIt);
-        const SwPostItField* pPostItField = 
aPostItFields[2]->mpPostIt->GetPostItField();
-        CPPUNIT_ASSERT(pPostItField);
-        CPPUNIT_ASSERT_EQUAL(u"Comment thread 1 reply 2"_ustr, 
pPostItField->GetText());
+    // Select "Comment thread 1 reply 2"
+    CPPUNIT_ASSERT(aPostItFields[2]->mpPostIt);
+    const SwPostItField* pPostItField = 
aPostItFields[2]->mpPostIt->GetPostItField();
+    CPPUNIT_ASSERT(pPostItField);
+    CPPUNIT_ASSERT_EQUAL(u"Comment thread 1 reply 2"_ustr, 
pPostItField->GetText());
 
-        pPostItMgr->SetActiveSidebarWin(aPostItFields[2]->mpPostIt);
-        dispatchCommand(mxComponent, u".uno:DeleteComment"_ustr, {});
+    pPostItMgr->SetActiveSidebarWin(aPostItFields[2]->mpPostIt);
+    dispatchCommand(mxComponent, u".uno:DeleteComment"_ustr, {});
 
-        CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
-        for (size_t i = 0; i < aPostItFields.size(); ++i)
-        {
-            CPPUNIT_ASSERT(aPostItFields[i]);
-            CPPUNIT_ASSERT_EQUAL(i == 2 ? 
SwPostItHelper::SwLayoutStatus::DELETED
-                                        : 
SwPostItHelper::SwLayoutStatus::VISIBLE,
-                                 aPostItFields[i]->mLayoutStatus);
-        }
+    CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
+    for (size_t i = 0; i < aPostItFields.size(); ++i)
+    {
+        CPPUNIT_ASSERT(aPostItFields[i]);
+        CPPUNIT_ASSERT_EQUAL(i == 2 ? SwPostItHelper::SwLayoutStatus::DELETED
+                                    : SwPostItHelper::SwLayoutStatus::VISIBLE,
+                             aPostItFields[i]->mLayoutStatus);
     }
+}
 
-    // load it anew
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest11, testTdf108791_2)
+{
     createSwDoc("tdf108791_comments_with_tracked_changes.fodt");
 
-    {
-        // Test "Delete Comment Thread": the comment, and all its thread, must 
be marked as deleted
+    // Test "Delete Comment Thread": the comment, and all its thread, must be 
marked as deleted
 
-        SwPostItMgr* pPostItMgr = getPostItMgr(getSwDocShell());
-        auto& aPostItFields = pPostItMgr->GetPostItFields();
+    SwPostItMgr* pPostItMgr = getPostItMgr(getSwDocShell());
+    auto& aPostItFields = pPostItMgr->GetPostItFields();
 
-        CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
-        for (size_t i = 0; i < aPostItFields.size(); ++i)
-        {
-            CPPUNIT_ASSERT(aPostItFields[i]);
-            CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::VISIBLE,
-                                 aPostItFields[i]->mLayoutStatus);
-        }
+    CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
+    for (size_t i = 0; i < aPostItFields.size(); ++i)
+    {
+        CPPUNIT_ASSERT(aPostItFields[i]);
+        CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::VISIBLE,
+                             aPostItFields[i]->mLayoutStatus);
+    }
 
-        // Select "Comment thread 1 reply 2"
-        CPPUNIT_ASSERT(aPostItFields[2]->mpPostIt);
-        const SwPostItField* pPostItField = 
aPostItFields[2]->mpPostIt->GetPostItField();
-        CPPUNIT_ASSERT(pPostItField);
-        CPPUNIT_ASSERT_EQUAL(u"Comment thread 1 reply 2"_ustr, 
pPostItField->GetText());
+    // Select "Comment thread 1 reply 2"
+    CPPUNIT_ASSERT(aPostItFields[2]->mpPostIt);
+    const SwPostItField* pPostItField = 
aPostItFields[2]->mpPostIt->GetPostItField();
+    CPPUNIT_ASSERT(pPostItField);
+    CPPUNIT_ASSERT_EQUAL(u"Comment thread 1 reply 2"_ustr, 
pPostItField->GetText());
 
-        pPostItMgr->SetActiveSidebarWin(aPostItFields[2]->mpPostIt);
-        dispatchCommand(mxComponent, u".uno:DeleteCommentThread"_ustr, {});
+    pPostItMgr->SetActiveSidebarWin(aPostItFields[2]->mpPostIt);
+    dispatchCommand(mxComponent, u".uno:DeleteCommentThread"_ustr, {});
 
-        CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
-        for (size_t i = 0; i < aPostItFields.size(); ++i)
-        {
-            CPPUNIT_ASSERT(aPostItFields[i]);
-            CPPUNIT_ASSERT_EQUAL(i <= 2 ? 
SwPostItHelper::SwLayoutStatus::DELETED
-                                        : 
SwPostItHelper::SwLayoutStatus::VISIBLE,
-                                 aPostItFields[i]->mLayoutStatus);
-        }
+    CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
+    for (size_t i = 0; i < aPostItFields.size(); ++i)
+    {
+        CPPUNIT_ASSERT(aPostItFields[i]);
+        CPPUNIT_ASSERT_EQUAL(i <= 2 ? SwPostItHelper::SwLayoutStatus::DELETED
+                                    : SwPostItHelper::SwLayoutStatus::VISIBLE,
+                             aPostItFields[i]->mLayoutStatus);
     }
+}
 
-    // load it anew
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest11, testTdf108791_3)
+{
     createSwDoc("tdf108791_comments_with_tracked_changes.fodt");
 
-    {
-        // Test "Delete Comments by Author3": the author's comments must be 
marked as deleted
+    // Test "Delete Comments by Author3": the author's comments must be marked 
as deleted
 
-        SwPostItMgr* pPostItMgr = getPostItMgr(getSwDocShell());
-        auto& aPostItFields = pPostItMgr->GetPostItFields();
+    SwPostItMgr* pPostItMgr = getPostItMgr(getSwDocShell());
+    auto& aPostItFields = pPostItMgr->GetPostItFields();
 
-        CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
-        for (size_t i = 0; i < aPostItFields.size(); ++i)
-        {
-            CPPUNIT_ASSERT(aPostItFields[i]);
-            CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::VISIBLE,
-                                 aPostItFields[i]->mLayoutStatus);
-        }
+    CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
+    for (size_t i = 0; i < aPostItFields.size(); ++i)
+    {
+        CPPUNIT_ASSERT(aPostItFields[i]);
+        CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::VISIBLE,
+                             aPostItFields[i]->mLayoutStatus);
+    }
 
-        // Select "Comment thread 1 reply 2"
-        CPPUNIT_ASSERT(aPostItFields[2]->mpPostIt);
-        const SwPostItField* pPostItField = 
aPostItFields[2]->mpPostIt->GetPostItField();
-        CPPUNIT_ASSERT(pPostItField);
-        CPPUNIT_ASSERT_EQUAL(u"Author3"_ustr, pPostItField->GetPar1());
+    // Select "Comment thread 1 reply 2"
+    CPPUNIT_ASSERT(aPostItFields[2]->mpPostIt);
+    const SwPostItField* pPostItField = 
aPostItFields[2]->mpPostIt->GetPostItField();
+    CPPUNIT_ASSERT(pPostItField);
+    CPPUNIT_ASSERT_EQUAL(u"Author3"_ustr, pPostItField->GetPar1());
 
-        pPostItMgr->SetActiveSidebarWin(aPostItFields[2]->mpPostIt);
-        dispatchCommand(mxComponent, u".uno:DeleteAuthor"_ustr, {});
+    pPostItMgr->SetActiveSidebarWin(aPostItFields[2]->mpPostIt);
+    dispatchCommand(mxComponent, u".uno:DeleteAuthor"_ustr, {});
 
-        CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
-        for (size_t i = 0; i < aPostItFields.size(); ++i)
-        {
-            CPPUNIT_ASSERT(aPostItFields[i]);
-            CPPUNIT_ASSERT(aPostItFields[i]->mpPostIt);
-            pPostItField = aPostItFields[i]->mpPostIt->GetPostItField();
-            CPPUNIT_ASSERT(pPostItField);
-            CPPUNIT_ASSERT_EQUAL(pPostItField->GetPar1() == "Author3"
-                                     ? SwPostItHelper::SwLayoutStatus::DELETED
-                                     : SwPostItHelper::SwLayoutStatus::VISIBLE,
-                                 aPostItFields[i]->mLayoutStatus);
-        }
+    CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
+    for (size_t i = 0; i < aPostItFields.size(); ++i)
+    {
+        CPPUNIT_ASSERT(aPostItFields[i]);
+        CPPUNIT_ASSERT(aPostItFields[i]->mpPostIt);
+        pPostItField = aPostItFields[i]->mpPostIt->GetPostItField();
+        CPPUNIT_ASSERT(pPostItField);
+        CPPUNIT_ASSERT_EQUAL(pPostItField->GetPar1() == "Author3"
+                                 ? SwPostItHelper::SwLayoutStatus::DELETED
+                                 : SwPostItHelper::SwLayoutStatus::VISIBLE,
+                             aPostItFields[i]->mLayoutStatus);
     }
+}
 
-    // load it anew
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest11, testTdf108791_4)
+{
     createSwDoc("tdf108791_comments_with_tracked_changes.fodt");
 
-    {
-        // Test "Delete All Comments": all comments must be marked as deleted
+    // Test "Delete All Comments": all comments must be marked as deleted
 
-        SwPostItMgr* pPostItMgr = getPostItMgr(getSwDocShell());
-        auto& aPostItFields = pPostItMgr->GetPostItFields();
+    SwPostItMgr* pPostItMgr = getPostItMgr(getSwDocShell());
+    auto& aPostItFields = pPostItMgr->GetPostItFields();
 
-        CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
-        for (size_t i = 0; i < aPostItFields.size(); ++i)
-        {
-            CPPUNIT_ASSERT(aPostItFields[i]);
-            CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::VISIBLE,
-                                 aPostItFields[i]->mLayoutStatus);
-        }
+    CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
+    for (size_t i = 0; i < aPostItFields.size(); ++i)
+    {
+        CPPUNIT_ASSERT(aPostItFields[i]);
+        CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::VISIBLE,
+                             aPostItFields[i]->mLayoutStatus);
+    }
 
-        // Select any comment
-        CPPUNIT_ASSERT(aPostItFields[2]->mpPostIt);
+    // Select any comment
+    CPPUNIT_ASSERT(aPostItFields[2]->mpPostIt);
 
-        pPostItMgr->SetActiveSidebarWin(aPostItFields[2]->mpPostIt);
-        dispatchCommand(mxComponent, u".uno:DeleteAllNotes"_ustr, {});
+    pPostItMgr->SetActiveSidebarWin(aPostItFields[2]->mpPostIt);
+    dispatchCommand(mxComponent, u".uno:DeleteAllNotes"_ustr, {});
 
-        CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
-        for (size_t i = 0; i < aPostItFields.size(); ++i)
-        {
-            CPPUNIT_ASSERT(aPostItFields[i]);
-            CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::DELETED,
-                                 aPostItFields[i]->mLayoutStatus);
-        }
+    CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
+    for (size_t i = 0; i < aPostItFields.size(); ++i)
+    {
+        CPPUNIT_ASSERT(aPostItFields[i]);
+        CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::DELETED,
+                             aPostItFields[i]->mLayoutStatus);
     }
+}
 
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest11, testTdf108791_5)
+{
     // Now test the same with an equivalent DOCX: comment deletion must delete 
immediately
 
     createSwDoc("tdf108791_comments_with_tracked_changes.docx");
 
-    {
-        // Test "Delete Comment": the selected comment must be deleted
+    // Test "Delete Comment": the selected comment must be deleted
 
-        SwPostItMgr* pPostItMgr = getPostItMgr(getSwDocShell());
-        auto& aPostItFields = pPostItMgr->GetPostItFields();
+    SwPostItMgr* pPostItMgr = getPostItMgr(getSwDocShell());
+    auto& aPostItFields = pPostItMgr->GetPostItFields();
 
-        CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
-        for (size_t i = 0; i < aPostItFields.size(); ++i)
-        {
-            CPPUNIT_ASSERT(aPostItFields[i]);
-            CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::VISIBLE,
-                                 aPostItFields[i]->mLayoutStatus);
-        }
+    CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
+    for (size_t i = 0; i < aPostItFields.size(); ++i)
+    {
+        CPPUNIT_ASSERT(aPostItFields[i]);
+        CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::VISIBLE,
+                             aPostItFields[i]->mLayoutStatus);
+    }
 
-        // Select "Comment thread 1 reply 2"
-        CPPUNIT_ASSERT(aPostItFields[2]->mpPostIt);
-        const SwPostItField* pPostItField = 
aPostItFields[2]->mpPostIt->GetPostItField();
-        CPPUNIT_ASSERT(pPostItField);
-        CPPUNIT_ASSERT_EQUAL(u"Comment thread 1 reply 2"_ustr, 
pPostItField->GetText());
+    // Select "Comment thread 1 reply 2"
+    CPPUNIT_ASSERT(aPostItFields[2]->mpPostIt);
+    const SwPostItField* pPostItField = 
aPostItFields[2]->mpPostIt->GetPostItField();
+    CPPUNIT_ASSERT(pPostItField);
+    CPPUNIT_ASSERT_EQUAL(u"Comment thread 1 reply 2"_ustr, 
pPostItField->GetText());
 
-        pPostItMgr->SetActiveSidebarWin(aPostItFields[2]->mpPostIt);
-        dispatchCommand(mxComponent, u".uno:DeleteComment"_ustr, {});
+    pPostItMgr->SetActiveSidebarWin(aPostItFields[2]->mpPostIt);
+    dispatchCommand(mxComponent, u".uno:DeleteComment"_ustr, {});
 
-        CPPUNIT_ASSERT_EQUAL(size_t(5), aPostItFields.size());
-        for (size_t i = 0; i < aPostItFields.size(); ++i)
-        {
-            CPPUNIT_ASSERT(aPostItFields[i]);
-            CPPUNIT_ASSERT(aPostItFields[i]->mpPostIt);
-            CPPUNIT_ASSERT(aPostItFields[i]->mpPostIt->GetPostItField());
-            
CPPUNIT_ASSERT(aPostItFields[i]->mpPostIt->GetPostItField()->GetText()
-                           != "Comment thread 1 reply 2");
-        }
+    CPPUNIT_ASSERT_EQUAL(size_t(5), aPostItFields.size());
+    for (size_t i = 0; i < aPostItFields.size(); ++i)
+    {
+        CPPUNIT_ASSERT(aPostItFields[i]);
+        CPPUNIT_ASSERT(aPostItFields[i]->mpPostIt);
+        CPPUNIT_ASSERT(aPostItFields[i]->mpPostIt->GetPostItField());
+        CPPUNIT_ASSERT(aPostItFields[i]->mpPostIt->GetPostItField()->GetText()
+                       != "Comment thread 1 reply 2");
     }
+}
 
-    // load it anew
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest11, testTdf108791_6)
+{
     createSwDoc("tdf108791_comments_with_tracked_changes.docx");
 
-    {
-        // Test "Delete Comment Thread": the comment, and all its thread, must 
be deleted
+    // Test "Delete Comment Thread": the comment, and all its thread, must be 
deleted
 
-        SwPostItMgr* pPostItMgr = getPostItMgr(getSwDocShell());
-        auto& aPostItFields = pPostItMgr->GetPostItFields();
+    SwPostItMgr* pPostItMgr = getPostItMgr(getSwDocShell());
+    auto& aPostItFields = pPostItMgr->GetPostItFields();
 
-        CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
-        for (size_t i = 0; i < aPostItFields.size(); ++i)
-        {
-            CPPUNIT_ASSERT(aPostItFields[i]);
-            CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::VISIBLE,
-                                 aPostItFields[i]->mLayoutStatus);
-        }
+    CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
+    for (size_t i = 0; i < aPostItFields.size(); ++i)
+    {
+        CPPUNIT_ASSERT(aPostItFields[i]);
+        CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::VISIBLE,
+                             aPostItFields[i]->mLayoutStatus);
+    }
 
-        // Select "Comment thread 1 reply 2"
-        CPPUNIT_ASSERT(aPostItFields[2]->mpPostIt);
-        const SwPostItField* pPostItField = 
aPostItFields[2]->mpPostIt->GetPostItField();
-        CPPUNIT_ASSERT(pPostItField);
-        CPPUNIT_ASSERT_EQUAL(u"Comment thread 1 reply 2"_ustr, 
pPostItField->GetText());
+    // Select "Comment thread 1 reply 2"
+    CPPUNIT_ASSERT(aPostItFields[2]->mpPostIt);
+    const SwPostItField* pPostItField = 
aPostItFields[2]->mpPostIt->GetPostItField();
+    CPPUNIT_ASSERT(pPostItField);
+    CPPUNIT_ASSERT_EQUAL(u"Comment thread 1 reply 2"_ustr, 
pPostItField->GetText());
 
-        pPostItMgr->SetActiveSidebarWin(aPostItFields[2]->mpPostIt);
-        dispatchCommand(mxComponent, u".uno:DeleteCommentThread"_ustr, {});
+    pPostItMgr->SetActiveSidebarWin(aPostItFields[2]->mpPostIt);
+    dispatchCommand(mxComponent, u".uno:DeleteCommentThread"_ustr, {});
 
-        CPPUNIT_ASSERT_EQUAL(size_t(3), aPostItFields.size());
-    }
+    CPPUNIT_ASSERT_EQUAL(size_t(3), aPostItFields.size());
+}
 
-    // load it anew
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest11, testTdf108791_7)
+{
     createSwDoc("tdf108791_comments_with_tracked_changes.docx");
 
-    {
-        // Test "Delete Comments by Author3": the author's comments must be 
deleted
+    // Test "Delete Comments by Author3": the author's comments must be deleted
 
-        SwPostItMgr* pPostItMgr = getPostItMgr(getSwDocShell());
-        auto& aPostItFields = pPostItMgr->GetPostItFields();
+    SwPostItMgr* pPostItMgr = getPostItMgr(getSwDocShell());
+    auto& aPostItFields = pPostItMgr->GetPostItFields();
 
-        CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
-        for (size_t i = 0; i < aPostItFields.size(); ++i)
-        {
-            CPPUNIT_ASSERT(aPostItFields[i]);
-            CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::VISIBLE,
-                                 aPostItFields[i]->mLayoutStatus);
-        }
+    CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
+    for (size_t i = 0; i < aPostItFields.size(); ++i)
+    {
+        CPPUNIT_ASSERT(aPostItFields[i]);
+        CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::VISIBLE,
+                             aPostItFields[i]->mLayoutStatus);
+    }
 
-        // Select "Comment thread 1 reply 2"
-        CPPUNIT_ASSERT(aPostItFields[2]->mpPostIt);
-        const SwPostItField* pPostItField = 
aPostItFields[2]->mpPostIt->GetPostItField();
-        CPPUNIT_ASSERT(pPostItField);
-        CPPUNIT_ASSERT_EQUAL(u"Author3"_ustr, pPostItField->GetPar1());
+    // Select "Comment thread 1 reply 2"
+    CPPUNIT_ASSERT(aPostItFields[2]->mpPostIt);
+    const SwPostItField* pPostItField = 
aPostItFields[2]->mpPostIt->GetPostItField();
+    CPPUNIT_ASSERT(pPostItField);
+    CPPUNIT_ASSERT_EQUAL(u"Author3"_ustr, pPostItField->GetPar1());
 
-        pPostItMgr->SetActiveSidebarWin(aPostItFields[2]->mpPostIt);
-        dispatchCommand(mxComponent, u".uno:DeleteAuthor"_ustr, {});
+    pPostItMgr->SetActiveSidebarWin(aPostItFields[2]->mpPostIt);
+    dispatchCommand(mxComponent, u".uno:DeleteAuthor"_ustr, {});
 
-        CPPUNIT_ASSERT_EQUAL(size_t(4), aPostItFields.size());
-        for (size_t i = 0; i < aPostItFields.size(); ++i)
-        {
-            CPPUNIT_ASSERT(aPostItFields[i]);
-            CPPUNIT_ASSERT(aPostItFields[i]->mpPostIt);
-            CPPUNIT_ASSERT(aPostItFields[i]->mpPostIt->GetPostItField());
-            
CPPUNIT_ASSERT(aPostItFields[i]->mpPostIt->GetPostItField()->GetPar1() != 
"Author3");
-        }
+    CPPUNIT_ASSERT_EQUAL(size_t(4), aPostItFields.size());
+    for (size_t i = 0; i < aPostItFields.size(); ++i)
+    {
+        CPPUNIT_ASSERT(aPostItFields[i]);
+        CPPUNIT_ASSERT(aPostItFields[i]->mpPostIt);
+        CPPUNIT_ASSERT(aPostItFields[i]->mpPostIt->GetPostItField());
+        CPPUNIT_ASSERT(aPostItFields[i]->mpPostIt->GetPostItField()->GetPar1() 
!= "Author3");
     }
+}
 
-    // load it anew
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest11, testTdf108791_8)
+{
     createSwDoc("tdf108791_comments_with_tracked_changes.docx");
 
-    {
-        // Test "Delete All Comments": all comments must be deleted
+    // Test "Delete All Comments": all comments must be deleted
 
-        SwPostItMgr* pPostItMgr = getPostItMgr(getSwDocShell());
-        auto& aPostItFields = pPostItMgr->GetPostItFields();
+    SwPostItMgr* pPostItMgr = getPostItMgr(getSwDocShell());
+    auto& aPostItFields = pPostItMgr->GetPostItFields();
 
-        CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
-        for (size_t i = 0; i < aPostItFields.size(); ++i)
-        {
-            CPPUNIT_ASSERT(aPostItFields[i]);
-            CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::VISIBLE,
-                                 aPostItFields[i]->mLayoutStatus);
-        }
+    CPPUNIT_ASSERT_EQUAL(size_t(6), aPostItFields.size());
+    for (size_t i = 0; i < aPostItFields.size(); ++i)
+    {
+        CPPUNIT_ASSERT(aPostItFields[i]);
+        CPPUNIT_ASSERT_EQUAL(SwPostItHelper::SwLayoutStatus::VISIBLE,
+                             aPostItFields[i]->mLayoutStatus);
+    }
 
-        // Select any comment
-        CPPUNIT_ASSERT(aPostItFields[2]->mpPostIt);
+    // Select any comment
+    CPPUNIT_ASSERT(aPostItFields[2]->mpPostIt);
 
-        pPostItMgr->SetActiveSidebarWin(aPostItFields[2]->mpPostIt);
-        dispatchCommand(mxComponent, u".uno:DeleteAllNotes"_ustr, {});
+    pPostItMgr->SetActiveSidebarWin(aPostItFields[2]->mpPostIt);
+    dispatchCommand(mxComponent, u".uno:DeleteAllNotes"_ustr, {});
 
-        CPPUNIT_ASSERT(aPostItFields.empty());
-    }
+    CPPUNIT_ASSERT(aPostItFields.empty());
 }
 
 CPPUNIT_TEST_FIXTURE(SwUiWriterTest11, testTdf162120AutoRTL)
diff --git a/sw/qa/extras/uiwriter/uiwriter3.cxx 
b/sw/qa/extras/uiwriter/uiwriter3.cxx
index 980719dec8bb..cc77c1f83787 100644
--- a/sw/qa/extras/uiwriter/uiwriter3.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter3.cxx
@@ -62,6 +62,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, 
testPlaceholderHTMLPaste)
         dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
     }
 
+    dispose();
     createSwDoc("placeholder-bold.fodt");
 
     // select placeholder field
@@ -148,6 +149,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, 
testPlaceholderHTMLPasteStyleOverride)
         dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
     }
 
+    dispose();
     createSwDoc("placeholder-bold-style-override.fodt");
 
     // select placeholder field
@@ -1027,6 +1029,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf128375)
         dispatchCommand(mxComponent, u".uno:Cut"_ustr, {});
 
         CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xIndexAccess->getCount());
+        dispose();
     }
 }
 
@@ -2796,6 +2799,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf140061)
 
     dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
 
+    dispose();
     createSwDoc();
     dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
 
diff --git a/sw/qa/extras/uiwriter/uiwriter4.cxx 
b/sw/qa/extras/uiwriter/uiwriter4.cxx
index 0c0583cdcb72..72a1b5eece2f 100644
--- a/sw/qa/extras/uiwriter/uiwriter4.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter4.cxx
@@ -443,16 +443,20 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf148148)
                          lcl_translitTest(*pDoc, *pCursor, 
TF::LOWERCASE_UPPERCASE));
     CPPUNIT_ASSERT_EQUAL(u"   text"_ustr,
                          lcl_translitTest(*pDoc, *pCursor, 
TF::UPPERCASE_LOWERCASE));
+}
 
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf148148_2)
+{
+    using TF = TransliterationFlags;
     /* Test what happens when node contains text but selection does not 
contain any text */
     createSwDoc();
-    pDoc = getSwDoc();
-    pWrtShell = getSwDocShell()->GetWrtShell();
+    SwDoc* pDoc = getSwDoc();
+    SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
     pWrtShell->SttEndDoc(/*bStt=*/false);
     pWrtShell->Insert(u"text   "_ustr);
 
     pWrtShell->StartOfSection();
-    pCursor = pWrtShell->getShellCursor(false);
+    SwShellCursor* pCursor = pWrtShell->getShellCursor(false);
     for (int i = 0; i < 4; i++)
     {
         pCursor->Move(fnMoveForward);
@@ -469,16 +473,20 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf148148)
                          lcl_translitTest(*pDoc, *pCursor, 
TF::LOWERCASE_UPPERCASE));
     CPPUNIT_ASSERT_EQUAL(u"text   "_ustr,
                          lcl_translitTest(*pDoc, *pCursor, 
TF::UPPERCASE_LOWERCASE));
+}
 
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf148148_3)
+{
+    using TF = TransliterationFlags;
     /* Test what happens when node contains only non-word text but selection 
does not contain any text */
     createSwDoc();
-    pDoc = getSwDoc();
-    pWrtShell = getSwDocShell()->GetWrtShell();
+    SwDoc* pDoc = getSwDoc();
+    SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
     pWrtShell->SttEndDoc(/*bStt=*/false);
     pWrtShell->Insert(u"-1   "_ustr);
 
     pWrtShell->StartOfSection();
-    pCursor = pWrtShell->getShellCursor(false);
+    SwShellCursor* pCursor = pWrtShell->getShellCursor(false);
     for (int i = 0; i < 2; i++)
     {
         pCursor->Move(fnMoveForward);
@@ -493,15 +501,19 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf148148)
     CPPUNIT_ASSERT_EQUAL(u"-1   "_ustr, lcl_translitTest(*pDoc, *pCursor, 
TF::TITLE_CASE));
     CPPUNIT_ASSERT_EQUAL(u"-1   "_ustr, lcl_translitTest(*pDoc, *pCursor, 
TF::LOWERCASE_UPPERCASE));
     CPPUNIT_ASSERT_EQUAL(u"-1   "_ustr, lcl_translitTest(*pDoc, *pCursor, 
TF::UPPERCASE_LOWERCASE));
+}
 
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf148148_4)
+{
+    using TF = TransliterationFlags;
     createSwDoc();
-    pDoc = getSwDoc();
-    pWrtShell = getSwDocShell()->GetWrtShell();
+    SwDoc* pDoc = getSwDoc();
+    SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
     pWrtShell->SttEndDoc(/*bStt=*/false);
     pWrtShell->Insert(u"   -1"_ustr);
 
     pWrtShell->StartOfSection();
-    pCursor = pWrtShell->getShellCursor(false);
+    SwShellCursor* pCursor = pWrtShell->getShellCursor(false);
     pCursor->SetMark();
     for (int i = 0; i < 2; i++)
     {
@@ -512,16 +524,20 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf148148)
     CPPUNIT_ASSERT_EQUAL(u"   -1"_ustr, lcl_translitTest(*pDoc, *pCursor, 
TF::TITLE_CASE));
     CPPUNIT_ASSERT_EQUAL(u"   -1"_ustr, lcl_translitTest(*pDoc, *pCursor, 
TF::LOWERCASE_UPPERCASE));
     CPPUNIT_ASSERT_EQUAL(u"   -1"_ustr, lcl_translitTest(*pDoc, *pCursor, 
TF::UPPERCASE_LOWERCASE));
+}
 
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf148148_5)
+{
+    using TF = TransliterationFlags;
     /* Test what happens when node and selection contains only non-word text */
     createSwDoc();
-    pDoc = getSwDoc();
-    pWrtShell = getSwDocShell()->GetWrtShell();
+    SwDoc* pDoc = getSwDoc();
+    SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
     pWrtShell->SttEndDoc(/*bStt=*/false);
     pWrtShell->Insert(u"   -1"_ustr);
 
     pWrtShell->StartOfSection();
-    pCursor = pWrtShell->getShellCursor(false);
+    SwShellCursor* pCursor = pWrtShell->getShellCursor(false);
     pCursor->SetMark();
     for (int i = 0; i < 5; i++)
     {
@@ -1046,7 +1062,6 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testSmallCaps)
 {
     // Create a document, add some characters and select them.
     createSwDoc();
-    createSwDoc();
     SwDocShell* pDocShell = getSwDocShell();
     SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
     pWrtShell->Insert(u"text"_ustr);
@@ -2095,7 +2110,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf106736)
     CPPUNIT_ASSERT_MESSAGE("Left Tab width is ~103", nWidth < 150);
 }
 
-CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testMsWordCompTrailingBlanks)
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testMsWordCompTrailingBlanks_True)
 {
     // The option is true in settings.xml
     createSwDoc("MsWordCompTrailingBlanksTrue.odt");
@@ -2161,14 +2176,17 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, 
testMsWordCompTrailingBlanks)
                 u"PortionType::Hole");
     assertXPath(pXmlDoc, 
"/root/page/body/txt[3]/SwParaPortion/SwLineLayout/child::*[4]", "portion",
                 u"         "); // All the trailing blanks
+}
 
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testMsWordCompTrailingBlanks_false)
+{
     // The option is false in settings.xml
     createSwDoc("MsWordCompTrailingBlanksFalse.odt");
-    pDoc = getSwDoc();
+    SwDoc* pDoc = getSwDoc();
     CPPUNIT_ASSERT_EQUAL(false, pDoc->getIDocumentSettingAccess().get(
                                     
DocumentSettingId::MS_WORD_COMP_TRAILING_BLANKS));
     calcLayout();
-    pXmlDoc = parseLayoutDump();
+    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
     // Check that trailing spaces spans are put into Text portions if option 
is disabled
 
     assertXPath(pXmlDoc, "/root/page/body/txt", 3);
@@ -2238,16 +2256,22 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, 
testMsWordCompTrailingBlanks)
                 u"PortionType::Text");
     assertXPath(pXmlDoc, 
"/root/page/body/txt[3]/SwParaPortion/SwLineLayout/child::*[5]", "portion",
                 u"   "); // third colored trailing blank span here
+}
 
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, 
testMsWordCompTrailingBlanks_EmptyDocument)
+{
     // MsWordCompTrailingBlanks option should be false by default in new 
documents
     createSwDoc();
-    pDoc = getSwDoc();
+    SwDoc* pDoc = getSwDoc();
     CPPUNIT_ASSERT_EQUAL(false, pDoc->getIDocumentSettingAccess().get(
                                     
DocumentSettingId::MS_WORD_COMP_TRAILING_BLANKS));
+}
 
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testMsWordCompTrailingBlanks_Docx)
+{
     // The option should be true if a .docx, .doc or .rtf document is opened
     createSwDoc("MsWordCompTrailingBlanks.docx");
-    pDoc = getSwDoc();
+    SwDoc* pDoc = getSwDoc();
     CPPUNIT_ASSERT_EQUAL(true, pDoc->getIDocumentSettingAccess().get(
                                    
DocumentSettingId::MS_WORD_COMP_TRAILING_BLANKS));
 }
@@ -2585,6 +2609,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf143320)
     dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
 
     // Create a new document
+    dispose();
     createSwDoc();
     pWrtShell = getSwDocShell()->GetWrtShell();
     CPPUNIT_ASSERT(pWrtShell);
diff --git a/sw/qa/extras/uiwriter/uiwriter8.cxx 
b/sw/qa/extras/uiwriter/uiwriter8.cxx
index 92faf122ec0a..68cdb4437dcd 100644
--- a/sw/qa/extras/uiwriter/uiwriter8.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter8.cxx
@@ -1360,6 +1360,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest8, testTdf156546)
     dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
 
     // create another document
+    dispose();
     createSwDoc();
     dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
 
@@ -1544,6 +1545,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest8, testTdf121546)
     CPPUNIT_ASSERT_EQUAL(1, getParagraphs());
 
     // Create a new document
+    dispose();
     createSwDoc();
 
     dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
@@ -1600,6 +1602,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest8, testTdf134626)
     dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
 
     // Create a new document
+    dispose();
     createSwDoc();
     pWrtShell = getSwDocShell()->GetWrtShell();
     CPPUNIT_ASSERT(pWrtShell);
@@ -3095,6 +3098,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest8, testTdf157129)
     dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
 
     // Create a new document
+    dispose();
     createSwDoc();
     SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
 
diff --git a/sw/qa/uibase/fldui/fldui.cxx b/sw/qa/uibase/fldui/fldui.cxx
index 7cad0330dccf..3d442a52c3fa 100644
--- a/sw/qa/uibase/fldui/fldui.cxx
+++ b/sw/qa/uibase/fldui/fldui.cxx
@@ -164,37 +164,62 @@ CPPUNIT_TEST_FIXTURE(Test, 
testTdf68364InsertConditionalFieldWithTwoDots)
     CPPUNIT_ASSERT_EQUAL(u"19.12.2023"_ustr, 
pWrtShell->GetCurField()->ExpandField(true, nullptr));
 }
 
-CPPUNIT_TEST_FIXTURE(Test, testTdf170392FilenameFormatConstantsIdl)
+CPPUNIT_TEST_FIXTURE(Test, testTdf170392FilenameFormatConstantsIdl_Name)
 {
-    SwFileNameFormat aFormats[] = { SwFileNameFormat::Name, 
SwFileNameFormat::Path };
-    for (SwFileNameFormat eFormat : aFormats)
-    {
-        // Create an empty document
-        createSwDoc();
-        SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
-
-        // Insert a filename field containing a specific format
-        SwFieldMgr aFieldMgr(pWrtShell);
-        SwInsertField_Data aFieldData(SwFieldTypesEnum::Filename, 0, u""_ustr, 
u""_ustr,
-                                      static_cast<sal_uInt32>(eFormat));
-        CPPUNIT_ASSERT(aFieldMgr.InsertField(aFieldData));
-
-        // First reload in order to get a value for the filename field
-        saveAndReload(TestFilter::ODT);
-        pWrtShell = getSwDocShell()->GetWrtShell();
-        pWrtShell->SttEndDoc(true);
-        const auto aExpandedField = 
pWrtShell->GetCurField()->ExpandField(true, nullptr);
-
-        // Second reload in order to check consistency for the filename field
-        saveAndReload(TestFilter::ODT);
-        pWrtShell = getSwDocShell()->GetWrtShell();
-        pWrtShell->SttEndDoc(true);
-
-        // Without the accompanying fix in place, this test would have failed 
with:
-        // - Expected: filename field is the same
-        // - Actual  : filename field differ since the filename format 
constants differ
-        CPPUNIT_ASSERT_EQUAL(aExpandedField, 
pWrtShell->GetCurField()->ExpandField(true, nullptr));
-    }
+    // Create an empty document
+    createSwDoc();
+    SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+
+    // Insert a filename field containing a specific format
+    SwFieldMgr aFieldMgr(pWrtShell);
+    SwInsertField_Data aFieldData(SwFieldTypesEnum::Filename, 0, u""_ustr, 
u""_ustr,
+                                  
static_cast<sal_uInt32>(SwFileNameFormat::Name));
+    CPPUNIT_ASSERT(aFieldMgr.InsertField(aFieldData));
+
+    // First reload in order to get a value for the filename field
+    saveAndReload(TestFilter::ODT);
+    pWrtShell = getSwDocShell()->GetWrtShell();
+    pWrtShell->SttEndDoc(true);
+    const auto aExpandedField = pWrtShell->GetCurField()->ExpandField(true, 
nullptr);
+
+    // Second reload in order to check consistency for the filename field
+    saveAndReload(TestFilter::ODT);
+    pWrtShell = getSwDocShell()->GetWrtShell();
+    pWrtShell->SttEndDoc(true);
+
+    // Without the accompanying fix in place, this test would have failed with:
+    // - Expected: filename field is the same
+    // - Actual  : filename field differ since the filename format constants 
differ
+    CPPUNIT_ASSERT_EQUAL(aExpandedField, 
pWrtShell->GetCurField()->ExpandField(true, nullptr));
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testTdf170392FilenameFormatConstantsIdl_Path)
+{
+    // Create an empty document
+    createSwDoc();
+    SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+
+    // Insert a filename field containing a specific format
+    SwFieldMgr aFieldMgr(pWrtShell);
+    SwInsertField_Data aFieldData(SwFieldTypesEnum::Filename, 0, u""_ustr, 
u""_ustr,
+                                  
static_cast<sal_uInt32>(SwFileNameFormat::Path));
+    CPPUNIT_ASSERT(aFieldMgr.InsertField(aFieldData));
+
+    // First reload in order to get a value for the filename field
+    saveAndReload(TestFilter::ODT);
+    pWrtShell = getSwDocShell()->GetWrtShell();
+    pWrtShell->SttEndDoc(true);
+    const auto aExpandedField = pWrtShell->GetCurField()->ExpandField(true, 
nullptr);
+
+    // Second reload in order to check consistency for the filename field
+    saveAndReload(TestFilter::ODT);
+    pWrtShell = getSwDocShell()->GetWrtShell();
+    pWrtShell->SttEndDoc(true);
+
+    // Without the accompanying fix in place, this test would have failed with:
+    // - Expected: filename field is the same
+    // - Actual  : filename field differ since the filename format constants 
differ
+    CPPUNIT_ASSERT_EQUAL(aExpandedField, 
pWrtShell->GetCurField()->ExpandField(true, nullptr));
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testInsertRefmarkSelection)
diff --git a/sw/qa/unit/swmodeltestbase.cxx b/sw/qa/unit/swmodeltestbase.cxx
index 61f720b4b9ff..690f1620ab89 100644
--- a/sw/qa/unit/swmodeltestbase.cxx
+++ b/sw/qa/unit/swmodeltestbase.cxx
@@ -391,7 +391,7 @@ void SwModelTestBase::saveAndReload(TestFilter eFilter,
                                     const char* pPassword)
 {
     save(eFilter, rParams, pPassword);
-
+    dispose();
     loadURL(maTempFile.GetURL(), rParams, pPassword);
 }
 

Reply via email to