diff options
author | Jan-Marek Glogowski <jan-marek.glogowski@extern.cib.de> | 2020-01-31 16:53:47 +0000 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2020-02-04 22:18:41 +0100 |
commit | 82480ecbe0dc3c99777dcc4e32b63a968a6c2ae7 (patch) | |
tree | fa3803e000832734bfc67ba87d8b30ac9ea25e91 | |
parent | 17f13bbe9794bb2e2351fe58c3b8c53947fa6308 (diff) |
Unit test for stable at-page anchored fly position
This is the unit test for commit
5cee586a97a11c23dd252accc42099bd5e9b4187 ("sw: fix moving of
at-page anchored flys to different page"). Originally the error
was just triggered by toggling "View -> Field Names". Luckily
it's also triggered by adding some text to page four, so no need
for some UI test.
Change-Id: I3a63b50dd898788607c3d24a848d8f43ae966377
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87776
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@cib.de>
(cherry picked from commit 5fed8bb5f6f65963fed27f96de3be14dff830d38)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87847
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
(cherry picked from commit 4db184ea279a2974679b05eaa8ca52ec087f68af)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87983
Tested-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
-rw-r--r-- | sw/CppunitTest_sw_layoutwriter.mk | 1 | ||||
-rw-r--r-- | sw/inc/swrect.hxx | 3 | ||||
-rw-r--r-- | sw/qa/extras/layout/data/stable-at-page-anchored-fly-position.odt | bin | 0 -> 11244 bytes | |||
-rwxr-xr-x | sw/qa/extras/layout/layout.cxx | 49 | ||||
-rw-r--r-- | sw/source/core/inc/sortedobjs.hxx | 3 |
5 files changed, 54 insertions, 2 deletions
diff --git a/sw/CppunitTest_sw_layoutwriter.mk b/sw/CppunitTest_sw_layoutwriter.mk index 675299180e44..6ec6195eea72 100644 --- a/sw/CppunitTest_sw_layoutwriter.mk +++ b/sw/CppunitTest_sw_layoutwriter.mk @@ -44,6 +44,7 @@ $(eval $(call gb_CppunitTest_use_externals,sw_layoutwriter,\ $(eval $(call gb_CppunitTest_set_include,sw_layoutwriter,\ -I$(SRCDIR)/sw/inc \ -I$(SRCDIR)/sw/source/core/inc \ + -I$(SRCDIR)/sw/source/uibase/inc \ -I$(SRCDIR)/sw/qa/extras/inc \ $$(INCLUDE) \ )) diff --git a/sw/inc/swrect.hxx b/sw/inc/swrect.hxx index c4b1889ae4ae..a2beda693112 100644 --- a/sw/inc/swrect.hxx +++ b/sw/inc/swrect.hxx @@ -23,6 +23,7 @@ #include <sal/log.hxx> #include <tools/gen.hxx> +#include <swdllapi.h> class SvStream; @@ -30,7 +31,7 @@ class SvStream; /// This is half-open so m_Point.X() + m_Size.getWidth() is *not* included. /// Note the tools Rectangle is (usually? sometimes?) closed so there's a /// SVRect() to subtract 1 for the conversion. -class SAL_WARN_UNUSED SwRect +class SW_DLLPUBLIC SAL_WARN_UNUSED SwRect { Point m_Point; Size m_Size; diff --git a/sw/qa/extras/layout/data/stable-at-page-anchored-fly-position.odt b/sw/qa/extras/layout/data/stable-at-page-anchored-fly-position.odt Binary files differnew file mode 100644 index 000000000000..e5a3779c54c5 --- /dev/null +++ b/sw/qa/extras/layout/data/stable-at-page-anchored-fly-position.odt diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx index 7d6eeccd18b8..bdbcc12c9487 100755 --- a/sw/qa/extras/layout/layout.cxx +++ b/sw/qa/extras/layout/layout.cxx @@ -10,6 +10,10 @@ #include <swmodeltestbase.hxx> #include <comphelper/propertysequence.hxx> #include <test/mtfxmldump.hxx> +#include <wrtsh.hxx> +#include <pagefrm.hxx> +#include <sortedobjs.hxx> +#include <anchoredobject.hxx> static char const DATA_DIRECTORY[] = "/sw/qa/extras/layout/data/"; @@ -32,6 +36,7 @@ public: void testTdf117188(); void testTdf119875(); void testTdf116989(); + void testStableAtPageAnchoredFlyPosition(); CPPUNIT_TEST_SUITE(SwLayoutWriter); CPPUNIT_TEST(testTdf116830); @@ -49,6 +54,7 @@ public: CPPUNIT_TEST(testTdf117188); CPPUNIT_TEST(testTdf119875); CPPUNIT_TEST(testTdf116989); + CPPUNIT_TEST(testStableAtPageAnchoredFlyPosition); CPPUNIT_TEST_SUITE_END(); private: @@ -304,6 +310,49 @@ void SwLayoutWriter::testTdf116989() } } +static SwRect lcl_getVisibleFlyObjRect(SwWrtShell* pWrtShell) +{ + SwRootFrame* pRoot = pWrtShell->GetLayout(); + SwPageFrame* pPage = static_cast<SwPageFrame*>(pRoot->GetLower()); + pPage = static_cast<SwPageFrame*>(pPage->GetNext()); + pPage = static_cast<SwPageFrame*>(pPage->GetNext()); + SwSortedObjs* pDrawObjs = pPage->GetDrawObjs(); + CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pDrawObjs->size()); + SwAnchoredObject* pDrawObj = (*pDrawObjs)[0]; + CPPUNIT_ASSERT_EQUAL(OUString("Rahmen8"), pDrawObj->GetFrameFormat().GetName()); + pPage = static_cast<SwPageFrame*>(pPage->GetNext()); + pDrawObjs = pPage->GetDrawObjs(); + CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pDrawObjs->size()); + pDrawObj = (*pDrawObjs)[0]; + CPPUNIT_ASSERT_EQUAL(OUString("Rahmen123"), pDrawObj->GetFrameFormat().GetName()); + SwRect aFlyRect = pDrawObj->GetObjRect(); + CPPUNIT_ASSERT(pPage->getFrameArea().IsInside(aFlyRect)); + return aFlyRect; +} + +void SwLayoutWriter::testStableAtPageAnchoredFlyPosition() +{ + // this doc has two page-anchored frames: one tiny on page 3 and one large on page 4. + // it also has a style:master-page named "StandardEntwurf", which contains some fields. + // if you add a break to page 2, or append some text to page 4 (or just toggle display field names), + // the page anchored frame on page 4 vanishes, as it is incorrectly moved out of the page bounds. + SwDoc* pDoc = createDoc("stable-at-page-anchored-fly-position.odt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + + // look up the layout position of the page-bound frame on page four + SwRect aOrigRect = lcl_getVisibleFlyObjRect(pWrtShell); + + // append some text to the document to trigger bug / relayout + pWrtShell->SttEndDoc(false); + pWrtShell->Insert("foo"); + + // get the current position of the frame on page four + SwRect aRelayoutRect = lcl_getVisibleFlyObjRect(pWrtShell); + + // the anchored frame should not have moved + CPPUNIT_ASSERT_EQUAL(aOrigRect, aRelayoutRect); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SwLayoutWriter); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/core/inc/sortedobjs.hxx b/sw/source/core/inc/sortedobjs.hxx index 0fd6a9cb9d71..5e5dcc45712f 100644 --- a/sw/source/core/inc/sortedobjs.hxx +++ b/sw/source/core/inc/sortedobjs.hxx @@ -21,6 +21,7 @@ #include <sal/types.h> #include <vector> +#include <swdllapi.h> class SwAnchoredObject; @@ -45,7 +46,7 @@ class SwAnchoredObject; If one of the sort criteria attributes of an anchored object changes, the sorting has to be updated - use method <Update(..)> */ -class SwSortedObjs +class SW_DLLPUBLIC SwSortedObjs { private: std::vector< SwAnchoredObject* > maSortedObjLst; |