diff options
author | Xisco Fauli <xiscofauli@libreoffice.org> | 2020-12-22 00:38:03 +0100 |
---|---|---|
committer | Xisco Fauli <xiscofauli@libreoffice.org> | 2020-12-23 19:41:52 +0100 |
commit | d42c73d0bc064633a51db8c1d5fa9e2f60cba5e8 (patch) | |
tree | c8fc8ee5be9eb5b8aef7226efad3e2c2f8b59643 /sw | |
parent | 5edafb22331b7dbd2225be56a91bb2918471de68 (diff) |
tdf#136578: uitest: add wrapper for PageBreakWin
Change-Id: I1536f2f03da9ec64627bd1e2e1776cf130717aff
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108143
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Diffstat (limited to 'sw')
-rw-r--r-- | sw/qa/uitest/data/tdf136578.odt | bin | 0 -> 11770 bytes | |||
-rw-r--r-- | sw/qa/uitest/writer_tests4/tdf136578.py | 38 | ||||
-rw-r--r-- | sw/source/uibase/docvw/PageBreakWin.cxx | 23 | ||||
-rw-r--r-- | sw/source/uibase/inc/PageBreakWin.hxx | 3 | ||||
-rw-r--r-- | sw/source/uibase/inc/uiobject.hxx | 22 | ||||
-rw-r--r-- | sw/source/uibase/uitest/uiobject.cxx | 25 |
6 files changed, 106 insertions, 5 deletions
diff --git a/sw/qa/uitest/data/tdf136578.odt b/sw/qa/uitest/data/tdf136578.odt Binary files differnew file mode 100644 index 000000000000..15a1269c9e89 --- /dev/null +++ b/sw/qa/uitest/data/tdf136578.odt diff --git a/sw/qa/uitest/writer_tests4/tdf136578.py b/sw/qa/uitest/writer_tests4/tdf136578.py new file mode 100644 index 000000000000..ae609f30becb --- /dev/null +++ b/sw/qa/uitest/writer_tests4/tdf136578.py @@ -0,0 +1,38 @@ +# -*- 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 +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() + +class tdf136578(UITestCase): + + def test_tdf136578(self): + + self.ui_test.load_file(get_url_for_data_file("tdf136578.odt")) + + xWriterDoc = self.xUITest.getTopFocusWindow() + xWriterEdit = xWriterDoc.getChild("writer_edit") + + document = self.ui_test.get_component() + + self.assertEqual(document.CurrentController.PageCount, 2) + + self.ui_test.wait_until_child_is_available(xWriterEdit, 'PageBreak') + xPageBreak = xWriterEdit.getChild('PageBreak') + + xPageBreak.executeAction("DELETE", tuple()) + + # Without the fix in place, this test would have failed with + # AssertionError: 1 != 2 + self.assertEqual(document.CurrentController.PageCount, 1) + + self.ui_test.close_doc() + +# vim: set shiftwidth=4 softtabstop=4 expandtab: diff --git a/sw/source/uibase/docvw/PageBreakWin.cxx b/sw/source/uibase/docvw/PageBreakWin.cxx index 2bd4eaa8abc7..34db213d8e15 100644 --- a/sw/source/uibase/docvw/PageBreakWin.cxx +++ b/sw/source/uibase/docvw/PageBreakWin.cxx @@ -27,6 +27,7 @@ #include <strings.hrc> #include <tabfrm.hxx> #include <uiitems.hxx> +#include <uiobject.hxx> #include <view.hxx> #include <viewopt.hxx> #include <wrtsh.hxx> @@ -105,6 +106,8 @@ SwPageBreakWin::SwPageBreakWin( SwEditWin* pEditWin, const SwFrame *pFrame ) : m_nDelayAppearing( 0 ), m_bDestroyed( false ) { + set_id("PageBreak"); // for uitest + m_xMenuButton->connect_toggled(LINK(this, SwPageBreakWin, ToggleHdl)); m_xMenuButton->connect_selected(LINK(this, SwPageBreakWin, SelectHdl)); m_xMenuButton->set_accessible_name(SwResId(STR_PAGE_BREAK_BUTTON)); @@ -239,6 +242,16 @@ IMPL_LINK(SwPageBreakWin, SelectHdl, const OString&, rIdent, void) { SwFrameControlPtr pThis = GetEditWin()->GetFrameControlsManager( ).GetControl( FrameControlType::PageBreak, GetFrame() ); + execute(rIdent); + + // Only fade if there is more than this temporary shared pointer: + // The main reference has been deleted due to a page break removal + if ( pThis.use_count() > 1 ) + Fade( false ); +} + +void SwPageBreakWin::execute(std::string_view rIdent) +{ // Is there a PageBefore break on this page? SwContentFrame *pCnt = const_cast<SwContentFrame*>(GetPageFrame()->FindFirstBodyContent()); SvxBreak eBreak = lcl_GetBreakItem( pCnt ); @@ -333,11 +346,6 @@ IMPL_LINK(SwPageBreakWin, SelectHdl, const OString&, rIdent, void) rNd.GetDoc().GetIDocumentUndoRedo( ).EndUndo( SwUndoId::UI_DELETE_PAGE_BREAK, nullptr ); } - - // Only fade if there is more than this temporary shared pointer: - // The main reference has been deleted due to a page break removal - if ( pThis.use_count() > 1 ) - Fade( false ); } void SwPageBreakWin::UpdatePosition(const std::optional<Point>& xEvtPt) @@ -479,4 +487,9 @@ IMPL_LINK_NOARG(SwPageBreakWin, FadeHandler, Timer *, void) m_aFadeTimer.Start(); } +FactoryFunction SwPageBreakWin::GetUITestFactory() const +{ + return PageBreakUIObject::create; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/inc/PageBreakWin.hxx b/sw/source/uibase/inc/PageBreakWin.hxx index 90f0d9afe562..c5cc9cd7774e 100644 --- a/sw/source/uibase/inc/PageBreakWin.hxx +++ b/sw/source/uibase/inc/PageBreakWin.hxx @@ -39,6 +39,7 @@ public: virtual ~SwPageBreakWin() override; virtual void dispose() override; + void execute(std::string_view rIdent); void UpdatePosition(const std::optional<Point>& xEvtPt = std::optional<Point>()); virtual void ShowAll( bool bShow ) override; @@ -48,6 +49,8 @@ public: void Fade( bool bFadeIn ); + virtual FactoryFunction GetUITestFactory() const override; + private: DECL_LINK( FadeHandler, Timer *, void ); /// Hide the button when the menu is toggled closed, e.g by clicking outside diff --git a/sw/source/uibase/inc/uiobject.hxx b/sw/source/uibase/inc/uiobject.hxx index 944384a595e7..b671365c3403 100644 --- a/sw/source/uibase/inc/uiobject.hxx +++ b/sw/source/uibase/inc/uiobject.hxx @@ -14,6 +14,7 @@ #include <vcl/uitest/uiobject.hxx> #include "edtwin.hxx" +#include "PageBreakWin.hxx" #include "navipi.hxx" #include <AnnotationWin.hxx> @@ -83,6 +84,27 @@ protected: }; +class PageBreakUIObject : public WindowUIObject +{ +public: + + PageBreakUIObject(const VclPtr<SwPageBreakWin>& xEditWin); + + virtual void execute(const OUString& rAction, + const StringMap& rParameters) override; + + static std::unique_ptr<UIObject> create(vcl::Window* pWindow); + +protected: + + virtual OUString get_name() const override; + +private: + + VclPtr<SwPageBreakWin> mxPageBreakUIObject; + +}; + #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/uitest/uiobject.cxx b/sw/source/uibase/uitest/uiobject.cxx index 44b995dcf588..fc62fa157cf1 100644 --- a/sw/source/uibase/uitest/uiobject.cxx +++ b/sw/source/uibase/uitest/uiobject.cxx @@ -255,6 +255,31 @@ OUString CommentUIObject::get_name() const return "CommentUIObject"; } +PageBreakUIObject::PageBreakUIObject(const VclPtr<SwPageBreakWin>& xPageBreakUIObject): + WindowUIObject(xPageBreakUIObject), + mxPageBreakUIObject(xPageBreakUIObject) +{ +} +void PageBreakUIObject::execute(const OUString& rAction, + const StringMap& rParameters) +{ + if (rAction == "DELETE" || rAction == "EDIT") + mxPageBreakUIObject->execute(rAction.toAsciiLowerCase().toUtf8()); + else + WindowUIObject::execute(rAction, rParameters); +} + +std::unique_ptr<UIObject> PageBreakUIObject::create(vcl::Window* pWindow) +{ + SwPageBreakWin* pPageBreakWin = dynamic_cast<SwPageBreakWin*>(pWindow); + assert(pPageBreakWin); + return std::unique_ptr<UIObject>(new PageBreakUIObject(pPageBreakWin)); +} + +OUString PageBreakUIObject::get_name() const +{ + return "PageBreakUIObject"; +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |