editeng/qa/unit/core-test.cxx | 92 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+)
New commits: commit f4a97dff08468027c1d9972815aad5d85d02ce79 Author: Szymon KÅos <szymon.k...@collabora.com> Date: Wed Jan 3 11:25:23 2018 +0100 tdf#114628 unit test for line spacing * two cases 60% and 150% line spacing Change-Id: I2ce66cd19f459b738243052b5c12da0bbb883ebe Reviewed-on: https://gerrit.libreoffice.org/47303 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Szymon KÅos <szymon.k...@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/47575 Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk> diff --git a/editeng/qa/unit/core-test.cxx b/editeng/qa/unit/core-test.cxx index 8becb860cc0b..c65b1c2f391e 100644 --- a/editeng/qa/unit/core-test.cxx +++ b/editeng/qa/unit/core-test.cxx @@ -21,6 +21,7 @@ #include <editeng/editeng.hxx> #include <editeng/eeitem.hxx> #include <editeng/editids.hrc> +#include <editeng/lspcitem.hxx> #include <editeng/svxacorr.hxx> #include <editeng/unofield.hxx> #include <editeng/wghtitem.hxx> @@ -30,6 +31,8 @@ #include <editeng/flditem.hxx> #include <editeng/udlnitem.hxx> #include <svl/srchitem.hxx> +#include <editeng/fontitem.hxx> +#include <editeng/fhgtitem.hxx> #include <com/sun/star/text/textfield/Type.hpp> @@ -48,6 +51,9 @@ public: virtual void setUp() override; virtual void tearDown() override; + /// Test text portions position when percentage line spacing is set + void testLineSpacing(); + void testConstruction(); /// Test UNO service class that implements text field items. @@ -92,6 +98,7 @@ public: DECL_STATIC_LINK( Test, CalcFieldValueHdl, EditFieldInfo*, void ); CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testLineSpacing); CPPUNIT_TEST(testConstruction); CPPUNIT_TEST(testUnoTextFields); CPPUNIT_TEST(testAutocorrect); @@ -130,6 +137,91 @@ void Test::tearDown() test::BootstrapFixture::tearDown(); } +void Test::testLineSpacing() +{ + // Create EditEngine's instance + EditEngine aEditEngine(mpItemPool); + + if(aEditEngine.GetRefDevice()->GetDPIY() != 96 + || aEditEngine.GetRefDevice()->GetDPIScaleFactor() != 1.0) + return; + + // 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 = "This is multi-line paragraph"; + + sal_Int32 aTextLen = aText.getLength(); + aEditEngine.SetText(aText); + + // Assert changes - text insertion + CPPUNIT_ASSERT_EQUAL(sal_uLong(aTextLen), rDoc.GetTextLen()); + CPPUNIT_ASSERT_EQUAL(aText, rDoc.GetParaAsString(sal_Int32(0))); + + // Get ItemSet for line spacing - 60% + std::unique_ptr<SfxItemSet> pSet(new SfxItemSet(aEditEngine.GetEmptyItemSet())); + SvxLineSpacingItem aLineSpacing(LINE_SPACE_DEFAULT_HEIGHT, EE_PARA_SBL); + aLineSpacing.SetPropLineSpace(60); + pSet->Put(aLineSpacing); + + // Set font + SvxFontItem aFont(EE_CHAR_FONTINFO); + aFont.SetFamilyName("Liberation Sans"); + pSet->Put(aFont); + SvxFontHeightItem aFontSize(240, 100, EE_CHAR_FONTHEIGHT); + pSet->Put(aFontSize); + + CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(3), pSet->Count()); + + // Select all paragraphs and set spacing + ESelection aSelection(0, 0, 0, aTextLen); + aEditEngine.QuickSetAttribs(*pSet, aSelection); + + // Force multiple lines + aEditEngine.SetPaperSize(Size(1000, 6000)); + CPPUNIT_ASSERT_EQUAL((sal_Int32)4, aEditEngine.GetLineCount(0)); + + // Assert changes + ParaPortion* pParaPortion = aEditEngine.GetParaPortions()[0]; + ContentNode* const pNode = pParaPortion->GetNode(); + const SvxLineSpacingItem& rLSItem = pNode->GetContentAttribs().GetItem(EE_PARA_SBL); + CPPUNIT_ASSERT_EQUAL(SvxInterLineSpaceRule::Prop, rLSItem.GetInterLineSpaceRule()); + CPPUNIT_ASSERT_EQUAL((sal_uInt16)60, rLSItem.GetPropLineSpace()); + + // Check the first line + ParagraphInfos aInfo = aEditEngine.GetParagraphInfos(0); + CPPUNIT_ASSERT_EQUAL((sal_uInt16)122, aInfo.nFirstLineMaxAscent); + CPPUNIT_ASSERT_EQUAL((sal_uInt16)153, (sal_uInt16)aEditEngine.GetLineHeight(0)); + + // Prepare second case - 150% + std::unique_ptr<SfxItemSet> pSet2(new SfxItemSet(aEditEngine.GetEmptyItemSet())); + SvxLineSpacingItem aLineSpacing2(LINE_SPACE_DEFAULT_HEIGHT, EE_PARA_SBL); + aLineSpacing2.SetPropLineSpace(150); + pSet2->Put(aLineSpacing2); + pSet2->Put(aFont); + pSet2->Put(aFontSize); + + CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(3), pSet2->Count()); + + // Select all paragraphs and set spacing + aEditEngine.QuickSetAttribs(*pSet2, aSelection); + + // Assert changes + const SvxLineSpacingItem& rLSItem2 = pNode->GetContentAttribs().GetItem(EE_PARA_SBL); + CPPUNIT_ASSERT_EQUAL(SvxInterLineSpaceRule::Prop, rLSItem2.GetInterLineSpaceRule()); + CPPUNIT_ASSERT_EQUAL((sal_uInt16)150, rLSItem2.GetPropLineSpace()); + + // Check the first line + ParagraphInfos aInfo2 = aEditEngine.GetParagraphInfos(0); + CPPUNIT_ASSERT_EQUAL((sal_uInt16)269, aInfo2.nFirstLineMaxAscent); + CPPUNIT_ASSERT_EQUAL((sal_uInt16)382, (sal_uInt16)aEditEngine.GetLineHeight(0)); +} + void Test::testConstruction() { EditEngine aEngine(mpItemPool);
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits