[Libreoffice-commits] core.git: sw/CppunitTest_sw_uiwriter4.mk sw/Module_sw.mk sw/qa

Xisco Fauli (via logerrit) logerrit at kemper.freedesktop.org
Mon Jun 7 14:52:59 UTC 2021


 sw/CppunitTest_sw_uiwriter4.mk      |   14 
 sw/Module_sw.mk                     |    1 
 sw/qa/extras/uiwriter/uiwriter.cxx  | 3296 --------------------------------
 sw/qa/extras/uiwriter/uiwriter4.cxx | 3651 ++++++++++++++++++++++++++++++++++++
 4 files changed, 3686 insertions(+), 3276 deletions(-)

New commits:
commit a0bbeef0a8d9eeccc9ab9857851e0658139f2e1c
Author:     Xisco Fauli <xiscofauli at libreoffice.org>
AuthorDate: Mon Jun 7 15:31:29 2021 +0200
Commit:     Xisco Fauli <xiscofauli at libreoffice.org>
CommitDate: Mon Jun 7 16:52:14 2021 +0200

    sw_uiwriter: split uiwriter into 2
    
    it already has 230 tests
    
    Change-Id: Id06ffb791cf65342676e6d7076105773c8137685
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116784
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofauli at libreoffice.org>

diff --git a/sw/CppunitTest_sw_uiwriter4.mk b/sw/CppunitTest_sw_uiwriter4.mk
new file mode 100644
index 000000000000..8614c3746008
--- /dev/null
+++ b/sw/CppunitTest_sw_uiwriter4.mk
@@ -0,0 +1,14 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#*************************************************************************
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+#*************************************************************************
+
+$(eval $(call sw_uiwriter_test,4))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sw/Module_sw.mk b/sw/Module_sw.mk
index d0ebbea8df45..80cad58b1bdc 100644
--- a/sw/Module_sw.mk
+++ b/sw/Module_sw.mk
@@ -109,6 +109,7 @@ $(eval $(call gb_Module_add_slowcheck_targets,sw,\
         CppunitTest_sw_uiwriter \
         CppunitTest_sw_uiwriter2 \
         CppunitTest_sw_uiwriter3 \
+        CppunitTest_sw_uiwriter4 \
     ) \
     CppunitTest_sw_layoutwriter \
     CppunitTest_sw_layoutwriter2 \
diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx
index a70cab6cd394..c6bac664bac3 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -287,122 +287,7 @@ public:
     void testTdf77014();
     void testTdf92648();
     void testTdf103978_backgroundTextShape();
-    void testTdf96515();
-    void testTdf96943();
-    void testTdf96536();
-    void testTdf96479();
-    void testBookmarkCollapsed();
-    void testRemoveBookmarkText();
-    void testRemoveBookmarkTextAndAddNew();
-    void testRemoveBookmarkTextAndAddNewAfterReload();
-    void testTdf96961();
-    void testTdf88453();
-    void testTdf88453Table();
-    void testClassificationPaste();
-    void testSmallCaps();
-    void testTdf98987();
-    void testTdf99004();
-    void testTdf84695();
-    void testTdf84695NormalChar();
-    void testTdf84695Tab();
-    void testTableStyleUndo();
-    void testRedlineCopyPaste();
-    void testTdf135260();
-    void testRedlineParam();
-    void testRedlineViewAuthor();
-    void testTdf91292();
-    void testTdf78727();
-    void testRedlineTimestamp();
-    void testCursorWindows();
-    void testLandscape();
-    void testTdf95699();
-    void testTdf104032();
-    void testTdf104440();
-    void testTdf104425();
-    void testTdf104814();
-    void testTdf66405();
-    void testTdf35021_tabOverMarginDemo();
-    void testTdf106701_tabOverMarginAutotab();
-    void testTdf104492();
-    void testTdf107025();
-    void testTdf107362();
-    void testTdf105417();
-    void testTdf105625();
-    void testTdf125151_protected();
-    void testTdf125151_protectedB();
-    void testTdf106736();
-    void testTdf58604();
-    void testTdf112025();
-    void testTdf72942();
-
-    void testTdf113877_mergeDocs(const char* aDestDoc, const char* aInsertDoc);
-    void testTdf113877();
-    void testTdf113877NoMerge();
-    void testTdf113877_default_style();
-    void testTdf113877_Standard_style();
-    void testTdf113877_blank_bold_on();
-    void testTdf113877_blank_bold_off();
-
-    void testMsWordCompTrailingBlanks();
-    void testCreateDocxAnnotation();
-    void testTdf107976();
-    void testTdf142157();
-    void testTdf108524();
-    void testRhbz1810732();
-    void testTableInSection();
-    void testTableInNestedSection();
-    void testTableInSectionInTable();
-    void testSectionInTableInTable();
-    void testSectionInTableInTable2();
-    void testSectionInTableInTable3();
-    void testSectionInTableInTable4();
-    void testTdf112160();
-    void testLinesMoveBackwardsInSectionInTable();
-    void testTdf112741();
-    void testTdf112860();
-    void testTdf113287();
-    void testTdf113445();
-    void testTdf113686();
-    void testFontEmbedding();
-    void testLinesInSectionInTable();
-    void testParagraphOfTextRange();
-    void testTdf99689TableOfContents();
-    void testTdf99689TableOfFigures();
-    void testTdf99689TableOfTables();
-    void testTdf112448();
-    void testTdf113790();
-    void testTdf108048();
-    void testTdf114306();
-    void testTdf114306_2();
-    void testTdf113481();
-    void testTdf115013();
-    void testTdf114536();
-    void testTdf115065();
-    void testTdf115132();
-    void testXDrawPagesSupplier();
-    void testTdf116403();
-    void testHtmlCopyImages();
-    void testTdf116789();
     void testTdf117225();
-    void testTdf91801();
-    void testTdf51223();
-    void testTdf108423();
-    void testTdf106164();
-    void testTdf54409();
-    void testTdf38394();
-    void testTdf59666();
-    void testTdf133524();
-    void testTdf133524_Romanian();
-    void testTdf128860();
-    void testTdf123786();
-    void testTdf133589();
-    void testInconsistentBookmark();
-    void testInsertLongDateFormat();
-    void testSpellOnlineParameter();
-    void testRedlineAutoCorrect();
-    void testRedlineAutoCorrect2();
-    void testEmojiAutoCorrect();
-    void testInsertPdf();
 
     CPPUNIT_TEST_SUITE(SwUiWriterTest);
     CPPUNIT_TEST(testReplaceForward);
@@ -522,119 +407,7 @@ public:
     CPPUNIT_TEST(testTdf77014);
     CPPUNIT_TEST(testTdf92648);
     CPPUNIT_TEST(testTdf103978_backgroundTextShape);
-    CPPUNIT_TEST(testTdf96515);
-    CPPUNIT_TEST(testTdf96943);
-    CPPUNIT_TEST(testTdf96536);
-    CPPUNIT_TEST(testTdf96479);
-    CPPUNIT_TEST(testBookmarkCollapsed);
-    CPPUNIT_TEST(testRemoveBookmarkText);
-    CPPUNIT_TEST(testRemoveBookmarkTextAndAddNew);
-    CPPUNIT_TEST(testRemoveBookmarkTextAndAddNewAfterReload);
-    CPPUNIT_TEST(testTdf96961);
-    CPPUNIT_TEST(testTdf88453);
-    CPPUNIT_TEST(testTdf88453Table);
-    CPPUNIT_TEST(testClassificationPaste);
-    CPPUNIT_TEST(testSmallCaps);
-    CPPUNIT_TEST(testTdf98987);
-    CPPUNIT_TEST(testTdf99004);
-    CPPUNIT_TEST(testTdf84695);
-    CPPUNIT_TEST(testTdf84695NormalChar);
-    CPPUNIT_TEST(testTdf84695Tab);
-    CPPUNIT_TEST(testTableStyleUndo);
-    CPPUNIT_TEST(testRedlineCopyPaste);
-    CPPUNIT_TEST(testTdf135260);
-    CPPUNIT_TEST(testRedlineParam);
-    CPPUNIT_TEST(testRedlineViewAuthor);
-    CPPUNIT_TEST(testTdf91292);
-    CPPUNIT_TEST(testTdf78727);
-    CPPUNIT_TEST(testRedlineTimestamp);
-    CPPUNIT_TEST(testCursorWindows);
-    CPPUNIT_TEST(testLandscape);
-    CPPUNIT_TEST(testTdf95699);
-    CPPUNIT_TEST(testTdf104032);
-    CPPUNIT_TEST(testTdf104440);
-    CPPUNIT_TEST(testTdf104425);
-    CPPUNIT_TEST(testTdf104814);
-    CPPUNIT_TEST(testTdf66405);
-    CPPUNIT_TEST(testTdf35021_tabOverMarginDemo);
-    CPPUNIT_TEST(testTdf106701_tabOverMarginAutotab);
-    CPPUNIT_TEST(testTdf104492);
-    CPPUNIT_TEST(testTdf107025);
-    CPPUNIT_TEST(testTdf107362);
-    CPPUNIT_TEST(testTdf105417);
-    CPPUNIT_TEST(testTdf105625);
-    CPPUNIT_TEST(testTdf125151_protected);
-    CPPUNIT_TEST(testTdf125151_protectedB);
-    CPPUNIT_TEST(testTdf106736);
-    CPPUNIT_TEST(testTdf58604);
-    CPPUNIT_TEST(testTdf112025);
-    CPPUNIT_TEST(testTdf72942);
-    CPPUNIT_TEST(testTdf113877);
-    CPPUNIT_TEST(testTdf113877NoMerge);
-    CPPUNIT_TEST(testTdf113877_default_style);
-    CPPUNIT_TEST(testTdf113877_Standard_style);
-    CPPUNIT_TEST(testTdf113877_blank_bold_on);
-    CPPUNIT_TEST(testTdf113877_blank_bold_off);
-    CPPUNIT_TEST(testMsWordCompTrailingBlanks);
-    CPPUNIT_TEST(testCreateDocxAnnotation);
-    CPPUNIT_TEST(testTdf107976);
-    CPPUNIT_TEST(testTdf142157);
-    CPPUNIT_TEST(testTdf108524);
-    CPPUNIT_TEST(testRhbz1810732);
-    CPPUNIT_TEST(testTableInSection);
-    CPPUNIT_TEST(testTableInNestedSection);
-    CPPUNIT_TEST(testTableInSectionInTable);
-    CPPUNIT_TEST(testSectionInTableInTable);
-    CPPUNIT_TEST(testSectionInTableInTable2);
-    CPPUNIT_TEST(testSectionInTableInTable3);
-    CPPUNIT_TEST(testSectionInTableInTable4);
-    CPPUNIT_TEST(testTdf112160);
-    CPPUNIT_TEST(testLinesMoveBackwardsInSectionInTable);
-    CPPUNIT_TEST(testTdf112741);
-    CPPUNIT_TEST(testTdf112860);
-    CPPUNIT_TEST(testTdf113287);
-    CPPUNIT_TEST(testTdf113445);
-    CPPUNIT_TEST(testTdf113686);
-    CPPUNIT_TEST(testFontEmbedding);
-    CPPUNIT_TEST(testLinesInSectionInTable);
-    CPPUNIT_TEST(testParagraphOfTextRange);
-    CPPUNIT_TEST(testTdf99689TableOfContents);
-    CPPUNIT_TEST(testTdf99689TableOfFigures);
-    CPPUNIT_TEST(testTdf99689TableOfTables);
-    CPPUNIT_TEST(testTdf112448);
-    CPPUNIT_TEST(testTdf113790);
-    CPPUNIT_TEST(testTdf108048);
-    CPPUNIT_TEST(testTdf114306);
-    CPPUNIT_TEST(testTdf114306_2);
-    CPPUNIT_TEST(testTdf113481);
-    CPPUNIT_TEST(testTdf115013);
-    CPPUNIT_TEST(testTdf114536);
-    CPPUNIT_TEST(testTdf115065);
-    CPPUNIT_TEST(testTdf115132);
-    CPPUNIT_TEST(testXDrawPagesSupplier);
-    CPPUNIT_TEST(testTdf116403);
-    CPPUNIT_TEST(testHtmlCopyImages);
-    CPPUNIT_TEST(testTdf116789);
     CPPUNIT_TEST(testTdf117225);
-    CPPUNIT_TEST(testTdf91801);
-    CPPUNIT_TEST(testTdf51223);
-    CPPUNIT_TEST(testInconsistentBookmark);
-    CPPUNIT_TEST(testTdf108423);
-    CPPUNIT_TEST(testTdf106164);
-    CPPUNIT_TEST(testTdf54409);
-    CPPUNIT_TEST(testTdf38394);
-    CPPUNIT_TEST(testTdf59666);
-    CPPUNIT_TEST(testTdf133524);
-    CPPUNIT_TEST(testTdf133524_Romanian);
-    CPPUNIT_TEST(testTdf128860);
-    CPPUNIT_TEST(testTdf123786);
-    CPPUNIT_TEST(testTdf133589);
-    CPPUNIT_TEST(testInsertLongDateFormat);
-    CPPUNIT_TEST(testSpellOnlineParameter);
-    CPPUNIT_TEST(testRedlineAutoCorrect);
-    CPPUNIT_TEST(testRedlineAutoCorrect2);
-    CPPUNIT_TEST(testEmojiAutoCorrect);
-    CPPUNIT_TEST(testInsertPdf);
     CPPUNIT_TEST_SUITE_END();
 
 private:
@@ -3772,101 +3545,6 @@ void SwUiWriterTest::testTdf75137()
     CPPUNIT_ASSERT(firstIndex != secondIndex);
 }
 
-namespace
-{
-    sal_Int32 lcl_getAttributeIDFromHints( const SwpHints& hints )
-    {
-        for (size_t i = 0; i < hints.Count(); ++i)
-        {
-            const SwTextAttr* hint = hints.Get(i);
-            if( hint->Which() == RES_TXTATR_AUTOFMT )
-            {
-                const SwFormatAutoFormat& rFmt = hint->GetAutoFormat();
-                SfxItemIter aIter( *rFmt.GetStyleHandle() );
-                return aIter.GetCurItem()->Which();
-            }
-        }
-        return -1;
-    }
-}
-
-void SwUiWriterTest::testTdf99689TableOfContents()
-{
-    SwDoc* pDoc = createDoc("tdf99689.odt");
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    pWrtShell->GotoNextTOXBase();
-    const SwTOXBase* pTOXBase = pWrtShell->GetCurTOX();
-    pWrtShell->UpdateTableOf(*pTOXBase);
-    SwCursorShell * pShell(pDoc->GetEditShell());
-    SwTextNode* pTitleNode = pShell->GetCursor()->GetNode().GetTextNode();
-    SwNodeIndex aIdx ( *pTitleNode );
-    // skip the title
-    pDoc->GetNodes().GoNext( &aIdx );
-
-    // skip the first header. No attributes there.
-    // next node should contain superscript
-    SwTextNode* pNext = static_cast<SwTextNode*> (pDoc->GetNodes().GoNext( &aIdx ));
-    CPPUNIT_ASSERT( pNext->HasHints() );
-    sal_uInt16 nAttrType = lcl_getAttributeIDFromHints( pNext->GetSwpHints() );
-    CPPUNIT_ASSERT_EQUAL(sal_uInt16(RES_CHRATR_ESCAPEMENT), nAttrType );
-
-    // next node should contain subscript
-    pNext = static_cast<SwTextNode*> (pDoc->GetNodes().GoNext( &aIdx ));
-    CPPUNIT_ASSERT( pNext->HasHints() );
-    nAttrType = lcl_getAttributeIDFromHints( pNext->GetSwpHints() );
-    CPPUNIT_ASSERT_EQUAL(sal_uInt16(RES_CHRATR_ESCAPEMENT), nAttrType );
-}
-
-void SwUiWriterTest::testTdf99689TableOfFigures()
-{
-    SwDoc* pDoc = createDoc("tdf99689_figures.odt");
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    pWrtShell->GotoNextTOXBase();
-    const SwTOXBase* pTOXBase = pWrtShell->GetCurTOX();
-    pWrtShell->UpdateTableOf(*pTOXBase);
-    SwCursorShell * pShell(pDoc->GetEditShell());
-    SwTextNode* pTitleNode = pShell->GetCursor()->GetNode().GetTextNode();
-    SwNodeIndex aIdx ( *pTitleNode );
-
-    // skip the title
-    // next node should contain subscript
-    SwTextNode* pNext = static_cast<SwTextNode*> (pDoc->GetNodes().GoNext( &aIdx ));
-    CPPUNIT_ASSERT( pNext->HasHints() );
-    sal_uInt16 nAttrType = lcl_getAttributeIDFromHints( pNext->GetSwpHints() );
-    CPPUNIT_ASSERT_EQUAL(sal_uInt16(RES_CHRATR_ESCAPEMENT), nAttrType );
-
-    // next node should contain superscript
-    pNext = static_cast<SwTextNode*> (pDoc->GetNodes().GoNext( &aIdx ));
-    CPPUNIT_ASSERT( pNext->HasHints() );
-    nAttrType = lcl_getAttributeIDFromHints( pNext->GetSwpHints() );
-    CPPUNIT_ASSERT_EQUAL(sal_uInt16(RES_CHRATR_ESCAPEMENT), nAttrType );
-}
-
-void SwUiWriterTest::testTdf99689TableOfTables()
-{
-    SwDoc* pDoc = createDoc("tdf99689_tables.odt");
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    pWrtShell->GotoNextTOXBase();
-    const SwTOXBase* pTOXBase = pWrtShell->GetCurTOX();
-    pWrtShell->UpdateTableOf(*pTOXBase);
-    SwCursorShell * pShell(pDoc->GetEditShell());
-    SwTextNode* pTitleNode = pShell->GetCursor()->GetNode().GetTextNode();
-    SwNodeIndex aIdx ( *pTitleNode );
-
-    // skip the title
-    // next node should contain superscript
-    SwTextNode* pNext = static_cast<SwTextNode*> (pDoc->GetNodes().GoNext( &aIdx ));
-    CPPUNIT_ASSERT( pNext->HasHints() );
-    sal_uInt16 nAttrType = lcl_getAttributeIDFromHints( pNext->GetSwpHints() );
-    CPPUNIT_ASSERT_EQUAL(sal_uInt16(RES_CHRATR_ESCAPEMENT), nAttrType );
-
-    // next node should contain subscript
-    pNext = static_cast<SwTextNode*> (pDoc->GetNodes().GoNext( &aIdx ));
-    CPPUNIT_ASSERT( pNext->HasHints() );
-    nAttrType = lcl_getAttributeIDFromHints( pNext->GetSwpHints() );
-    CPPUNIT_ASSERT_EQUAL(sal_uInt16(RES_CHRATR_ESCAPEMENT), nAttrType );
-}
-
 void SwUiWriterTest::testTdf83798()
 {
     SwDoc* pDoc = createDoc("tdf83798.odt");
@@ -4911,2964 +4589,30 @@ void SwUiWriterTest::testTdf103978_backgroundTextShape()
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Number of TextBoxes", sal_Int32(1), nCount);
 }
 
