[Libreoffice-commits] core.git: sw/qa sw/source

Justin Luth (via logerrit) logerrit at kemper.freedesktop.org
Tue Dec 29 15:39:57 UTC 2020


 sw/qa/uitest/data/tdf138907_titlePageDialog.odt |binary
 sw/qa/uitest/writer_tests5/titlePageWizard.py   |   73 ++++++++++++++++++++++++
 sw/source/ui/misc/titlepage.cxx                 |   19 +++---
 3 files changed, 84 insertions(+), 8 deletions(-)

New commits:
commit ccfd8e9d09f9ac0a0ea92d0f378391006faaf934
Author:     Justin Luth <justin.luth at collabora.com>
AuthorDate: Sat Dec 26 10:52:08 2020 +0300
Commit:     Justin Luth <justin_luth at sil.org>
CommitDate: Tue Dec 29 16:39:18 2020 +0100

    tdf#138907 sw TitlePageDlg: fix round-tripping
    
    This Format -> Title Pages dialog is completely broken,
    so I threw in lots of FIXME notes.
    
    At least for the case of just using the existing pages
    and setting them up as title/follow page, fix:
    1.) the ability to round-trip page number restart if a
    numbering restart without a page style already existed.
    (Yes, this likely is an odd case of someone messing around.
    In any case, a page number restart REQUIRES a page style)
    
    make UITest_writer_tests5 UITEST_TEST_NAME=\
    titlePageWizard.tdf138907.test_tdf138907
    
    Change-Id: I544145e9f749f471b54fa6686242e93bc98f50be
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108322
    Tested-by: Jenkins
    Reviewed-by: Justin Luth <justin_luth at sil.org>

diff --git a/sw/qa/uitest/data/tdf138907_titlePageDialog.odt b/sw/qa/uitest/data/tdf138907_titlePageDialog.odt
new file mode 100644
index 000000000000..837e0d0132cb
Binary files /dev/null and b/sw/qa/uitest/data/tdf138907_titlePageDialog.odt differ
diff --git a/sw/qa/uitest/writer_tests5/titlePageWizard.py b/sw/qa/uitest/writer_tests5/titlePageWizard.py
new file mode 100644
index 000000000000..f23c79c68768
--- /dev/null
+++ b/sw/qa/uitest/writer_tests5/titlePageWizard.py
@@ -0,0 +1,73 @@
+# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-
+#
+# 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/.
+#
+from uitest.framework import UITestCase
+from uitest.uihelper.common import get_state_as_dict
+from libreoffice.uno.propertyvalue import mkPropertyValues
+import org.libreoffice.unotest
+import pathlib
+
+def get_url_for_data_file(file_name):
+    return pathlib.Path(org.libreoffice.unotest.makeCopyFromTDOC(file_name)).as_uri()
+
+# This tests the Format->Title Page wizard, specifically the reset page number portion.
+class tdf138907(UITestCase):
+    def test_tdf138907(self):
+        self.ui_test.load_file(get_url_for_data_file("tdf138907_titlePageDialog.odt"))
+        document = self.ui_test.get_component()
+
+        # Confirm the starting state. Just a page break, without a valid restart page number on page 2
+        self.assertEqual(document.CurrentController.PageCount, 5)
+        Paragraphs = document.Text.createEnumeration()
+        Para1 = Paragraphs.nextElement()
+        self.assertEqual(Para1.String, "6")
+        self.assertEqual(Para1.PageDescName, "First Page")
+        Para2 = Paragraphs.nextElement()
+        self.assertEqual(Para2.String, "7")
+        self.assertEqual(Para2.PageDescName, None)
+
+        #dialog Title Page
+        self.ui_test.execute_dialog_through_command(".uno:TitlePageDialog")
+        xDialog = self.xUITest.getTopFocusWindow()
+        #set restart page number to 2. With this doc, it defaults to resetting to 1.
+        xRestartNumbering = xDialog.getChild("NF_RESTART_NUMBERING")
+        xRestartNumbering.executeAction("UP", tuple()) # restart numbering at 2
+        xOKBtn = xDialog.getChild("ok")
+        self.ui_test.close_dialog_through_button(xOKBtn)
+
+        # This correctly reset the starting page number for page 2 as "1".
+        # It wasn't persistent across round-trips though
+        Paragraphs = document.Text.createEnumeration()
+        Para1 = Paragraphs.nextElement()
+        self.assertEqual(Para1.String, "6")
+        self.assertEqual(Para1.PageDescName, "First Page")
+        self.assertEqual(Para2.String, "2")
+        Para2 = Paragraphs.nextElement()
+        # Without this fix, there was no PageDescName specified, just Landscape as default.
+        self.assertEqual(Para2.PageDescName, "Landscape")
+
+        #re-run dialog Title Page
+        self.ui_test.execute_dialog_through_command(".uno:TitlePageDialog")
+        xDialog = self.xUITest.getTopFocusWindow()
+        #accept defaults and OK without making any changes.
+        xOKBtn = xDialog.getChild("ok")
+        self.ui_test.close_dialog_through_button(xOKBtn)
+
+        # Without this fix, re-running the wizard was failing with the title page restarting at page 2.
+        Paragraphs = document.Text.createEnumeration()
+        Para1 = Paragraphs.nextElement()
+        #self.assertEqual(Para1.String, "6")
+        self.assertEqual(Para1.PageDescName, "First Page")
+        Para2 = Paragraphs.nextElement()
+        self.assertEqual(Para2.String, "2")
+        self.assertEqual(Para2.PageDescName, "Landscape")
+
+        #Note: 6 virtual pages, including blank, even page seen in book view
+        self.assertEqual(document.CurrentController.PageCount, 6)
+
+        self.ui_test.close_doc()
+
+# vim: set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sw/source/ui/misc/titlepage.cxx b/sw/source/ui/misc/titlepage.cxx
index 06767dbe3844..149c8f4a8046 100644
--- a/sw/source/ui/misc/titlepage.cxx
+++ b/sw/source/ui/misc/titlepage.cxx
@@ -76,15 +76,9 @@ namespace
         }
 
         // If we want a new descriptor then set it, otherwise reuse the existing one
-        if (!pNewDesc)
+        if (pNewDesc || nPgNo)
         {
-            SwFormatPageDesc aPageFormatDesc(pPageFormatDesc ? *pPageFormatDesc : &rCurrentDesc);
-            if (nPgNo) aPageFormatDesc.SetNumOffset(nPgNo);
-            pSh->SetAttrItem(aPageFormatDesc);
-        }
-        else
-        {
-            SwFormatPageDesc aPageFormatDesc(pNewDesc);
+            SwFormatPageDesc aPageFormatDesc(pNewDesc ? pNewDesc : &rCurrentDesc);
             if (nPgNo) aPageFormatDesc.SetNumOffset(nPgNo);
             pSh->SetAttrItem(aPageFormatDesc);
         }
@@ -133,6 +127,8 @@ void SwTitlePageDlg::FillList()
 sal_uInt16 SwTitlePageDlg::GetInsertPosition() const
 {
     sal_uInt16 nPage = 1;
+    // FIXME: If GetInsertPosition is greater than the current number of pages,
+    // it needs to be reduced to page-count + 1.
     if (m_xPageStartNF->get_sensitive())
         nPage = m_xPageStartNF->get_value();
     return nPage;
@@ -255,6 +251,8 @@ IMPL_LINK_NOARG(SwTitlePageDlg, EditHdl, weld::Button&, void)
 
 IMPL_LINK_NOARG(SwTitlePageDlg, OKHdl, weld::Button&, void)
 {
+    // FIXME: This wizard is almost completely non-functional for inserting new pages.
+
     lcl_PushCursor(mpSh);
 
     mpSh->StartUndo();
@@ -269,12 +267,16 @@ IMPL_LINK_NOARG(SwTitlePageDlg, OKHdl, weld::Button&, void)
     sal_uInt16 nNoPages = m_xPageCountNF->get_value();
     if (!m_xUseExistingPagesRB->get_active())
     {
+        // FIXME: If the starting page number is larger than the last page,
+        // probably should add pages AFTER the last page, not before it.
         mpSh->GotoPage(GetInsertPosition(), false);
+        // FIXME: These new pages cannot be accessed currently with GotoPage. It doesn't know they exist.
         for (sal_uInt16 nI=0; nI < nNoPages; ++nI)
             mpSh->InsertPageBreak();
     }
 
     mpSh->GotoPage(GetInsertPosition(), false);
+    // FIXME: GotoPage is pointing to a page after the newly created index pages, so the wrong pages are getting Index style.
     for (sal_uInt16 nI=1; nI < nNoPages; ++nI)
     {
         if (mpSh->SttNxtPg())
@@ -286,6 +288,7 @@ IMPL_LINK_NOARG(SwTitlePageDlg, OKHdl, weld::Button&, void)
 
     if (nNoPages > 1 && mpSh->GotoPage(GetInsertPosition() + nNoPages, false))
     {
+        // FIXME: By definition, GotoPage(x,bRecord=false) returns false. This is dead code.
         SwFormatPageDesc aPageFormatDesc(mpNormalDesc);
         mpSh->SetAttrItem(aPageFormatDesc);
     }


More information about the Libreoffice-commits mailing list