diff options
author | Tamás Zolnai <tamas.zolnai@collabora.com> | 2018-02-17 06:35:29 +0100 |
---|---|---|
committer | Tamás Zolnai <tamas.zolnai@collabora.com> | 2018-02-17 07:50:00 +0100 |
commit | 1da3a3cb74a415a76fa547ef0c8f61780e260e7f (patch) | |
tree | 0367d452050d136d6612ba708038fb9d4584987b /editeng/qa | |
parent | 71545d500e4b88e960a73d499328504ce99397a8 (diff) |
tdf#115639: Align right/center with trailing spaces the same as MS PowerPoint
* Add HoriAlignIgnoreTrailingWhitespace compatibility option.
** For MSO file formats it is set to true
** For ODP format it's set to false by default
** The flag is saved to ODP format as user data if the document
comes from an MSO format.
Change-Id: Ie22233d33a25e605de46120bfc2195038dffd63c
Reviewed-on: https://gerrit.libreoffice.org/49889
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Tamás Zolnai <tamas.zolnai@collabora.com>
Diffstat (limited to 'editeng/qa')
-rw-r--r-- | editeng/qa/unit/core-test.cxx | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/editeng/qa/unit/core-test.cxx b/editeng/qa/unit/core-test.cxx index 2e122cc59c1d..195fae1bcb4a 100644 --- a/editeng/qa/unit/core-test.cxx +++ b/editeng/qa/unit/core-test.cxx @@ -33,6 +33,7 @@ #include <svl/srchitem.hxx> #include <editeng/fontitem.hxx> #include <editeng/fhgtitem.hxx> +#include <editeng/adjustitem.hxx> #include <com/sun/star/text/textfield/Type.hpp> @@ -97,6 +98,9 @@ public: void testTransliterate(); + /// Test HoriAlignIgnoreTrailingWhitespace compatibility flag + void testHoriAlignIgnoreTrailingWhitespace(); + DECL_STATIC_LINK( Test, CalcFieldValueHdl, EditFieldInfo*, void ); CPPUNIT_TEST_SUITE(Test); @@ -117,6 +121,7 @@ public: CPPUNIT_TEST(testSectionAttributes); CPPUNIT_TEST(testLargeParaCopyPaste); CPPUNIT_TEST(testTransliterate); + CPPUNIT_TEST(testHoriAlignIgnoreTrailingWhitespace); CPPUNIT_TEST_SUITE_END(); private: @@ -1848,6 +1853,112 @@ void Test::testTransliterate() CPPUNIT_ASSERT_EQUAL(aExpected, aEditEngine.GetText()); } +void Test::testHoriAlignIgnoreTrailingWhitespace() +{ + // Create EditEngine's instance + EditEngine aEditEngine(mpItemPool); + + // Get EditDoc for current EditEngine's instance + EditDoc &rDoc = aEditEngine.GetEditDoc(); + + // Initially no text should be there + CPPUNIT_ASSERT_EQUAL(sal_uLong(0), rDoc.GetTextLen()); + CPPUNIT_ASSERT_EQUAL(OUString(), rDoc.GetParaAsString(sal_Int32(0))); + + // Set initial text + OUString aText = "Some text "; + sal_Int32 aTextLen = aText.getLength(); + aEditEngine.SetText(aText); + + // Assert changes - text insertion + CPPUNIT_ASSERT_EQUAL(static_cast<sal_uLong>(aTextLen), rDoc.GetTextLen()); + CPPUNIT_ASSERT_EQUAL(aText, rDoc.GetParaAsString(static_cast<sal_Int32>(0))); + + // First test case: center alignment with compatibility option enabled + { + aEditEngine.SetHoriAlignIgnoreTrailingWhitespace(true); + std::unique_ptr<SfxItemSet> pSet(new SfxItemSet(aEditEngine.GetEmptyItemSet())); + pSet->Put(SvxAdjustItem( SvxAdjust::Center, EE_PARA_JUST )); + CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(1), pSet->Count()); + + // Select all paragraphs and apply changes + ESelection aSelection(0, 0, 0, aTextLen); + aEditEngine.QuickSetAttribs(*pSet, aSelection); + + // Use a one line paragraph + aEditEngine.SetPaperSize(Size(10000, 6000)); + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), aEditEngine.GetLineCount(0)); + + // Check horizontal position + ParaPortion* pParaPortion = aEditEngine.GetParaPortions()[0]; + EditLine* pLine = &pParaPortion->GetLines()[0]; + CPPUNIT_ASSERT_DOUBLES_EQUAL(static_cast<long>(4527), pLine->GetStartPosX(), 10); + } + + // Second test case: center alignment with compatibility option disabled + { + aEditEngine.SetHoriAlignIgnoreTrailingWhitespace(false); + std::unique_ptr<SfxItemSet> pSet(new SfxItemSet(aEditEngine.GetEmptyItemSet())); + pSet->Put(SvxAdjustItem( SvxAdjust::Center, EE_PARA_JUST )); + CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(1), pSet->Count()); + + // Select all paragraphs and apply changes + ESelection aSelection(0, 0, 0, aTextLen); + aEditEngine.QuickSetAttribs(*pSet, aSelection); + + // Use a one line paragraph + aEditEngine.SetPaperSize(Size(10000, 6000)); + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), aEditEngine.GetLineCount(0)); + + // Check horizontal position + ParaPortion* pParaPortion = aEditEngine.GetParaPortions()[0]; + EditLine* pLine = &pParaPortion->GetLines()[0]; + CPPUNIT_ASSERT_DOUBLES_EQUAL(static_cast<long>(4407), pLine->GetStartPosX(), 10); + } + + // Third test case: right alignment with compatibility option enabled + { + aEditEngine.SetHoriAlignIgnoreTrailingWhitespace(true); + std::unique_ptr<SfxItemSet> pSet(new SfxItemSet(aEditEngine.GetEmptyItemSet())); + pSet->Put(SvxAdjustItem( SvxAdjust::Right, EE_PARA_JUST )); + CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(1), pSet->Count()); + + // Select all paragraphs and apply changes + ESelection aSelection(0, 0, 0, aTextLen); + aEditEngine.QuickSetAttribs(*pSet, aSelection); + + // Use a one line paragraph + aEditEngine.SetPaperSize(Size(10000, 6000)); + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), aEditEngine.GetLineCount(0)); + + // Check horizontal position + ParaPortion* pParaPortion = aEditEngine.GetParaPortions()[0]; + EditLine* pLine = &pParaPortion->GetLines()[0]; + CPPUNIT_ASSERT_DOUBLES_EQUAL(static_cast<long>(9054), pLine->GetStartPosX(), 10); + } + + // Fourth test case: right alignment with compatibility option disabled + { + aEditEngine.SetHoriAlignIgnoreTrailingWhitespace(false); + std::unique_ptr<SfxItemSet> pSet(new SfxItemSet(aEditEngine.GetEmptyItemSet())); + pSet->Put(SvxAdjustItem( SvxAdjust::Right, EE_PARA_JUST )); + CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(1), pSet->Count()); + + // Select all paragraphs and apply changes + ESelection aSelection(0, 0, 0, aTextLen); + aEditEngine.QuickSetAttribs(*pSet, aSelection); + + // Use a one line paragraph + aEditEngine.SetPaperSize(Size(10000, 6000)); + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), aEditEngine.GetLineCount(0)); + + // Check horizontal position + ParaPortion* pParaPortion = aEditEngine.GetParaPortions()[0]; + EditLine* pLine = &pParaPortion->GetLines()[0]; + CPPUNIT_ASSERT_DOUBLES_EQUAL(static_cast<long>(8815), pLine->GetStartPosX(), 10); + } +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); } |