-void SwUiWriterTest::testTdf96515()
-{
-    // Enable hide whitespace mode.
-    SwDoc* pDoc = createDoc();
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    SwViewOption aViewOptions(*pWrtShell->GetViewOptions());
-    aViewOptions.SetHideWhitespaceMode(true);
-    pWrtShell->ApplyViewOptions(aViewOptions);
-    CPPUNIT_ASSERT(pWrtShell->GetViewOptions()->IsWhitespaceHidden());
-
-    // Insert a new paragraph at the end of the document.
-    uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
-    uno::Reference<text::XParagraphAppend> xParagraphAppend(xTextDocument->getText(), uno::UNO_QUERY);
-    xParagraphAppend->finishParagraph(uno::Sequence<beans::PropertyValue>());
-    calcLayout();
-
-    // This was 2, a new page was created for the new paragraph.
-    CPPUNIT_ASSERT_EQUAL(1, getPages());
-}
-
-void SwUiWriterTest::testTdf96943()
-{
-    // Enable hide whitespace mode.
-    SwDoc* pDoc = createDoc("tdf96943.odt");
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    SwViewOption aViewOptions(*pWrtShell->GetViewOptions());
-    aViewOptions.SetHideWhitespaceMode(true);
-    pWrtShell->ApplyViewOptions(aViewOptions);
-
-    // Insert a new character at the end of the document.
-    pWrtShell->SttEndDoc(/*bStt=*/false);
-    pWrtShell->Insert("d");
-
-    // This was 2, a new page was created for the new layout line.
-    CPPUNIT_ASSERT_EQUAL(1, getPages());
-}
-
-void SwUiWriterTest::testTdf96536()
-{
-    // Enable hide whitespace mode.
-    SwDoc* pDoc = createDoc();
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    SwViewOption aViewOptions(*pWrtShell->GetViewOptions());
-    aViewOptions.SetHideWhitespaceMode(true);
-    pWrtShell->ApplyViewOptions(aViewOptions);
-    CPPUNIT_ASSERT(pWrtShell->GetViewOptions()->IsWhitespaceHidden());
-
-    // Insert a page break and go back to the first page.
-    pWrtShell->InsertPageBreak();
-    pWrtShell->SttEndDoc(/*bStt=*/true);
-    calcLayout();
-    sal_Int32 nSingleParaPageHeight = parseDump("/root/page[1]/infos/bounds", "height").toInt32();
-    discardDumpedLayout();
-
-    // Insert a 2nd paragraph at the end of the first page, so the page height grows at least twice...
-    uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
-    uno::Reference<text::XParagraphAppend> xParagraphAppend(xTextDocument->getText(), uno::UNO_QUERY);
-    const uno::Reference< text::XTextRange > xInsertPos = getRun(getParagraph(1), 1);
-    xParagraphAppend->finishParagraphInsert(uno::Sequence<beans::PropertyValue>(), xInsertPos);
-    calcLayout();
-    CPPUNIT_ASSERT(parseDump("/root/page[1]/infos/bounds", "height").toInt32() >= 2 * nSingleParaPageHeight);
-    discardDumpedLayout();
-
-    // ... and then delete the 2nd paragraph, which shrinks the page to the previous size.
-    uno::Reference<lang::XComponent> xParagraph(getParagraph(2), uno::UNO_QUERY);
-    xParagraph->dispose();
-    calcLayout();
-    CPPUNIT_ASSERT_EQUAL(nSingleParaPageHeight, parseDump("/root/page[1]/infos/bounds", "height").toInt32());
-}
-
-void SwUiWriterTest::testTdf96479()
-{
-    // We want to verify the empty input text field in the bookmark
-    static const OUString emptyInputTextField =
-        OUStringChar(CH_TXT_ATR_INPUTFIELDSTART) + OUStringChar(CH_TXT_ATR_INPUTFIELDEND);
-
-    SwDoc* pDoc = createDoc();
-    SwXTextDocument *pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get());
-    CPPUNIT_ASSERT(pTextDoc);
-
-    // So we can clean up all references for reload
-    {
-        // Append bookmark
-        SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1);
-        SwPaM aPaM(aIdx);
-        IDocumentMarkAccess &rIDMA = *pDoc->getIDocumentMarkAccess();
-        sw::mark::IMark *pMark =
-            rIDMA.makeMark(aPaM, "original",
-                IDocumentMarkAccess::MarkType::BOOKMARK,
-                ::sw::mark::InsertMode::New);
-        CPPUNIT_ASSERT(!pMark->IsExpanded());
-        CPPUNIT_ASSERT_EQUAL(sal_Int32(1), rIDMA.getBookmarksCount());
-
-        // Get helper objects
-        uno::Reference<text::XBookmarksSupplier> xBookmarksSupplier(mxComponent, uno::UNO_QUERY);
-        uno::Reference<css::lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
-
-        // Create cursor from bookmark
-        uno::Reference<text::XTextContent> xTextContent(xBookmarksSupplier->getBookmarks()->getByName("original"), uno::UNO_QUERY);
-        uno::Reference<text::XTextRange> xRange = xTextContent->getAnchor();
-        uno::Reference<text::XTextCursor> xCursor = xRange->getText()->createTextCursorByRange(xRange);
-        CPPUNIT_ASSERT(xCursor->isCollapsed());
-
-        // Remove bookmark
-        xRange->getText()->removeTextContent(xTextContent);
-        CPPUNIT_ASSERT_EQUAL(sal_Int32(0), rIDMA.getBookmarksCount());
-
-        // Insert replacement bookmark
-        uno::Reference<text::XTextContent> xBookmarkNew(xFactory->createInstance("com.sun.star.text.Bookmark"), uno::UNO_QUERY);
-        uno::Reference<container::XNamed> xBookmarkName(xBookmarkNew, uno::UNO_QUERY);
-        xBookmarkName->setName("replacement");
-        CPPUNIT_ASSERT(xCursor->isCollapsed());
-        // Force bookmark expansion
-        xCursor->getText()->insertString(xCursor, ".", true);
-        xCursor->getText()->insertTextContent(xCursor, xBookmarkNew, true);
-        CPPUNIT_ASSERT_EQUAL(sal_Int32(1), rIDMA.getBookmarksCount());
-        auto mark = *(rIDMA.getBookmarksBegin());
-        CPPUNIT_ASSERT(mark->IsExpanded());
-
-        // Create and insert input textfield with some content
-        uno::Reference<text::XTextField> xTextField(xFactory->createInstance("com.sun.star.text.TextField.Input"), uno::UNO_QUERY);
-        uno::Reference<text::XTextCursor> xCursorNew(xBookmarkNew->getAnchor()->getText()->createTextCursorByRange(xBookmarkNew->getAnchor()));
-        CPPUNIT_ASSERT(!xCursorNew->isCollapsed());
-        xCursorNew->getText()->insertTextContent(xCursorNew, xTextField, true);
-        xBookmarkNew = uno::Reference<text::XTextContent>(xBookmarksSupplier->getBookmarks()->getByName("replacement"), uno::UNO_QUERY);
-        xCursorNew = xBookmarkNew->getAnchor()->getText()->createTextCursorByRange(xBookmarkNew->getAnchor());
-        CPPUNIT_ASSERT(!xCursorNew->isCollapsed());
-
-        // Can't check the actual content of the text node via UNO
-        mark = *(rIDMA.getBookmarksBegin());
-        CPPUNIT_ASSERT(mark->IsExpanded());
-        SwPaM pam(mark->GetMarkStart(), mark->GetMarkEnd());
-        // Check for the actual bug, which didn't include CH_TXT_ATR_INPUTFIELDEND in the bookmark
-        CPPUNIT_ASSERT_EQUAL(emptyInputTextField, pam.GetText());
-    }
-
-    {
-        // Save and load cycle
-        // Actually not needed, but the bug symptom of a missing bookmark
-        // occurred because a broken bookmark was saved and loading silently
-        // dropped the broken bookmark!
-        utl::TempFile aTempFile;
-        save("writer8", aTempFile);
-        loadURL(aTempFile.GetURL(), nullptr);
-        pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get());
-        CPPUNIT_ASSERT(pTextDoc);
-        pDoc = pTextDoc->GetDocShell()->GetDoc();
-
-        // Lookup "replacement" bookmark
-        IDocumentMarkAccess &rIDMA = *pDoc->getIDocumentMarkAccess();
-        CPPUNIT_ASSERT_EQUAL(sal_Int32(1), rIDMA.getBookmarksCount());
-        uno::Reference<text::XBookmarksSupplier> xBookmarksSupplier(mxComponent, uno::UNO_QUERY);
-        CPPUNIT_ASSERT(xBookmarksSupplier->getBookmarks()->hasByName("replacement"));
-
-        uno::Reference<text::XTextContent> xTextContent(xBookmarksSupplier->getBookmarks()->getByName("replacement"), uno::UNO_QUERY);
-        uno::Reference<text::XTextRange> xRange = xTextContent->getAnchor();
-        uno::Reference<text::XTextCursor> xCursor = xRange->getText()->createTextCursorByRange(xRange);
-        CPPUNIT_ASSERT(!xCursor->isCollapsed());
-
-        // Verify bookmark content via text node / PaM
-        auto mark = *(rIDMA.getBookmarksBegin());
-        CPPUNIT_ASSERT(mark->IsExpanded());
-        SwPaM pam(mark->GetMarkStart(), mark->GetMarkEnd());
-        CPPUNIT_ASSERT_EQUAL(emptyInputTextField, pam.GetText());
-    }
-}
-
-// If you resave original document the bookmark will be changed from
-//
-//  <text:p text:style-name="Standard">
-//      <text:bookmark-start text:name="test"/>
-//      <text:bookmark-end text:name="test"/>
-//      def
-//  </text:p>
-//
-// to
-//
-//  <text:p text:style-name="Standard">
-//      <text:bookmark text:name="test"/>
-//      def
-//  </text:p>
-//
-void SwUiWriterTest::testBookmarkCollapsed()
-{
-    // load document
-    SwDoc* pDoc = createDoc("collapsed_bookmark.odt");
-    CPPUNIT_ASSERT(pDoc);
-
-    // save original document
-    utl::TempFile aTempFile;
-    save("writer8", aTempFile);
-
-    // load only content.xml from the resaved document
-    if (xmlDocUniquePtr pXmlDoc = parseExportInternal(aTempFile.GetURL(), "content.xml"))
-    {
-        const OString aPath("/office:document-content/office:body/office:text/text:p");
-
-        const int pos1 = getXPathPosition(pXmlDoc, aPath, "bookmark");
-        CPPUNIT_ASSERT_EQUAL(0, pos1); // found, and it is first
-
-        CPPUNIT_ASSERT_ASSERTION_FAIL(getXPathPosition(pXmlDoc, aPath, "bookmark-start")); // not found
-        CPPUNIT_ASSERT_ASSERTION_FAIL(getXPathPosition(pXmlDoc, aPath, "bookmark-end")); // not found
-    }
-}
-
-// 1. Open a new writer document
-// 2. Enter the text "abcdef"
-// 3. Select "abc"
-// 4. Insert a bookmark on "abc" using Insert->Bookmark. Name the bookmark "test".
-// 5. Open the navigator (F5)
-//    Select the bookmark "test" using the navigator.
-// 6. Hit Del, thus deleting "abc" (The bookmark "test" is still there).
-// 7. Save the document:
-//      <text:p text:style-name="Standard">
-//          <text:bookmark-start text:name="test"/>
-//          <text:bookmark-end text:name="test"/>
-//          def
-//      </text:p>
-//
-void SwUiWriterTest::testRemoveBookmarkText()
-{
-    // create document
-    {
-        // create a text document with "abcdef"
-        SwDoc* pDoc = createDoc();
-        SwXTextDocument *pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get());
-        CPPUNIT_ASSERT(pTextDoc);
-
-        {
-            SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1);
-            SwPaM aPaM(aIdx);
-            pDoc->getIDocumentContentOperations().InsertString(aPaM, "abcdef");
-        }
-
-        // mark "abc" with "testBookmark" bookmark
-        {
-            SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1);
-            SwPaM aPaM(aIdx);
-
-            lcl_selectCharacters(aPaM, 0, 3);
-            IDocumentMarkAccess &rIDMA = *pDoc->getIDocumentMarkAccess();
-            sw::mark::IMark *pMark =
-                rIDMA.makeMark(aPaM, "testBookmark",
-                    IDocumentMarkAccess::MarkType::BOOKMARK,
-                    ::sw::mark::InsertMode::New);
-
-            // verify
-            CPPUNIT_ASSERT(pMark->IsExpanded());
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), rIDMA.getBookmarksCount());
-        }
-
-        // remove text marked with bookmark
-        {
-            SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1);
-            SwPaM aPaM(aIdx);
-
-            lcl_selectCharacters(aPaM, 0, 3);
-            pDoc->getIDocumentContentOperations().DeleteRange(aPaM);
-
-            // verify: bookmark is still exist
-            IDocumentMarkAccess &rIDMA = *pDoc->getIDocumentMarkAccess();
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), rIDMA.getBookmarksCount());
-        }
-    }
-
-    // save document
-    utl::TempFile aTempFile;
-    save("writer8", aTempFile);
-
-    // load only content.xml from the resaved document
-    if (xmlDocUniquePtr pXmlDoc = parseExportInternal(aTempFile.GetURL(), "content.xml"))
-    {
-        const OString aPath("/office:document-content/office:body/office:text/text:p");
-
-        CPPUNIT_ASSERT_ASSERTION_FAIL(getXPathPosition(pXmlDoc, aPath, "bookmark")); // not found
-        const int pos2 = getXPathPosition(pXmlDoc, aPath, "bookmark-start");
-        const int pos3 = getXPathPosition(pXmlDoc, aPath, "bookmark-end");
-
-        CPPUNIT_ASSERT_EQUAL(0, pos2); // found, and it is first
-        CPPUNIT_ASSERT_EQUAL(1, pos3); // found, and it is second
-    }
-}
-
-// 1. Open a new writer document
-// 2. Enter the text "abcdef"
-// 3. Select "abc"
-// 4. Insert a bookmark on "abc" using Insert->Bookmark. Name the bookmark "test".
-// 5. Open the navigator (F5)
-//    Select the bookmark "test" using the navigator.
-// 6. Hit Del, thus deleting "abc" (The bookmark "test" is still there).
-// 7. Call our macro
-//
-//      Sub Main
-//          bookmark = ThisComponent.getBookmarks().getByName("test")
-//          bookmark.getAnchor().setString("abc")
-//      End Sub
-//
-//    The text "abc" gets inserted inside the bookmark "test", and the document now contains the string "abcdef".
-// 7. Save the document:
-//      <text:p text:style-name="Standard">
-//          <text:bookmark-start text:name="test"/>
-//          abc
-//          <text:bookmark-end text:name="test"/>
-//          def
-//      </text:p>
-//
-void SwUiWriterTest::testRemoveBookmarkTextAndAddNew()
-{
-    // create document
-    {
-        // create a text document with "abcdef"
-        SwDoc* pDoc = createDoc();
-        SwXTextDocument *pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get());
-        CPPUNIT_ASSERT(pTextDoc);
-
-        {
-            SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1);
-            SwPaM aPaM(aIdx);
-            pDoc->getIDocumentContentOperations().InsertString(aPaM, "abcdef");
-        }
-
-        // mark "abc" with "testBookmark" bookmark
-        {
-            SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1);
-            SwPaM aPaM(aIdx);
-
-            lcl_selectCharacters(aPaM, 0, 3);
-            IDocumentMarkAccess &rIDMA = *pDoc->getIDocumentMarkAccess();
-            sw::mark::IMark *pMark =
-                rIDMA.makeMark(aPaM, "testBookmark",
-                    IDocumentMarkAccess::MarkType::BOOKMARK,
-                    ::sw::mark::InsertMode::New);
-
-            // verify
-            CPPUNIT_ASSERT(pMark->IsExpanded());
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), rIDMA.getBookmarksCount());
-        }
-
-        // remove text marked with bookmark
-        {
-            SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1);
-            SwPaM aPaM(aIdx);
-
-            lcl_selectCharacters(aPaM, 0, 3);
-            pDoc->getIDocumentContentOperations().DeleteRange(aPaM);
-
-            // verify: bookmark is still exist
-            IDocumentMarkAccess &rIDMA = *pDoc->getIDocumentMarkAccess();
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), rIDMA.getBookmarksCount());
-        }
-
-        // write "abc" to area marked with "testBookmark" bookmark
-        {
-            // Get helper objects
-            uno::Reference<text::XBookmarksSupplier> xBookmarksSupplier(mxComponent, uno::UNO_QUERY);
-
-            // Create cursor from bookmark
-            uno::Reference<text::XTextContent> xTextContent(xBookmarksSupplier->getBookmarks()->getByName("testBookmark"), uno::UNO_QUERY);
-            uno::Reference<text::XTextRange> xRange = xTextContent->getAnchor();
-            CPPUNIT_ASSERT_EQUAL(OUString(""), xRange->getString());
-
-            // write "abc"
-            xRange->setString("abc");
-
-            // verify: bookmark is still exist
-            IDocumentMarkAccess &rIDMA = *pDoc->getIDocumentMarkAccess();
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), rIDMA.getBookmarksCount());
-        }
-    }
-
-    // save document
-    utl::TempFile aTempFile;
-    save("writer8", aTempFile);
-
-    // load only content.xml from the resaved document
-    if (xmlDocUniquePtr pXmlDoc = parseExportInternal(aTempFile.GetURL(), "content.xml"))
-    {
-        const OString aPath("/office:document-content/office:body/office:text/text:p");
-
-        CPPUNIT_ASSERT_ASSERTION_FAIL(getXPathPosition(pXmlDoc, aPath, "bookmark")); // not found
-        const int pos2 = getXPathPosition(pXmlDoc, aPath, "bookmark-start");
-        const int pos3 = getXPathPosition(pXmlDoc, aPath, "text");
-        const int pos4 = getXPathPosition(pXmlDoc, aPath, "bookmark-end");
-
-        CPPUNIT_ASSERT_EQUAL(0, pos2);
-        CPPUNIT_ASSERT_EQUAL(1, pos3);
-        CPPUNIT_ASSERT_EQUAL(2, pos4);
-    }
-}
-
-// 1. Load document:
-//  <text:p text:style-name="Standard">
-//      <text:bookmark-start text:name="test"/>
-//      <text:bookmark-end text:name="test"/>
-//      def
-//  </text:p>
-//
-// 2. Call our macro
-//
-//      Sub Main
-//          bookmark = ThisComponent.getBookmarks().getByName("test")
-//          bookmark.getAnchor().setString("abc")
-//      End Sub
-//
-//    The text "abc" gets inserted inside the bookmark "test", and the document now contains the string "abcdef".
-// 3. Save the document:
-//      <text:p text:style-name="Standard">
-//          <text:bookmark text:name="test"/>
-//          abcdef
-//      </text:p>
-//
-void SwUiWriterTest::testRemoveBookmarkTextAndAddNewAfterReload()
-{
-    // load document
-    SwDoc* pDoc = createDoc("collapsed_bookmark.odt");
-    CPPUNIT_ASSERT(pDoc);
-
-    // write "abc" to area marked with "testBookmark" bookmark
-    {
-        // Get helper objects
-        uno::Reference<text::XBookmarksSupplier> xBookmarksSupplier(mxComponent, uno::UNO_QUERY);
-
-        // Create cursor from bookmark
-        uno::Reference<text::XTextContent> xTextContent(xBookmarksSupplier->getBookmarks()->getByName("test"), uno::UNO_QUERY);
-        uno::Reference<text::XTextRange> xRange = xTextContent->getAnchor();
-        CPPUNIT_ASSERT_EQUAL(OUString(""), xRange->getString());
-
-        // write "abc"
-        xRange->setString("abc");
-
-        // verify: bookmark is still exist
-        IDocumentMarkAccess &rIDMA = *pDoc->getIDocumentMarkAccess();
-        CPPUNIT_ASSERT_EQUAL(sal_Int32(1), rIDMA.getBookmarksCount());
-    }
-
-    // save original document
-    utl::TempFile aTempFile;
-    save("writer8", aTempFile);
-
-    // load only content.xml from the resaved document
-    if (xmlDocUniquePtr pXmlDoc = parseExportInternal(aTempFile.GetURL(), "content.xml"))
-    {
-        const OString aPath("/office:document-content/office:body/office:text/text:p");
-
-        const int pos1 = getXPathPosition(pXmlDoc, aPath, "bookmark");
-        const int pos2 = getXPathPosition(pXmlDoc, aPath, "text");
-
-        CPPUNIT_ASSERT_EQUAL(0, pos1);
-        CPPUNIT_ASSERT_EQUAL(1, pos2);
-
-        CPPUNIT_ASSERT_ASSERTION_FAIL(getXPathPosition(pXmlDoc, aPath, "bookmark-start")); // not found
-        CPPUNIT_ASSERT_ASSERTION_FAIL(getXPathPosition(pXmlDoc, aPath, "bookmark-end")); // not found
-    }
-}
-
-void SwUiWriterTest::testTdf96961()
-{
-    // Insert a page break.
-    SwDoc* pDoc = createDoc();
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    pWrtShell->InsertPageBreak();
-
-    // Enable hide whitespace mode.
-    SwViewOption aViewOptions(*pWrtShell->GetViewOptions());
-    aViewOptions.SetHideWhitespaceMode(true);
-    pWrtShell->ApplyViewOptions(aViewOptions);
-
-    calcLayout();
-
-    // Assert that the height of the last page is larger than the height of other pages.
-    sal_Int32 nOther = parseDump("/root/page[1]/infos/bounds", "height").toInt32();
-    sal_Int32 nLast = parseDump("/root/page[2]/infos/bounds", "height").toInt32();
-    CPPUNIT_ASSERT(nLast > nOther);
-}
-
-void SwUiWriterTest::testTdf88453()
-{
-    createDoc("tdf88453.odt");
-    calcLayout();
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    // This was 0: the table does not fit the first page, but it wasn't split
-    // to continue on the second page.
-    assertXPath(pXmlDoc, "/root/page[2]/body/tab", 1);
-}
-
-void SwUiWriterTest::testTdf88453Table()
-{
-    createDoc("tdf88453-table.odt");
-    calcLayout();
-    // This was 2: layout could not split the large outer table in the document
-    // into 3 pages.
-    CPPUNIT_ASSERT_EQUAL(3, getPages());
-}
-
-namespace
-{
-
-int checkShells(const SwDocShell* pSource, const SwDocShell* pDestination)
-{
-    return int(SfxClassificationHelper::CheckPaste(pSource->getDocProperties(), pDestination->getDocProperties()));
-}
-
-}
-
-void SwUiWriterTest::testClassificationPaste()
-{
-    SwDocShell* pSourceShell = createDoc()->GetDocShell();
-    uno::Reference<lang::XComponent> xSourceComponent = mxComponent;
-    mxComponent.clear();
-
-    SwDocShell* pDestinationShell = createDoc()->GetDocShell();
-
-    // Not classified source, not classified destination.
-    CPPUNIT_ASSERT_EQUAL(int(SfxClassificationCheckPasteResult::None), checkShells(pSourceShell, pDestinationShell));
-
-    // Classified source, not classified destination.
-    uno::Sequence<beans::PropertyValue> aInternalOnly = comphelper::InitPropertySequence({{"Name", uno::makeAny(OUString("Internal Only"))}});
-    dispatchCommand(xSourceComponent, ".uno:ClassificationApply", aInternalOnly);
-    CPPUNIT_ASSERT_EQUAL(int(SfxClassificationCheckPasteResult::TargetDocNotClassified), checkShells(pSourceShell, pDestinationShell));
-
-    // Classified source and classified destination -- internal only has a higher level than confidential.
-    uno::Sequence<beans::PropertyValue> aConfidential = comphelper::InitPropertySequence({{"Name", uno::makeAny(OUString("Confidential"))}});
-    dispatchCommand(mxComponent, ".uno:ClassificationApply", aConfidential);
-    CPPUNIT_ASSERT_EQUAL(int(SfxClassificationCheckPasteResult::DocClassificationTooLow), checkShells(pSourceShell, pDestinationShell));
-
-    xSourceComponent->dispose();
-}
-
-void SwUiWriterTest::testSmallCaps()
-{
-    // Create a document, add some characters and select them.
-    createDoc();
-    SwDoc* pDoc = createDoc();
-    SwDocShell* pDocShell = pDoc->GetDocShell();
-    SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
-    pWrtShell->Insert("text");
-    pWrtShell->SelAll();
-
-    // Dispatch the command to make them formatted small capitals.
-    dispatchCommand(mxComponent, ".uno:SmallCaps", {});
-
-    // This was css::style::CaseMap::NONE as the shell didn't handle the command.
-    CPPUNIT_ASSERT_EQUAL(css::style::CaseMap::SMALLCAPS, getProperty<sal_Int16>(getRun(getParagraph(1), 1), "CharCaseMap"));
-}
-
-void SwUiWriterTest::testTdf98987()
-{
-    createDoc("tdf98987.docx");
-    calcLayout();
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    assertXPath(pXmlDoc, "/root/page/body/txt/anchored/SwAnchoredDrawObject[2]/SdrObject", "name", "Rectangle 1");
-    sal_Int32 nRectangle1 = getXPath(pXmlDoc, "/root/page/body/txt/anchored/SwAnchoredDrawObject[2]/bounds", "top").toInt32();
-    assertXPath(pXmlDoc, "/root/page/body/txt/anchored/SwAnchoredDrawObject[1]/SdrObject", "name", "Rectangle 2");
-    sal_Int32 nRectangle2 = getXPath(pXmlDoc, "/root/page/body/txt/anchored/SwAnchoredDrawObject[1]/bounds", "top").toInt32();
-    CPPUNIT_ASSERT_GREATER(nRectangle1, nRectangle2);
-
-    assertXPath(pXmlDoc, "/root/page/body/txt/anchored/SwAnchoredDrawObject[3]/SdrObject", "name", "Rectangle 3");
-    sal_Int32 nRectangle3 = getXPath(pXmlDoc, "/root/page/body/txt/anchored/SwAnchoredDrawObject[3]/bounds", "top").toInt32();
-    // This failed: the 3rd rectangle had a smaller "top" value than the 2nd one, it even overlapped with the 1st one.
-    CPPUNIT_ASSERT_GREATER(nRectangle2, nRectangle3);
-}
-
-void SwUiWriterTest::testTdf99004()
-{
-    createDoc("tdf99004.docx");
-    calcLayout();
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    sal_Int32 nTextbox1Top = getXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/infos/bounds", "top").toInt32();
-    sal_Int32 nTextBox1Height = getXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/infos/bounds", "height").toInt32();
-    sal_Int32 nTextBox1Bottom = nTextbox1Top + nTextBox1Height;
-
-    assertXPath(pXmlDoc, "/root/page/body/txt/anchored/SwAnchoredDrawObject[1]/SdrObject", "name", "Rectangle 2");
-    sal_Int32 nRectangle2Top = getXPath(pXmlDoc, "/root/page/body/txt/anchored/SwAnchoredDrawObject[1]/bounds", "top").toInt32();
-    // This was 3291 and 2531, should be now around 2472 and 2531, i.e. the two rectangles should not overlap anymore.
-    CPPUNIT_ASSERT(nTextBox1Bottom < nRectangle2Top);
-}
-
-void SwUiWriterTest::testTdf84695()
+void SwUiWriterTest::testTdf117225()
 {
-    SwDoc* pDoc = createDoc("tdf84695.odt");
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    SdrPage* pPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
-    SdrObject* pObject = pPage->GetObj(1);
-    SwContact* pTextBox = static_cast<SwContact*>(pObject->GetUserCall());
-    // First, make sure that pTextBox is a fly frame (textbox of a shape).
-    CPPUNIT_ASSERT_EQUAL(sal_uInt16(RES_FLYFRMFMT), pTextBox->GetFormat()->Which());
-
-    // Then select it.
-    pWrtShell->SelectObj(Point(), 0, pObject);
-
-    // Now Enter + a key should add some text.
-    SwXTextDocument* pXTextDocument = dynamic_cast<SwXTextDocument*>(mxComponent.get());
-    CPPUNIT_ASSERT(pXTextDocument);
-    pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_RETURN);
-    pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'a', 0);
-    Scheduler::ProcessEventsToIdle();
+    // Test that saving a document with an embedded object does not leak
+    // tempfiles in the directory of the target file.
+    OUString aTargetDirectory = m_directories.getURLFromWorkdir(u"/CppunitTest/sw_uiwriter.test.user/");
+    OUString aTargetFile = aTargetDirectory + "tdf117225.odt";
+    OUString aSourceFile = m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf117225.odt";
+    osl::File::copy(aSourceFile, aTargetFile);
+    mxComponent = loadFromDesktop(aTargetFile);
+    uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
+    int nExpected = CountFilesInDirectory(aTargetDirectory);
+    xStorable->store();
+    int nActual = CountFilesInDirectory(aTargetDirectory);
+    // nActual was nExpected + 1, i.e. we leaked a tempfile.
+    CPPUNIT_ASSERT_EQUAL(nExpected, nActual);
 
-    uno::Reference<text::XTextRange> xShape(getShape(1), uno::UNO_QUERY);
-    // This was empty, Enter did not start the fly frame edit mode.
-    CPPUNIT_ASSERT_EQUAL(OUString("a"), xShape->getString());
+    OUString aTargetFileSaveAs = aTargetDirectory + "tdf117225-save-as.odt";
+    xStorable->storeAsURL(aTargetFileSaveAs, {});
+    ++nExpected;
+    nActual = CountFilesInDirectory(aTargetDirectory);
+    // nActual was nExpected + 1, i.e. we leaked a tempfile.
+    CPPUNIT_ASSERT_EQUAL(nExpected, nActual);
 }
 
-void SwUiWriterTest::testTdf84695NormalChar()
-{
-    SwDoc* pDoc = createDoc("tdf84695.odt");
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    SdrPage* pPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
-    SdrObject* pObject = pPage->GetObj(1);
-    SwContact* pTextBox = static_cast<SwContact*>(pObject->GetUserCall());
-    // First, make sure that pTextBox is a fly frame (textbox of a shape).
-    CPPUNIT_ASSERT_EQUAL(sal_uInt16(RES_FLYFRMFMT), pTextBox->GetFormat()->Which());
-
-    // Then select it.
-    pWrtShell->SelectObj(Point(), 0, pObject);
-
-    // Now pressing 'a' should add a character.
-    SwXTextDocument* pXTextDocument = dynamic_cast<SwXTextDocument*>(mxComponent.get());
-    CPPUNIT_ASSERT(pXTextDocument);
-    pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'a', 0);
-    Scheduler::ProcessEventsToIdle();
-
-    uno::Reference<text::XTextRange> xShape(getShape(1), uno::UNO_QUERY);
-    // This was empty, pressing a normal character did not start the fly frame edit mode.
-    CPPUNIT_ASSERT_EQUAL(OUString("a"), xShape->getString());
-}
-
-void SwUiWriterTest::testTdf84695Tab()
-{
-    SwDoc* pDoc = createDoc("tdf84695-tab.odt");
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    SdrPage* pPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
-    SdrObject* pObject = pPage->GetObj(0);
-    SwContact* pShape = static_cast<SwContact*>(pObject->GetUserCall());
-    // First, make sure that pShape is a draw shape.
-    CPPUNIT_ASSERT_EQUAL(sal_uInt16(RES_DRAWFRMFMT), pShape->GetFormat()->Which());
-
-    // Then select it.
-    pWrtShell->SelectObj(Point(), 0, pObject);
-
-    // Now pressing 'tab' should jump to the other shape.
-    SwXTextDocument* pXTextDocument = dynamic_cast<SwXTextDocument *>(mxComponent.get());
-    CPPUNIT_ASSERT(pXTextDocument);
-    pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_TAB);
-    pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, KEY_TAB);
-    Scheduler::ProcessEventsToIdle();
-
-    // And finally make sure the selection has changed.
-    const SdrMarkList& rMarkList = pWrtShell->GetDrawView()->GetMarkedObjectList();
-    SwContact* pOtherShape = static_cast<SwContact*>(rMarkList.GetMark(0)->GetMarkedSdrObj()->GetUserCall());
-    // This failed, 'tab' didn't do anything -> the selected shape was the same.
-    CPPUNIT_ASSERT(pOtherShape != pShape);
-}
-
-void SwUiWriterTest::testTableStyleUndo()
-{
-    SwDoc* pDoc = createDoc();
-    sw::UndoManager& rUndoManager = pDoc->GetUndoManager();
-
-    sal_Int32 nStyleCount = pDoc->GetTableStyles().size();
-    SwTableAutoFormat* pStyle = pDoc->MakeTableStyle("Test Style");
-    SvxBrushItem aBackground(Color(0xFF00FF), RES_BACKGROUND );
-    pStyle->GetBoxFormat(0).SetBackground(aBackground);
-
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(pDoc->GetTableStyles().size()), nStyleCount + 1);
-    rUndoManager.Undo();
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(pDoc->GetTableStyles().size()), nStyleCount);
-    rUndoManager.Redo();
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(pDoc->GetTableStyles().size()), nStyleCount + 1);
-    // check if attributes are preserved
-    pStyle = pDoc->GetTableStyles().FindAutoFormat(u"Test Style");
-    CPPUNIT_ASSERT(pStyle);
-    CPPUNIT_ASSERT(bool(pStyle->GetBoxFormat(0).GetBackground() == aBackground));
-
-    pDoc->DelTableStyle("Test Style");
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(pDoc->GetTableStyles().size()), nStyleCount);
-    rUndoManager.Undo();
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(pDoc->GetTableStyles().size()), nStyleCount + 1);
-    pStyle = pDoc->GetTableStyles().FindAutoFormat(u"Test Style");
-    // check if attributes are preserved
-    CPPUNIT_ASSERT(pStyle);
-    CPPUNIT_ASSERT(bool(pStyle->GetBoxFormat(0).GetBackground() == aBackground));
-    rUndoManager.Redo();
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(pDoc->GetTableStyles().size()), nStyleCount);
-
-    // undo delete so we can replace the style
-    rUndoManager.Undo();
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(pDoc->GetTableStyles().size()), nStyleCount +1 );
-    pStyle = pDoc->GetTableStyles().FindAutoFormat(u"Test Style");
-    CPPUNIT_ASSERT(pStyle);
-    CPPUNIT_ASSERT(bool(pStyle->GetBoxFormat(0).GetBackground() == aBackground));
-
-    SwTableAutoFormat aNewStyle("Test Style2");
-    SvxBrushItem aBackground2(Color(0x00FF00), RES_BACKGROUND);
-    aNewStyle.GetBoxFormat(0).SetBackground(aBackground2);
-
-    pDoc->ChgTableStyle("Test Style", aNewStyle);
-    pStyle = pDoc->GetTableStyles().FindAutoFormat(u"Test Style");
-    CPPUNIT_ASSERT(pStyle);
-    CPPUNIT_ASSERT(bool(pStyle->GetBoxFormat(0).GetBackground() == aBackground2));
-    rUndoManager.Undo();
-    pStyle = pDoc->GetTableStyles().FindAutoFormat(u"Test Style");
-    CPPUNIT_ASSERT(pStyle);
-    CPPUNIT_ASSERT(bool(pStyle->GetBoxFormat(0).GetBackground() == aBackground));
-    rUndoManager.Redo();
-    pStyle = pDoc->GetTableStyles().FindAutoFormat(u"Test Style");
-    CPPUNIT_ASSERT(pStyle);
-    CPPUNIT_ASSERT(bool(pStyle->GetBoxFormat(0).GetBackground() == aBackground2));
-}
-
-void SwUiWriterTest::testRedlineCopyPaste()
-{
-    // regressed in tdf#106746
-    SwDoc* pDoc = createDoc();
-
-    SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1);
-    SwPaM aPaM(aIdx);
-
-    pDoc->getIDocumentContentOperations().InsertString(aPaM, "abzdezgh");
-    SwTextNode* pTextNode = aPaM.GetNode().GetTextNode();
-
-    // Turn on track changes, make changes, turn off track changes
-    uno::Reference<beans::XPropertySet> xPropertySet(mxComponent, uno::UNO_QUERY);
-    xPropertySet->setPropertyValue("RecordChanges", uno::makeAny(true));
-    lcl_selectCharacters(aPaM, 2, 3);
-    pDoc->getIDocumentContentOperations().ReplaceRange(aPaM, "c", false);
-    lcl_selectCharacters(aPaM, 6, 7);
-    pDoc->getIDocumentContentOperations().ReplaceRange(aPaM, "f", false);
-    xPropertySet->setPropertyValue("RecordChanges", uno::makeAny(false));
-
-    // Create the clipboard document.
-    SwDoc aClipboard;
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-
-    // Select the whole content, copy, delete the original and paste the copied content
-    pWrtShell->SelAll();
-    pWrtShell->Copy(aClipboard);
-    pWrtShell->Delete();
-    pWrtShell->Paste(aClipboard);
-
-    // With the bug this is "abzcdefgh", ie. contains the first deleted piece, too
-    CPPUNIT_ASSERT_EQUAL(OUString("abcdefgh"), pTextNode->GetText());
-}
-
-void SwUiWriterTest::testTdf135260()
-{
-    SwDoc* pDoc = createDoc();
-    SwDocShell* pDocShell = pDoc->GetDocShell();
-    SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
-    pWrtShell->Insert("test");
-
-    // Turn on track changes
-    uno::Reference<beans::XPropertySet> xPropertySet(mxComponent, uno::UNO_QUERY);
-    xPropertySet->setPropertyValue("RecordChanges", uno::makeAny(true));
-
-    for(int i = 0; i < 4; i++) {
-        pWrtShell->DelLeft();
-    }
-
-    SwEditShell* const pEditShell(pDoc->GetEditShell());
-    // accept all redlines
-    while(pEditShell->GetRedlineCount())
-        pEditShell->AcceptRedline(0);
-
-    // Without the fix in place, this test would have failed with
-    // - Expected:
-    // - Actual  : tes
-    CPPUNIT_ASSERT_EQUAL(OUString(""), getParagraph(1)->getString());
-}
-
-void SwUiWriterTest::testRedlineParam()
-{
-    // Create a document with minimal content.
-    SwDoc* pDoc = createDoc();
-    SwDocShell* pDocShell = pDoc->GetDocShell();
-    SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
-    pWrtShell->Insert("middle");
-
-    // Turn on track changes, and add changes to the start and end of the document.
-    uno::Reference<beans::XPropertySet> xPropertySet(mxComponent, uno::UNO_QUERY);
-    xPropertySet->setPropertyValue("RecordChanges", uno::makeAny(true));
-    pWrtShell->StartOfSection();
-    pWrtShell->Insert("aaa");
-    pWrtShell->EndOfSection();
-    pWrtShell->Insert("zzz");
-
-    const SwRedlineTable& rTable = pDoc->getIDocumentRedlineAccess().GetRedlineTable();
-    CPPUNIT_ASSERT_EQUAL(static_cast<SwRedlineTable::size_type>(2), rTable.size());
-
-    // Select the first redline.
-    pWrtShell->StartOfSection();
-    uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence(
-    {
-        {"NextTrackedChange", uno::makeAny(o3tl::narrowing<sal_uInt16>(rTable[0]->GetId()))}
-    }));
-    dispatchCommand(mxComponent, ".uno:NextTrackedChange", aPropertyValues);
-    Scheduler::ProcessEventsToIdle();
-    SwShellCursor* pShellCursor = pWrtShell->getShellCursor(false);
-    // This failed: the parameter wasn't handled so the next change (zzz) was
-    // selected, not the first one (aaa).
-    CPPUNIT_ASSERT_EQUAL(OUString("aaa"), pShellCursor->GetText());
-
-    // Select the second redline.
-    pWrtShell->StartOfSection();
-    aPropertyValues = comphelper::InitPropertySequence(
-    {
-        {"NextTrackedChange", uno::makeAny(o3tl::narrowing<sal_uInt16>(rTable[1]->GetId()))}
-    });
-    dispatchCommand(mxComponent, ".uno:NextTrackedChange", aPropertyValues);
-    Scheduler::ProcessEventsToIdle();
-    pShellCursor = pWrtShell->getShellCursor(false);
-    CPPUNIT_ASSERT_EQUAL(OUString("zzz"), pShellCursor->GetText());
-
-    // Move the cursor to the start again, and reject the second change.
-    pWrtShell->StartOfSection();
-    aPropertyValues = comphelper::InitPropertySequence(
-    {
-        {"RejectTrackedChange", uno::makeAny(o3tl::narrowing<sal_uInt16>(rTable[1]->GetId()))}
-    });
-    dispatchCommand(mxComponent, ".uno:RejectTrackedChange", aPropertyValues);
-    Scheduler::ProcessEventsToIdle();
-    pShellCursor = pWrtShell->getShellCursor(false);
-
-    // This was 'middlezzz', the uno command rejected the redline under the
-    // cursor, instead of the requested one.
-    CPPUNIT_ASSERT_EQUAL(OUString("aaamiddle"), pShellCursor->GetPoint()->nNode.GetNode().GetTextNode()->GetText());
-}
-
-void SwUiWriterTest::testRedlineViewAuthor()
-{
-    // Test that setting an author at an SwView level has effect.
-
-    // Create a document with minimal content.
-    SwDoc* pDoc = createDoc();
-    SwDocShell* pDocShell = pDoc->GetDocShell();
-    SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
-    pWrtShell->Insert("middle");
-    SwView* pView = pDocShell->GetView();
-    const OUString aAuthor("A U. Thor");
-    pView->SetRedlineAuthor(aAuthor);
-    pDocShell->SetView(pView);
-
-    // Turn on track changes, and add changes to the start of the document.
-    uno::Reference<beans::XPropertySet> xPropertySet(mxComponent, uno::UNO_QUERY);
-    xPropertySet->setPropertyValue("RecordChanges", uno::makeAny(true));
-    pWrtShell->StartOfSection();
-    pWrtShell->Insert("aaa");
-
-    // Now assert that SwView::SetRedlineAuthor() had an effect.
-    const SwRedlineTable& rTable = pDoc->getIDocumentRedlineAccess().GetRedlineTable();
-    CPPUNIT_ASSERT_EQUAL(static_cast<SwRedlineTable::size_type>(1), rTable.size());
-    SwRangeRedline* pRedline = rTable[0];
-    // This was 'Unknown Author' instead of 'A U. Thor'.
-    CPPUNIT_ASSERT_EQUAL(aAuthor, pRedline->GetAuthorString());
-
-    // Insert a comment and assert that SwView::SetRedlineAuthor() affects this as well.
-    dispatchCommand(mxComponent, ".uno:.uno:InsertAnnotation", {});
-    uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
-    uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields());
-    uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
-    uno::Reference<beans::XPropertySet> xField(xFields->nextElement(), uno::UNO_QUERY);
-    // This was 'Unknown Author' instead of 'A U. Thor'.
-    CPPUNIT_ASSERT_EQUAL(aAuthor, xField->getPropertyValue("Author").get<OUString>());
-
-    //Reset the redline author after using it, otherwise, it might interfere with other unittests
-    pView->SetRedlineAuthor("Unknown Author");
-    pDocShell->SetView(pView);
-}
-
-void SwUiWriterTest::testTdf91292()
-{
-    createDoc("tdf91292_paraBackground.docx");
-    uno::Reference<beans::XPropertySet> xPropertySet(getParagraph(1), uno::UNO_QUERY);
-    CPPUNIT_ASSERT_EQUAL_MESSAGE("Solid background color", drawing::FillStyle_SOLID, getProperty<drawing::FillStyle>(xPropertySet, "FillStyle"));
-    CPPUNIT_ASSERT_EQUAL_MESSAGE("Background Color", static_cast<sal_Int32>(0x5C2D91), getProperty<sal_Int32>(xPropertySet, "FillColor"));
-
-    // remove background color
-    xPropertySet->setPropertyValue("FillStyle", uno::makeAny( drawing::FillStyle_NONE));
-
-    // Save it and load it back.
-    reload("Office Open XML Text", "tdf91292_paraBackground.docx");
-
-    xPropertySet.set( getParagraph(1), uno::UNO_QUERY );
-    CPPUNIT_ASSERT_EQUAL_MESSAGE("No background color", drawing::FillStyle_NONE, getProperty<drawing::FillStyle>(xPropertySet, "FillStyle"));
-}
-
-void SwUiWriterTest::testTdf78727()
-{
-    SwDoc* pDoc = createDoc("tdf78727.docx");
-    SdrPage* pPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
-    // This was 1: make sure we don't loose the TextBox anchored inside the
-    // table that is moved inside a text frame.
-    CPPUNIT_ASSERT(SwTextBoxHelper::getCount(pPage) > 1);
-}
-
-void SwUiWriterTest::testRedlineTimestamp()
-{
-    // Test that a redline timestamp's second is not always 0.
-
-    // Create a document with minimal content.
-    SwDoc* pDoc = createDoc();
-    SwDocShell* pDocShell = pDoc->GetDocShell();
-    SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
-    pWrtShell->Insert("middle");
-
-    // Turn on track changes, and add changes to the start and to the end of
-    // the document.
-    uno::Reference<beans::XPropertySet> xPropertySet(mxComponent, uno::UNO_QUERY);
-    xPropertySet->setPropertyValue("RecordChanges", uno::makeAny(true));
-    pWrtShell->StartOfSection();
-    pWrtShell->Insert("aaa");
-    osl::Thread::wait(std::chrono::seconds(1));
-    pWrtShell->EndOfSection();
-    pWrtShell->Insert("zzz");
-
-    // Inserting additional characters at the start changed the table size to
-    // 3, i.e. the first and the second "aaa" wasn't combined.
-    pWrtShell->StartOfSection();
-    pWrtShell->Insert("aaa");
-
-    // Now assert that at least one of the seconds are not 0.
-    const SwRedlineTable& rTable = pDoc->getIDocumentRedlineAccess().GetRedlineTable();
-    if (rTable.size() >= 2 && rTable[0]->GetRedlineData().GetTimeStamp().GetMin() != rTable[1]->GetRedlineData().GetTimeStamp().GetMin())
-        // The relatively rare case when waiting for a second also changes the minute.
-        return;
-
-    CPPUNIT_ASSERT_EQUAL(static_cast<SwRedlineTable::size_type>(2), rTable.size());
-    sal_uInt16 nSec1 = rTable[0]->GetRedlineData().GetTimeStamp().GetSec();
-    sal_uInt16 nSec2 = rTable[1]->GetRedlineData().GetTimeStamp().GetSec();
-    // This failed, seconds was always 0.
-    CPPUNIT_ASSERT(nSec1 != 0 || nSec2 != 0);
-}
-
-void SwUiWriterTest::testCursorWindows()
-{
-    // Create a new document with one window.
-    SwDoc* pDoc = createDoc();
-    SwDocShell* pDocShell = pDoc->GetDocShell();
-    SwWrtShell* pWrtShell1 = pDocShell->GetWrtShell();
-
-    // Create a second view and type something.
-    pDocShell->GetViewShell()->GetViewFrame()->GetDispatcher()->Execute(SID_NEWWINDOW, SfxCallMode::SYNCHRON | SfxCallMode::RECORD);
-    SwWrtShell* pWrtShell2 = pDocShell->GetWrtShell();
-    OUString aText("foo");
-    pWrtShell2->Insert(aText);
-
-    // Assert that only the cursor of the actual window move, not other cursors.
-    SwShellCursor* pShellCursor1 = pWrtShell1->getShellCursor(false);
-    SwShellCursor* pShellCursor2 = pWrtShell2->getShellCursor(false);
-    // This was 3, not 0 -- cursor of the other window moved.
-    CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), pShellCursor1->Start()->nContent.GetIndex());
-    CPPUNIT_ASSERT_EQUAL(aText.getLength(), pShellCursor2->Start()->nContent.GetIndex());
-}
-
-void SwUiWriterTest::testLandscape()
-{
-    // Set page orientation to landscape.
-    SwDoc* pDoc = createDoc();
-    uno::Sequence<beans::PropertyValue> aPropertyValues( comphelper::InitPropertySequence({
-        { "AttributePage.Landscape", uno::Any(true) }
-    }));
-    dispatchCommand(mxComponent, ".uno:AttributePage", aPropertyValues);
-    Scheduler::ProcessEventsToIdle();
-
-    // Assert that the document model was modified.
-    SwDocShell* pDocShell = pDoc->GetDocShell();
-    SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
-    size_t nPageDesc = pWrtShell->GetCurPageDesc();
-    // This failed, page was still portrait.
-    CPPUNIT_ASSERT(pWrtShell->GetPageDesc(nPageDesc).GetLandscape());
-}
-
-void SwUiWriterTest::testTdf95699()
-{
-    // Open the document with single FORMCHECKBOX field, select all and copy to clipboard
-    // then check that clipboard contains the FORMCHECKBOX in text body.
-    // Previously that failed.
-    SwDoc* pDoc = createDoc("tdf95699.odt");
-    IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess();
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
-    SwDoc aClipboard;
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    pWrtShell->SelAll();
-    pWrtShell->Copy(aClipboard);
-    pMarkAccess = aClipboard.getIDocumentMarkAccess();
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
-    ::sw::mark::IFieldmark* pFieldMark = pMarkAccess->getFieldmarkAfter(SwPosition(pDoc->GetNodes().GetEndOfExtras()));
-    CPPUNIT_ASSERT_EQUAL(OUString("vnd.oasis.opendocument.field.FORMCHECKBOX"), pFieldMark->GetFieldname());
-}
-
-void SwUiWriterTest::testTdf104032()
-{
-    // Open the document with FORMCHECKBOX field, select it and copy to clipboard
-    // Go to end of document and paste it, then undo
-    // Previously that asserted in debug build.
-    SwDoc* pDoc = createDoc("tdf104032.odt");
-    sw::UndoManager& rUndoManager = pDoc->GetUndoManager();
-    SwDoc aClipboard;
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    pWrtShell->StartOfSection();
-    pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 1, /*bBasicCall=*/false);
-    pWrtShell->Copy(aClipboard);
-    pWrtShell->EndOfSection();
-    pWrtShell->Paste(aClipboard);
-    rUndoManager.Undo();
-}
-
-void SwUiWriterTest::testTdf104440()
-{
-    createDoc("tdf104440.odt");
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//page[2]/body/txt/anchored");
-    xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
-    // This was 0: both Text Frames in the document were anchored to a
-    // paragraph on page 1, while we expect that the second Text Frame is
-    // anchored to a paragraph on page 2.
-    CPPUNIT_ASSERT_EQUAL(1, xmlXPathNodeSetGetLength(pXmlNodes));
-    xmlXPathFreeObject(pXmlObj);
-}
-
-void SwUiWriterTest::testTdf104425()
-{
-    createDoc("tdf104425.odt");
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    // The document contains one top-level 1-cell table with minimum row height set to 70 cm,
-    // and the cell contents does not exceed the minimum row height.
-    // It should span over 3 pages.
-    assertXPath(pXmlDoc, "//page", 3);
-    sal_Int32 nHeight1 = getXPath(pXmlDoc, "//page[1]/body/tab/row/infos/bounds", "height").toInt32();
-    sal_Int32 nHeight2 = getXPath(pXmlDoc, "//page[2]/body/tab/row/infos/bounds", "height").toInt32();
-    sal_Int32 nHeight3 = getXPath(pXmlDoc, "//page[3]/body/tab/row/infos/bounds", "height").toInt32();
-    double fSumHeight_mm = (nHeight1 + nHeight2 + nHeight3) * 25.4 / 1440.0;
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(700.0, fSumHeight_mm, 0.05);
-}
-
-// accepting change tracking gets stuck on change
-void SwUiWriterTest::testTdf104814()
-{
-    SwDoc* const pDoc1(createDoc("tdf104814.docx"));
-
-    SwEditShell* const pEditShell(pDoc1->GetEditShell());
-
-    // accept all redlines
-    while(pEditShell->GetRedlineCount())
-        pEditShell->AcceptRedline(0);
-}
-
-void SwUiWriterTest::testTdf66405()
-{
-    // Imported formula should have zero margins
-    createDoc("tdf66405.docx");
-    uno::Reference<text::XTextEmbeddedObjectsSupplier> xEmbeddedObjectsSupplier(mxComponent, uno::UNO_QUERY);
-    uno::Reference<container::XNameAccess> xEmbeddedObjects = xEmbeddedObjectsSupplier->getEmbeddedObjects();
-    uno::Reference<beans::XPropertySet> xFormula;
-    xEmbeddedObjects->getByName(xEmbeddedObjects->getElementNames()[0]) >>= xFormula;
-    uno::Reference<beans::XPropertySet> xComponent;
-    xFormula->getPropertyValue("Component") >>= xComponent;
-
-    // Test embedded object's margins
-    sal_Int32 nLeftMargin, nRightMargin, nTopMargin, nBottomMargin;
-    xFormula->getPropertyValue("LeftMargin") >>= nLeftMargin;
-    xFormula->getPropertyValue("RightMargin") >>= nRightMargin;
-    xFormula->getPropertyValue("TopMargin") >>= nTopMargin;
-    xFormula->getPropertyValue("BottomMargin") >>= nBottomMargin;
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nLeftMargin);
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nRightMargin);
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nTopMargin);
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nBottomMargin);
-
-    // Test embedded object component's margins
-    xComponent->getPropertyValue("LeftMargin") >>= nLeftMargin;
-    xComponent->getPropertyValue("RightMargin") >>= nRightMargin;
-    xComponent->getPropertyValue("TopMargin") >>= nTopMargin;
-    xComponent->getPropertyValue("BottomMargin") >>= nBottomMargin;
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nLeftMargin);
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nRightMargin);
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nTopMargin);
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nBottomMargin);
-}
-
-void SwUiWriterTest::testTdf35021_tabOverMarginDemo()
-{
-#if HAVE_MORE_FONTS
-    createDoc("tdf35021_tabOverMarginDemo.doc");
-    calcLayout();
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    // Tabs should go past the margin @ ~3381
-    sal_Int32 nMargin = getXPath(pXmlDoc, "//body/txt[1]/infos/prtBounds", "width").toInt32();
-    // left tab was 3381 because it got its own full line
-    sal_Int32 nWidth = getXPath(pXmlDoc, "//Text[@nType='PortionType::TabLeft']", "nWidth").toInt32();
-    CPPUNIT_ASSERT_MESSAGE("Left Tab width is ~4479", nMargin < nWidth);
-    // center tab was 842
-    nWidth = getXPath(pXmlDoc, "//Text[@nType='PortionType::TabCenter']", "nWidth").toInt32();
-    CPPUNIT_ASSERT_MESSAGE("Center Tab width is ~3521", nMargin < nWidth);
-    // right tab was probably the same as center tab.
-    nWidth = getXPath(pXmlDoc, "//Text[@nType='PortionType::TabRight']", "nWidth").toInt32();
-    CPPUNIT_ASSERT_MESSAGE("Right Tab width is ~2907", sal_Int32(2500) < nWidth);
-    // decimal tab was 266
-    nWidth = getXPath(pXmlDoc, "//Text[@nType='PortionType::TabDecimal']", "nWidth").toInt32();
-    CPPUNIT_ASSERT_MESSAGE("Decimal Tab width is ~4096", nMargin < nWidth);
-#endif
-}
-
-void SwUiWriterTest::testTdf106701_tabOverMarginAutotab()
-{
-    createDoc("tdf106701_tabOverMarginAutotab.doc");
-    calcLayout();
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    // The right margin is ~3378
-    sal_Int32 nRightMargin = getXPath(pXmlDoc, "//body/txt[1]/infos/prtBounds", "width").toInt32();
-    // Automatic tabstops should never be affected by tabOverMargin compatibility
-    // The 1st line's width previously was ~9506
-    sal_Int32 nWidth = getXPath(pXmlDoc, "//LineBreak[1]", "nWidth").toInt32();
-    CPPUNIT_ASSERT_MESSAGE("1st line's width is less than the right margin", nWidth < nRightMargin);
-}
-
-void SwUiWriterTest::testTdf104492()
-{
-    createDoc("tdf104492.docx");
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    // The document should split table over 3 pages.
-    assertXPath(pXmlDoc, "//page", 3);
-}
-
-void SwUiWriterTest::testTdf107025()
-{
-    // Tdf107025 - characters advance with wrong distance, so that
-    // they are cluttered because of negative value or
-    // break into multiple lines because of overflow.
-    // The test document uses DFKAI-SB shipped with Windows.
-    createDoc("tdf107025.odt");
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    // Verify the number of characters in each line.
-    CPPUNIT_ASSERT_EQUAL( sal_Int32(1), getXPath(pXmlDoc, "(//Text[@nType='PortionType::Text'])[1]", "nLength").toInt32());
-    CPPUNIT_ASSERT_EQUAL( sal_Int32(9), getXPath(pXmlDoc, "(//Text[@nType='PortionType::Text'])[2]", "nLength").toInt32());
-
-    // Do the subsequent test only if the first line can be displayed,
-    // in case that the required font does not exist.
-    sal_Int32 nWidth1 = getXPath(pXmlDoc, "(//Text[@nType='PortionType::Text'])[1]", "nWidth").toInt32();
-    if (!nWidth1)
-        return;
-
-    CPPUNIT_ASSERT(!parseDump("(//Text[@nType='PortionType::Text'])[2]", "nWidth").isEmpty());
-    // Width of the second line is expected to be 9 times of the first.
-    sal_Int32 nWidth2 = getXPath(pXmlDoc, "(//Text[@nType='PortionType::Text'])[2]", "nWidth").toInt32();
-
-    CPPUNIT_ASSERT_EQUAL( sal_Int32(9), nWidth2 / nWidth1 );
-}
-
-void SwUiWriterTest::testTdf107362()
-{
-    createDoc("tdf107362.odt");
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    sal_Int32 nHeight = getXPath(pXmlDoc, "(//Text[@nType='PortionType::Text'])[1]" , "nHeight").toInt32();
-    sal_Int32 nWidth1 = getXPath(pXmlDoc, "(//Text[@nType='PortionType::Text'])[1]" , "nWidth").toInt32();
-    sal_Int32 nWidth2 = getXPath(pXmlDoc, "(//Text[@nType='PortionType::Text'])[2]" , "nWidth").toInt32();
-    sal_Int32 nLineWidth = getXPath(pXmlDoc, "//LineBreak" , "nWidth").toInt32();
-    sal_Int32 nKernWidth = nLineWidth - nWidth1 - nWidth2;
-    // Test only if fonts are available
-    if ( nWidth1 > 500 && nWidth2 > 200 )
-    {
-        // Kern width should be smaller than 1/3 of the CJK font height.
-        CPPUNIT_ASSERT( nKernWidth * 3 < nHeight );
-    }
-}
-
-void SwUiWriterTest::testTdf105417()
-{
-    SwDoc* pDoc = createDoc("tdf105417.odt");
-    CPPUNIT_ASSERT(pDoc);
-    SwView* pView = pDoc->GetDocShell()->GetView();
-    CPPUNIT_ASSERT(pView);
-    uno::Reference<linguistic2::XHyphenator> xHyphenator = LinguMgr::GetHyphenator();
-    CPPUNIT_ASSERT(xHyphenator.is());
-    // If there are no English hyphenation rules installed, we can't test
-    // hyphenation.
-    if (!xHyphenator->hasLocale(lang::Locale("en", "US", OUString())))
-        return;
-
-    uno::Reference<linguistic2::XLinguProperties> xLinguProperties(LinguMgr::GetLinguPropertySet());
-    // Automatic hyphenation means not opening a dialog, but going ahead
-    // non-interactively.
-    xLinguProperties->setIsHyphAuto(true);
-    SwHyphWrapper aWrap(pView, xHyphenator, /*bStart=*/false, /*bOther=*/true, /*bSelection=*/false);
-    // This never returned, it kept trying to hyphenate the last word
-    // (greenbacks) again and again.
-    aWrap.SpellDocument();
-}
-
-void SwUiWriterTest::testTdf105625()
-{
-    SwDoc* pDoc = createDoc("tdf105625.fodt");
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    uno::Reference<uno::XComponentContext> xComponentContext(comphelper::getProcessComponentContext());
-    // Ensure correct initial setting
-    comphelper::ConfigurationHelper::writeDirectKey(xComponentContext,
-        "org.openoffice.Office.Writer/", "Cursor/Option", "IgnoreProtectedArea",
-        css::uno::Any(false), comphelper::EConfigurationModes::Standard);
-    // We should be able to edit at positions adjacent to fields.
-    // Check if the start and the end of the 1st paragraph are not protected
-    // (they are adjacent to FORMCHECKBOX)
-    pWrtShell->SttPara();
-    CPPUNIT_ASSERT_EQUAL(false, pWrtShell->HasReadonlySel());
-    pWrtShell->EndPara();
-    CPPUNIT_ASSERT_EQUAL(false, pWrtShell->HasReadonlySel());
-    // 2nd paragraph - FORMTEXT
-    pWrtShell->Down(/*bSelect=*/false);
-    // Check selection across FORMTEXT field boundary - must be read-only
-    pWrtShell->SttPara();
-    pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 1, /*bBasicCall=*/false);
-    CPPUNIT_ASSERT_EQUAL(true, pWrtShell->HasReadonlySel());
-    // Test deletion of whole field with single backspace
-    // Previously it only removed right boundary of FORMTEXT, or failed removal at all
-    const IDocumentMarkAccess* pMarksAccess = pDoc->getIDocumentMarkAccess();
-    sal_Int32 nMarksBefore = pMarksAccess->getAllMarksCount();
-    pWrtShell->EndPara();
-    pWrtShell->DelLeft();
-    sal_Int32 nMarksAfter = pMarksAccess->getAllMarksCount();
-    CPPUNIT_ASSERT_EQUAL(nMarksBefore, nMarksAfter + 1);
-}
-
-void SwUiWriterTest::testTdf125151_protected()
-{
-    // Similar to testTdf105625 except this is in a protected section,
-    // so read-only is already true when fieldmarks are considered.
-    SwDoc* pDoc = createDoc("tdf125151_protected.fodt");
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    uno::Reference<uno::XComponentContext> xComponentContext(comphelper::getProcessComponentContext());
-    // Ensure correct initial setting
-    comphelper::ConfigurationHelper::writeDirectKey(xComponentContext,
-        "org.openoffice.Office.Writer/", "Cursor/Option", "IgnoreProtectedArea",
-        css::uno::Any(false), comphelper::EConfigurationModes::Standard);
-    pWrtShell->Down(/*bSelect=*/false);
-    // The cursor moved inside of the FieldMark textbox.
-    CPPUNIT_ASSERT_EQUAL_MESSAGE("Readonly 1", false, pWrtShell->HasReadonlySel());
-    // Move left to the start/definition of the textbox
-    pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false);
-    CPPUNIT_ASSERT_EQUAL_MESSAGE("Readonly 2", true, pWrtShell->HasReadonlySel());
-}
-
-void SwUiWriterTest::testTdf125151_protectedB()
-{
-    // Similar to testTdf105625 except this is protected with the Protect_Form compat setting
-    SwDoc* pDoc = createDoc("tdf125151_protectedB.fodt");
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    uno::Reference<uno::XComponentContext> xComponentContext(comphelper::getProcessComponentContext());
-    // Ensure correct initial setting
-    comphelper::ConfigurationHelper::writeDirectKey(xComponentContext,
-        "org.openoffice.Office.Writer/", "Cursor/Option", "IgnoreProtectedArea",
-        css::uno::Any(false), comphelper::EConfigurationModes::Standard);
-    // The cursor starts inside of the FieldMark textbox.
-    CPPUNIT_ASSERT_EQUAL_MESSAGE("Readonly 1", false, pWrtShell->HasReadonlySel());
-    // Move left to the start/definition of the textbox
-    pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false);
-    CPPUNIT_ASSERT_EQUAL_MESSAGE("Readonly 2", true, pWrtShell->HasReadonlySel());
-}
-
-void SwUiWriterTest::testTdf106736()
-{
-    createDoc("tdf106736-grid.odt");
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    sal_Int32 nWidth = getXPath(pXmlDoc, "(//Text[@nType='PortionType::TabLeft'])[1]", "nWidth").toInt32();
-    // In tdf106736, width of tab overflow so that it got
-    // width value around 9200, expected value is around 103
-    CPPUNIT_ASSERT_MESSAGE("Left Tab width is ~103", nWidth < 150);
-}
-
-void SwUiWriterTest::testMsWordCompTrailingBlanks()
-{
-    // The option is true in settings.xml
-    SwDoc* pDoc = createDoc( "MsWordCompTrailingBlanksTrue.odt" );
-    CPPUNIT_ASSERT_EQUAL( true, pDoc->getIDocumentSettingAccess().get( DocumentSettingId::MS_WORD_COMP_TRAILING_BLANKS ) );
-    calcLayout();
-    // Check that trailing spaces spans have no width if option is enabled
-
-    CPPUNIT_ASSERT_EQUAL( OUString(), parseDump( "/root/page/body/txt[2]/Text[4]", "nWidth" ) );
-    CPPUNIT_ASSERT_EQUAL( OUString(), parseDump( "/root/page/body/txt[2]/Text[5]", "nWidth" ) );
-    CPPUNIT_ASSERT_EQUAL( OUString(), parseDump( "/root/page/body/txt[3]/Text[4]", "nWidth" ) );
-    CPPUNIT_ASSERT_EQUAL( OUString(), parseDump( "/root/page/body/txt[3]/Text[5]", "nWidth" ) );
-
-    // The option is false in settings.xml
-    pDoc = createDoc( "MsWordCompTrailingBlanksFalse.odt" );
-    CPPUNIT_ASSERT_EQUAL( false, pDoc->getIDocumentSettingAccess().get( DocumentSettingId::MS_WORD_COMP_TRAILING_BLANKS ) );
-    calcLayout();
-    // Check that trailing spaces spans have width if option is disabled
-    CPPUNIT_ASSERT( !parseDump( "/root/page/body/txt[2]/Text[4]", "nWidth" ).isEmpty() );
-    CPPUNIT_ASSERT( !parseDump( "/root/page/body/txt[2]/Text[5]", "nWidth" ).isEmpty() );
-    CPPUNIT_ASSERT( !parseDump( "/root/page/body/txt[3]/Text[4]", "nWidth" ).isEmpty() );
-    CPPUNIT_ASSERT( !parseDump( "/root/page/body/txt[3]/Text[5]", "nWidth" ).isEmpty() );
-
-    // MsWordCompTrailingBlanks option should be false by default in new documents
-    pDoc = createDoc();
-    CPPUNIT_ASSERT_EQUAL( false, pDoc->getIDocumentSettingAccess().get( DocumentSettingId::MS_WORD_COMP_TRAILING_BLANKS ) );
-
-    // The option should be true if a .docx, .doc or .rtf document is opened
-    pDoc = createDoc( "MsWordCompTrailingBlanks.docx" );
-    CPPUNIT_ASSERT_EQUAL( true, pDoc->getIDocumentSettingAccess().get( DocumentSettingId::MS_WORD_COMP_TRAILING_BLANKS ) );
-}
-
-void SwUiWriterTest::testCreateDocxAnnotation()
-{
-    createDoc();
-
-    // insert an annotation with a text
-    const OUString aSomeText("some text");
-    uno::Sequence<beans::PropertyValue> aPropertyValues = comphelper::InitPropertySequence(
-    {
-        {"Text", uno::makeAny(aSomeText)},
-        {"Author", uno::makeAny(OUString("me"))},
-    });
-    dispatchCommand(mxComponent, ".uno:InsertAnnotation", aPropertyValues);
-
-    // Save it as DOCX & load it again
-    reload("Office Open XML Text", "create-docx-annotation.docx");
-
-    // get the annotation
-    uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
-    uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields());
-    uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
-    uno::Reference<beans::XPropertySet> xField(xFields->nextElement(), uno::UNO_QUERY);
-
-    // this was empty instead of "some text"
-    CPPUNIT_ASSERT_EQUAL(aSomeText, xField->getPropertyValue("Content").get<OUString>());
-}
-
-void SwUiWriterTest::testTdf107976()
-{
-    // Create a document and create two transferables.
-    SwDoc* pDoc = createDoc();
-    SwWrtShell& rShell = *pDoc->GetDocShell()->GetWrtShell();
-    rtl::Reference<SwTransferable> pTransferable(new SwTransferable(rShell));
-    rtl::Reference<SwTransferable> pTransferable2(new SwTransferable(rShell));
-    // Now close the document.
-    mxComponent->dispose();
-    mxComponent.clear();
-    // This failed: the first shell had a pointer to the deleted shell.
-    CPPUNIT_ASSERT(!pTransferable->GetShell());
-    CPPUNIT_ASSERT(!pTransferable2->GetShell());
-}
-
-void SwUiWriterTest::testTdf58604()
-{
-#ifdef _WIN32
-    // Allow linebreak character follows hanging punctuation immediately instead of
-    // breaking at the start of the next line.
-    load(DATA_DIRECTORY, "tdf58604.odt");
-    CPPUNIT_ASSERT_EQUAL( OUString("PortionType::Break"), parseDump( "(/root/page/body/txt/LineBreak[1]/preceding::Text)[last()]", "nType" ) );
-#endif
-}
-
-void SwUiWriterTest::testTdf112025()
-{
-    load(DATA_DIRECTORY, "fdo112025.odt");
-    const int numberOfParagraphs = getParagraphs();
-    CPPUNIT_ASSERT_EQUAL(1, numberOfParagraphs);
-
-    // get a page cursor
-    uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
-    uno::Reference<text::XTextViewCursorSupplier> xTextViewCursorSupplier(xModel->getCurrentController(), uno::UNO_QUERY);
-    uno::Reference<text::XPageCursor> xCursor(xTextViewCursorSupplier->getViewCursor(), uno::UNO_QUERY);
-    xCursor->jumpToEndOfPage();
-
-    OUString insertFileid = m_directories.getURLFromSrc(DATA_DIRECTORY) + "fdo112025-insert.docx";
-    uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence({{ "Name", uno::makeAny(insertFileid) }}));
-    dispatchCommand(mxComponent, ".uno:InsertDoc", aPropertyValues);
-    // something has been inserted + an additional paragraph
-    CPPUNIT_ASSERT_GREATER(numberOfParagraphs, getParagraphs());
-
-    uno::Reference<beans::XPropertySet> xStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY);
-    CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xStyle, "IsLandscape"));
-}
-
-void SwUiWriterTest::testTdf72942()
-{
-    load(DATA_DIRECTORY, "fdo72942.docx");
-
-    // get a page cursor
-    uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
-    uno::Reference<text::XTextViewCursorSupplier> xTextViewCursorSupplier(xModel->getCurrentController(), uno::UNO_QUERY);
-    uno::Reference<text::XPageCursor> xCursor(xTextViewCursorSupplier->getViewCursor(), uno::UNO_QUERY);
-    xCursor->jumpToEndOfPage();
-
-    OUString insertFileid = m_directories.getURLFromSrc(DATA_DIRECTORY) + "fdo72942-insert.docx";
-    uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence({{ "Name", uno::makeAny(insertFileid) }}));
-    dispatchCommand(mxComponent, ".uno:InsertDoc", aPropertyValues);
-
-    // check styles of paragraphs added from [fdo72942.docx]
-    const uno::Reference< text::XTextRange > xRun1 = getRun(getParagraph(1), 1);
-    CPPUNIT_ASSERT_EQUAL(OUString("Default English (Liberation serif) text with "), xRun1->getString());
-    CPPUNIT_ASSERT_EQUAL(OUString("Liberation Serif"), getProperty<OUString>(xRun1, "CharFontName"));
-
-    const uno::Reference< text::XTextRange > xRun2 = getRun(getParagraph(2), 1);
-    CPPUNIT_ASSERT_EQUAL(OUString("Header 1 English text (Liberation sans) with "), xRun2->getString());
-    CPPUNIT_ASSERT_EQUAL(OUString("Liberation Sans"), getProperty<OUString>(xRun2, "CharFontName"));
-
-    // check styles of paragraphs added from [fdo72942-insert.docx]
-    const uno::Reference< text::XTextRange > xRun3 = getRun(getParagraph(4), 1);
-    CPPUNIT_ASSERT_EQUAL(OUString("Default German text (Calibri) with "), xRun3->getString());
-    CPPUNIT_ASSERT_EQUAL(OUString("Liberation Serif"), getProperty<OUString>(xRun3, "CharFontName"));
-
-    const uno::Reference< text::XTextRange > xRun4 = getRun(getParagraph(5), 1);
-    CPPUNIT_ASSERT_EQUAL(OUString("Header 1 German text (Calibri Light) with "), xRun4->getString());
-    CPPUNIT_ASSERT_EQUAL(OUString("Liberation Sans"), getProperty<OUString>(xRun4, "CharFontName"));
-}
-
-void SwUiWriterTest::testTdf114306()
-{
-    load(DATA_DIRECTORY, "fdo114306.odt");
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-
-    // There are 2 long paragraphs in cell A1.
-    // A part of paragraph 2 should flow over to the second page but
-    // *not* the whole paragraph. There should be 2 paragraphs on
-    // page 1 and 1 paragraph on page 2.
-    assertXPath(pXmlDoc, "/root/page[1]/body/tab[1]/row[1]/cell[1]/txt", 2);
-    assertXPath(pXmlDoc, "/root/page[2]/body/tab[1]/row[1]/cell[1]/txt", 1);
-}
-
-void SwUiWriterTest::testTdf114306_2()
-{
-    // tdf#114306 fix unexpected page break in row-spanned table
-    // load regression document without writer crash
-    load(DATA_DIRECTORY, "fdo114306_2.odt");
-
-    // correct number of pages
-    CPPUNIT_ASSERT_EQUAL(4, getPages());
-}
-
-void SwUiWriterTest::testTdf113877_mergeDocs(const char* aDestDoc, const char* aInsertDoc)
-{
-    load(DATA_DIRECTORY, aDestDoc);
-
-    // set a page cursor into the end of the document
-    uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
-    uno::Reference<text::XTextViewCursorSupplier> xTextViewCursorSupplier(xModel->getCurrentController(), uno::UNO_QUERY);
-    uno::Reference<text::XPageCursor> xCursor(xTextViewCursorSupplier->getViewCursor(), uno::UNO_QUERY);
-    xCursor->jumpToEndOfPage();
-
-    // insert the same document at current cursor position
-    {
-        const OUString insertFileid = m_directories.getURLFromSrc(DATA_DIRECTORY) + OUString::createFromAscii(aInsertDoc);
-        uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence({ { "Name", uno::makeAny(insertFileid) } }));
-        dispatchCommand(mxComponent, ".uno:InsertDoc", aPropertyValues);
-    }
-}
-
-// During insert of the document with list inside into the main document inside the list
-// we should merge both lists into one, when they have the same list properties
-void SwUiWriterTest::testTdf113877()
-{
-    testTdf113877_mergeDocs("tdf113877_insert_numbered_list.odt", "tdf113877_insert_numbered_list.odt");
-
-    const OUString listId1 = getProperty<OUString>(getParagraph(1), "ListId");
-    const OUString listId4 = getProperty<OUString>(getParagraph(4), "ListId");
-    const OUString listId5 = getProperty<OUString>(getParagraph(5), "ListId");
-    const OUString listId6 = getProperty<OUString>(getParagraph(6), "ListId");
-    const OUString listId7 = getProperty<OUString>(getParagraph(7), "ListId");
-
-    // the initial list with 4 list items
-    CPPUNIT_ASSERT_EQUAL(listId1, listId4);
-
-    // the last of the first list, and the first of the inserted list
-    CPPUNIT_ASSERT_EQUAL(listId4, listId5);
-    CPPUNIT_ASSERT_EQUAL(listId5, listId6);
-    CPPUNIT_ASSERT_EQUAL(listId6, listId7);
-}
-
-// The same test as testTdf113877() but merging of two list should not be performed.
-void SwUiWriterTest::testTdf113877NoMerge()
-{
-    testTdf113877_mergeDocs("tdf113877_insert_numbered_list.odt", "tdf113877_insert_numbered_list_abcd.odt");
-
-    const OUString listId1 = getProperty<OUString>(getParagraph(1), "ListId");
-    const OUString listId4 = getProperty<OUString>(getParagraph(4), "ListId");
-    const OUString listId5 = getProperty<OUString>(getParagraph(5), "ListId");
-    const OUString listId6 = getProperty<OUString>(getParagraph(6), "ListId");
-    const OUString listId7 = getProperty<OUString>(getParagraph(7), "ListId");
-
-    // the initial list with 4 list items
-    CPPUNIT_ASSERT_EQUAL(listId1, listId4);
-
-    // the last of the first list, and the first of the inserted list
-    CPPUNIT_ASSERT(listId4 != listId5);
-    CPPUNIT_ASSERT_EQUAL(listId5, listId6);
-    CPPUNIT_ASSERT(listId6 != listId7);
-}
-
-// Related test to testTdf113877(): Inserting into empty document a new document with list.
-// Insert position has NO its own paragraph style ("Standard" will be used).
-//
-// Resulting document should be the same for following tests:
-// - testTdf113877_default_style()
-// - testTdf113877_Standard_style()
-//
-void SwUiWriterTest::testTdf113877_default_style()
-{
-    testTdf113877_mergeDocs("tdf113877_blank.odt", "tdf113877_insert_numbered_list_abcd.odt");
-
-    const OUString listId1 = getProperty<OUString>(getParagraph(1), "ListId");
-    const OUString listId2 = getProperty<OUString>(getParagraph(2), "ListId");
-    const OUString listId3 = getProperty<OUString>(getParagraph(3), "ListId");
-
-    CPPUNIT_ASSERT_EQUAL(listId1, listId2);
-    CPPUNIT_ASSERT_EQUAL(listId1, listId3);
-}
-
-// Related test to testTdf113877(): Inserting into empty document a new document with list.
-// Insert position has its own paragraph style derived from "Standard", but this style is the same as "Standard".
-//
-// Resulting document should be the same for following tests:
-// - testTdf113877_default_style()
-// - testTdf113877_Standard_style()
-//
-void SwUiWriterTest::testTdf113877_Standard_style()
-{
-    testTdf113877_mergeDocs("tdf113877_blank_ownStandard.odt", "tdf113877_insert_numbered_list_abcd.odt");
-
-    const OUString listId1 = getProperty<OUString>(getParagraph(1), "ListId");
-    const OUString listId2 = getProperty<OUString>(getParagraph(2), "ListId");
-    const OUString listId3 = getProperty<OUString>(getParagraph(3), "ListId");
-
-    CPPUNIT_ASSERT_EQUAL(listId1, listId2);
-    CPPUNIT_ASSERT_EQUAL(listId1, listId3);
-}
-
-void SwUiWriterTest::testTdf113877_blank_bold_on()
-{
-    testTdf113877_mergeDocs("tdf113877_blank_bold_on.odt", "tdf113877_insert_numbered_list_abcd.odt");
-
-    const OUString listId1 = getProperty<OUString>(getParagraph(1), "ListId");
-    const OUString listId2 = getProperty<OUString>(getParagraph(2), "ListId");
-    const OUString listId3 = getProperty<OUString>(getParagraph(3), "ListId");
-
-    CPPUNIT_ASSERT_EQUAL(listId1, listId2);
-    CPPUNIT_ASSERT_EQUAL(listId1, listId3);
-}
-
-void SwUiWriterTest::testTdf113877_blank_bold_off()
-{
-    testTdf113877_mergeDocs("tdf113877_blank_bold_off.odt", "tdf113877_insert_numbered_list_abcd.odt");
-
-    const OUString listId1 = getProperty<OUString>(getParagraph(1), "ListId");
-    const OUString listId2 = getProperty<OUString>(getParagraph(2), "ListId");
-    const OUString listId3 = getProperty<OUString>(getParagraph(3), "ListId");
-
-    CPPUNIT_ASSERT_EQUAL(listId1, listId2);
-    CPPUNIT_ASSERT_EQUAL(listId1, listId3);
-}
-
-// just care that this does crash/assert
-void SwUiWriterTest::testRhbz1810732()
-{
-    load(DATA_DIRECTORY, "tdf113877_blank.odt");
-
-    // set a page cursor into the end of the document
-    uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
-    uno::Reference<text::XTextViewCursorSupplier> xTextViewCursorSupplier(xModel->getCurrentController(), uno::UNO_QUERY);
-    uno::Reference<text::XPageCursor> xCursor(xTextViewCursorSupplier->getViewCursor(), uno::UNO_QUERY);
-    xCursor->jumpToEndOfPage();
-
-    // insert the same document at current cursor position
-    {
-        const OUString insertFileid = m_directories.getURLFromSrc(DATA_DIRECTORY) + "rhbz1810732.docx";
-        uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence({ { "Name", uno::makeAny(insertFileid) } }));
-        dispatchCommand(mxComponent, ".uno:InsertDoc", aPropertyValues);
-    }
-}
-
-void SwUiWriterTest::testTdf142157()
-{
-    mxComponent = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument");
-
-    const OUString insertFileid = m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf142157.odt";
-    uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence({ { "Name", uno::makeAny(insertFileid) } }));
-    dispatchCommand(mxComponent, ".uno:InsertDoc", aPropertyValues);
-
-    uno::Reference<text::XTextSectionsSupplier> xTextSectionsSupplier(mxComponent, uno::UNO_QUERY);
-    uno::Reference<container::XIndexAccess> xSections(xTextSectionsSupplier->getTextSections(), uno::UNO_QUERY);
-
-    // Without the fix in place, this test would have failed with
-    // - Expected: 1
-    // - Actual  : 0
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
-}
-
-void SwUiWriterTest::testTdf108524()
-{
-    createDoc("tdf108524.odt");
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    // In total we expect two cells containing a section.
-    assertXPath(pXmlDoc, "/root/page/body/tab/row/cell/section", 2);
-
-    assertXPath(pXmlDoc, "/root/page[1]/body/tab/row/cell/section", 1);
-    // This was 0, section wasn't split, instead it was only on the first page
-    // and it was cut off.
-    assertXPath(pXmlDoc, "/root/page[2]/body/tab/row/cell/section", 1);
-}
-
-void SwUiWriterTest::testLinesInSectionInTable()
-{
-    // This is similar to testTdf108524(), but the page boundary now is not in
-    // the middle of a multi-line paragraph: the section only contains oneliner
-    // paragraphs instead.
-    createDoc("lines-in-section-in-table.odt");
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    // In total we expect two cells containing a section.
-    assertXPath(pXmlDoc, "/root/page/body/tab/row/cell/section", 2);
-
-    assertXPath(pXmlDoc, "/root/page[1]/body/tab/row/cell/section", 1);
-    // This was 0, section wasn't split, instead it was only on the first page
-    // and it was cut off.
-    assertXPath(pXmlDoc, "/root/page[2]/body/tab/row/cell/section", 1);
-}
-
-void SwUiWriterTest::testLinesMoveBackwardsInSectionInTable()
-{
-#if HAVE_MORE_FONTS
-    // Assert that paragraph "4" is on page 1 and "5" is on page 2.
-    SwDoc* pDoc = createDoc("lines-in-section-in-table.odt");
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    assertXPath(pXmlDoc, "/root/page", 2);
-    sal_uInt32 nPara4Node = getXPath(pXmlDoc, "/root/page[1]/body/tab/row/cell[1]/section/txt[last()]", "txtNodeIndex").toUInt32();
-    CPPUNIT_ASSERT_EQUAL(OUString("4"), pDoc->GetNodes()[nPara4Node]->GetTextNode()->GetText());
-    sal_uInt32 nPara5Node = getXPath(pXmlDoc, "/root/page[2]/body/tab/row/cell[1]/section/txt[1]", "txtNodeIndex").toUInt32();
-    CPPUNIT_ASSERT_EQUAL(OUString("5"), pDoc->GetNodes()[nPara5Node]->GetTextNode()->GetText());
-
-    // Remove paragraph "4".
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    while (pWrtShell->GetCursor()->GetNode().GetIndex() < nPara4Node)
-        pWrtShell->Down(/*bSelect=*/false);
-    pWrtShell->EndPara();
-    pWrtShell->Up(/*bSelect=*/true);
-    pWrtShell->DelLeft();
-
-    // Assert that paragraph "5" is now moved back to page 1 and is the last paragraph there.
-    discardDumpedLayout();
-    pXmlDoc = parseLayoutDump();
-    sal_uInt32 nPage1LastNode = getXPath(pXmlDoc, "/root/page[1]/body/tab/row/cell[1]/section/txt[last()]", "txtNodeIndex").toUInt32();
-    // This was "3", paragraph "4" was deleted, but "5" was not moved backwards from page 2.
-    CPPUNIT_ASSERT_EQUAL(OUString("5"), pDoc->GetNodes()[nPage1LastNode]->GetTextNode()->GetText());
-#endif
-}
-
-void SwUiWriterTest::testTableInSection()
-{
-#if HAVE_MORE_FONTS
-    // The document has a section, containing a table that spans over 2 pages.
-    createDoc("table-in-sect.odt");
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    // In total we expect 4 cells.
-    assertXPath(pXmlDoc, "/root/page/body/section/tab/row/cell", 4);
-
-    // Assert that on both pages the section contains 2 cells.
-    assertXPath(pXmlDoc, "/root/page[1]/body/section/tab/row/cell", 2);
-    assertXPath(pXmlDoc, "/root/page[2]/body/section/tab/row/cell", 2);
-#endif
-}
-
-void SwUiWriterTest::testTableInNestedSection()
-{
-#if HAVE_MORE_FONTS
-    // The document has a nested section, containing a table that spans over 2 pages.
-    // This crashed the layout.
-    createDoc("rhbz739252-3.odt");
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    // Make sure the table is inside a section and spans over 2 pages.
-    assertXPath(pXmlDoc, "//page[1]//section/tab", 1);
-    assertXPath(pXmlDoc, "//page[2]//section/tab", 1);
-#endif
-}
-
-void SwUiWriterTest::testTdf112741()
-{
-#if HAVE_MORE_FONTS
-    createDoc("tdf112741.fodt");
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    // This was 5 pages.
-    assertXPath(pXmlDoc, "//page", 4);
-    assertXPath(pXmlDoc, "//page[1]/body/tab/row/cell/tab/row/cell/section", 1);
-    assertXPath(pXmlDoc, "//page[2]/body/tab/row/cell/tab/row/cell/section", 1);
-    // This failed, 3rd page contained no sections.
-    assertXPath(pXmlDoc, "//page[3]/body/tab/row/cell/tab/row/cell/section", 1);
-    assertXPath(pXmlDoc, "//page[4]/body/tab/row/cell/tab/row/cell/section", 1);
-#endif
-}
-
-void SwUiWriterTest::testTdf112860()
-{
-#if HAVE_MORE_FONTS
-    // The document has a split section inside a nested table, and also a table
-    // in the footer.
-    // This crashed the layout.
-    createDoc("tdf112860.fodt");
-#endif
-}
-
-void SwUiWriterTest::testTdf113287()
-{
-#if HAVE_MORE_FONTS
-    createDoc("tdf113287.fodt");
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    assertXPath(pXmlDoc, "//page", 2);
-    sal_uInt32 nCellTop = getXPath(pXmlDoc, "//page[2]/body/tab/row/cell[1]/infos/bounds", "top").toUInt32();
-    sal_uInt32 nSectionTop = getXPath(pXmlDoc, "//page[2]/body/tab/row/cell[1]/section/infos/bounds", "top").toUInt32();
-    // Make sure section frame is inside the cell frame.
-    // Expected greater than 4593, was only 3714.
-    CPPUNIT_ASSERT_GREATER(nCellTop, nSectionTop);
-#endif
-}
-
-void SwUiWriterTest::testTdf113445()
-{
-#if HAVE_MORE_FONTS
-    // Force multiple-page view.
-    SwDoc* pDoc = createDoc("tdf113445.fodt");
-    SwDocShell* pDocShell = pDoc->GetDocShell();
-    SwView* pView = pDocShell->GetView();
-    pView->SetViewLayout(/*nColumns=*/2, /*bBookMode=*/false);
-    calcLayout();
-
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    assertXPath(pXmlDoc, "//page", 2);
-    sal_uInt32 nPage1Left = getXPath(pXmlDoc, "//page[1]/infos/bounds", "left").toUInt32();
-    sal_uInt32 nPage2Left = getXPath(pXmlDoc, "//page[2]/infos/bounds", "left").toUInt32();
-    // Make sure that page 2 is on the right hand side of page 1, not below it.
-    CPPUNIT_ASSERT_GREATER(nPage1Left, nPage2Left);
-
-    // Insert a new paragraph at the start of the document.
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    pWrtShell->StartOfSection();
-    pWrtShell->SplitNode();
-    discardDumpedLayout();
-    pXmlDoc = parseLayoutDump();
-
-    // Make sure that Table2:C5 and Table2:D5 has its section frame inside the cell frame.
-    sal_uInt32 nCell3Top = getXPath(pXmlDoc, "//page[2]/body/tab/row/cell/tab/row[4]/cell[3]/infos/bounds", "top").toUInt32();
-    sal_uInt32 nSection3Top = getXPath(pXmlDoc, "//page[2]/body/tab/row/cell/tab/row[4]/cell[3]/section/infos/bounds", "top").toUInt32();
-    CPPUNIT_ASSERT_GREATER(nCell3Top, nSection3Top);
-    sal_uInt32 nCell4Top = getXPath(pXmlDoc, "//page[2]/body/tab/row/cell/tab/row[4]/cell[4]/infos/bounds", "top").toUInt32();
-    sal_uInt32 nSection4Top = getXPath(pXmlDoc, "//page[2]/body/tab/row/cell/tab/row[4]/cell[4]/section/infos/bounds", "top").toUInt32();
-    CPPUNIT_ASSERT_GREATER(nCell4Top, nSection4Top);
-    // Also check if the two cells in the same row have the same top position.
-    // This was 4818, expected only 1672.
-    CPPUNIT_ASSERT_EQUAL(nCell3Top, nCell4Top);
-#endif
-}
-
-void SwUiWriterTest::testTdf113686()
-{
-#if HAVE_MORE_FONTS
-    SwDoc* pDoc = createDoc("tdf113686.fodt");
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    assertXPath(pXmlDoc, "/root/page", 2);
-    sal_uInt32 nPage1LastNode = getXPath(pXmlDoc, "/root/page[1]/body/tab/row/cell[1]/tab/row/cell[1]/txt[last()]", "txtNodeIndex").toUInt32();
-    CPPUNIT_ASSERT_EQUAL(OUString("Table2:A1-P10"), pDoc->GetNodes()[nPage1LastNode]->GetTextNode()->GetText());
-    sal_uInt32 nPage2FirstNode = getXPath(pXmlDoc, "/root/page[2]/body/tab/row/cell[1]/section/txt[1]", "txtNodeIndex").toUInt32();
-    CPPUNIT_ASSERT_EQUAL(OUString("Table1:A1"), pDoc->GetNodes()[nPage2FirstNode]->GetTextNode()->GetText());
-
-    // Remove page 2.
-    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
-    while (pWrtShell->GetCursor()->Start()->nNode.GetIndex() < nPage1LastNode)
-        pWrtShell->Down(/*bSelect=*/false);
-    pWrtShell->EndPara();
-    for (int i = 0; i < 3; ++i)
-        pWrtShell->Up(/*bSelect=*/true);
-    pWrtShell->DelLeft();
-
-    // Assert that the second page is removed.
-    discardDumpedLayout();
-    pXmlDoc = parseLayoutDump();
-    // This was still 2, content from 2nd page was not moved.
-    assertXPath(pXmlDoc, "/root/page", 1);
-#endif
-}
-
-void SwUiWriterTest::testTableInSectionInTable()
-{
-#if HAVE_MORE_FONTS
-    // The document has a table, containing a section, containing a nested
-    // table.
-    // This crashed the layout.
-    createDoc("i95698.odt");
-#endif
-}
-
-void SwUiWriterTest::testSectionInTableInTable()
-{
-#if HAVE_MORE_FONTS
-    // The document has a nested table, containing a multi-line section at a
-    // page boundary.
-    // This crashed the layout later in SwFrame::IsFootnoteAllowed().
-    createDoc("tdf112109.fodt");
-#endif
-}
-
-void SwUiWriterTest::testSectionInTableInTable2()
-{
-#if HAVE_MORE_FONTS
-    createDoc("split-section-in-nested-table.fodt");
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    sal_uInt32 nSection1 = getXPath(pXmlDoc, "//page[1]//body/tab/row/cell/tab/row/cell/section", "id").toUInt32();
-    sal_uInt32 nSection1Follow = getXPath(pXmlDoc, "//page[1]//body/tab/row/cell/tab/row/cell/section", "follow").toUInt32();
-    // This failed, the section wasn't split inside a nested table.
-    sal_uInt32 nSection2 = getXPath(pXmlDoc, "//page[2]//body/tab/row/cell/tab/row/cell/section", "id").toUInt32();
-    sal_uInt32 nSection2Precede = getXPath(pXmlDoc, "//page[2]//body/tab/row/cell/tab/row/cell/section", "precede").toUInt32();
-
-    // Make sure that the first's follow and the second's precede is correct.
-    CPPUNIT_ASSERT_EQUAL(nSection2, nSection1Follow);
-    CPPUNIT_ASSERT_EQUAL(nSection1, nSection2Precede);
-#endif
-}
-
-void SwUiWriterTest::testSectionInTableInTable3()
-{
-#if HAVE_MORE_FONTS
-    createDoc("tdf113153.fodt");
-
-    uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, uno::UNO_QUERY);
-    uno::Reference<container::XIndexAccess> xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY);
-    uno::Reference<container::XNamed> xTable(xTables->getByIndex(1), uno::UNO_QUERY);
-    CPPUNIT_ASSERT_EQUAL(OUString("Table16"), xTable->getName());
-
-    uno::Reference<text::XTextTable> xRowSupplier(xTable, uno::UNO_QUERY);
-    uno::Reference<table::XTableRows> xRows = xRowSupplier->getRows();
-    uno::Reference<beans::XPropertySet> xRow(xRows->getByIndex(1), uno::UNO_QUERY);
-    xRow->setPropertyValue("IsSplitAllowed", uno::makeAny(true));
-    // This never returned.
-    calcLayout();
-
-    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
-    sal_uInt32 nTable1 = getXPath(pXmlDoc, "//page[1]//body/tab", "id").toUInt32();
-    sal_uInt32 nTable1Follow = getXPath(pXmlDoc, "//page[1]//body/tab", "follow").toUInt32();
-    sal_uInt32 nTable2 = getXPath(pXmlDoc, "//page[2]//body/tab", "id").toUInt32();
-    sal_uInt32 nTable2Precede = getXPath(pXmlDoc, "//page[2]//body/tab", "precede").toUInt32();
-    sal_uInt32 nTable2Follow = getXPath(pXmlDoc, "//page[2]//body/tab", "follow").toUInt32();
-    sal_uInt32 nTable3 = getXPath(pXmlDoc, "//page[3]//body/tab", "id").toUInt32();
-    sal_uInt32 nTable3Precede = getXPath(pXmlDoc, "//page[3]//body/tab", "precede").toUInt32();
-
-    // Make sure the outer table frames are linked together properly.
-    CPPUNIT_ASSERT_EQUAL(nTable2, nTable1Follow);
-    CPPUNIT_ASSERT_EQUAL(nTable1, nTable2Precede);
-    CPPUNIT_ASSERT_EQUAL(nTable3, nTable2Follow);

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list