vcl/qa/cppunit/text.cxx | 102 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+)
New commits: commit e535da3b6d72c0aca312dcf1ca38a3fcc3532a38 Author: Chris Sherlock <chris.sherloc...@gmail.com> AuthorDate: Sun Oct 2 19:11:11 2022 +1100 Commit: خالد حسني <kha...@aliftype.com> CommitDate: Sun Nov 20 16:25:25 2022 +0100 vcl: add unit tests for OutputDevice::GetTextRect() Change-Id: Ic36d42b0b38083c6a9ce3b6af4d80d5acf3e96e3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140906 Tested-by: Jenkins Reviewed-by: خالد حسني <kha...@aliftype.com> diff --git a/vcl/qa/cppunit/text.cxx b/vcl/qa/cppunit/text.cxx index a450c99ee3df..ee7ab8cd5859 100644 --- a/vcl/qa/cppunit/text.cxx +++ b/vcl/qa/cppunit/text.cxx @@ -66,6 +66,13 @@ public: void testGetStringWithEndEllpsis(); void testGetStringWithNewsEllpsis(); void testGetTextBreak(); + void testGetSingleLineTextRect(); + void testGetSingleLineTextRectWithEndEllipsis(); + void testGetRightBottomAlignedSingleLineTextRect(); + void testGetMultiLineTextRect(); + void testGetMultiLineTextRectWithEndEllipsis(); + void testGetRightBottomAlignedMultiLineTextRect(); + void testGetRotatedSingleLineTextRect(); CPPUNIT_TEST_SUITE(VclTextTest); CPPUNIT_TEST(testSimpleText); @@ -82,6 +89,13 @@ public: CPPUNIT_TEST(testGetStringWithEndEllpsis); CPPUNIT_TEST(testGetStringWithNewsEllpsis); CPPUNIT_TEST(testGetTextBreak); + CPPUNIT_TEST(testGetSingleLineTextRect); + CPPUNIT_TEST(testGetSingleLineTextRectWithEndEllipsis); + CPPUNIT_TEST(testGetRightBottomAlignedSingleLineTextRect); + CPPUNIT_TEST(testGetMultiLineTextRect); + CPPUNIT_TEST(testGetMultiLineTextRectWithEndEllipsis); + CPPUNIT_TEST(testGetRightBottomAlignedMultiLineTextRect); + CPPUNIT_TEST(testGetRotatedSingleLineTextRect); CPPUNIT_TEST_SUITE_END(); }; @@ -671,6 +685,94 @@ void VclTextTest::testGetTextBreak() device->GetTextBreak(sTestStr, nTextWidth, 13, nLen)); } +void VclTextTest::testGetSingleLineTextRect() +{ + ScopedVclPtr<VirtualDevice> device = VclPtr<VirtualDevice>::Create(DeviceFormat::DEFAULT); + device->SetOutputSizePixel(Size(1000, 1000)); + device->SetFont(vcl::Font("Liberation Sans", Size(0, 11))); + + CPPUNIT_ASSERT_EQUAL( + tools::Rectangle(Point(), Size(75, 12)), + device->GetTextRect(tools::Rectangle(Point(), Point(100, 100)), "This is test text")); +} + +void VclTextTest::testGetSingleLineTextRectWithEndEllipsis() +{ + ScopedVclPtr<VirtualDevice> device = VclPtr<VirtualDevice>::Create(DeviceFormat::DEFAULT); + device->SetOutputSizePixel(Size(1000, 1000)); + device->SetFont(vcl::Font("Liberation Sans", Size(0, 11))); + + CPPUNIT_ASSERT_EQUAL( + tools::Rectangle(Point(), Size(52, 12)), + device->GetTextRect(tools::Rectangle(Point(), Point(50, 50)), "This is test text", + DrawTextFlags::WordBreak | DrawTextFlags::EndEllipsis)); +} + +void VclTextTest::testGetRightBottomAlignedSingleLineTextRect() +{ + ScopedVclPtr<VirtualDevice> device = VclPtr<VirtualDevice>::Create(DeviceFormat::DEFAULT); + device->SetOutputSizePixel(Size(1000, 1000)); + device->SetFont(vcl::Font("Liberation Sans", Size(0, 11))); + + CPPUNIT_ASSERT_EQUAL(tools::Rectangle(Point(926, 989), Size(75, 12)), + device->GetTextRect(tools::Rectangle(Point(), Point(1000, 1000)), + "This is test text", + DrawTextFlags::Right | DrawTextFlags::Bottom)); +} + +void VclTextTest::testGetRotatedSingleLineTextRect() +{ + ScopedVclPtr<VirtualDevice> device = VclPtr<VirtualDevice>::Create(DeviceFormat::DEFAULT); + device->SetOutputSizePixel(Size(1000, 1000)); + device->SetFont(vcl::Font("Liberation Sans", Size(0, 11))); + + vcl::Font aFont(device->GetFont()); + aFont.SetOrientation(45_deg10); + device->SetFont(aFont); + + CPPUNIT_ASSERT_EQUAL( + tools::Rectangle(Point(0, -3), Size(75, 18)), + device->GetTextRect(tools::Rectangle(Point(), Point(100, 100)), "This is test text")); +} + +void VclTextTest::testGetMultiLineTextRect() +{ + ScopedVclPtr<VirtualDevice> device = VclPtr<VirtualDevice>::Create(DeviceFormat::DEFAULT); + device->SetOutputSizePixel(Size(1000, 1000)); + device->SetFont(vcl::Font("Liberation Sans", Size(0, 11))); + + CPPUNIT_ASSERT_EQUAL(tools::Rectangle(Point(), Size(75, 12)), + device->GetTextRect(tools::Rectangle(Point(), Point(100, 100)), + "This is test text", + DrawTextFlags::WordBreak | DrawTextFlags::MultiLine)); +} + +void VclTextTest::testGetMultiLineTextRectWithEndEllipsis() +{ + ScopedVclPtr<VirtualDevice> device = VclPtr<VirtualDevice>::Create(DeviceFormat::DEFAULT); + device->SetOutputSizePixel(Size(1000, 1000)); + device->SetFont(vcl::Font("Liberation Sans", Size(0, 11))); + + CPPUNIT_ASSERT_EQUAL(tools::Rectangle(Point(), Size(52, 48)), + device->GetTextRect(tools::Rectangle(Point(), Point(50, 50)), + "This is test text xyzabc123abcdefghijk", + DrawTextFlags::WordBreak | DrawTextFlags::EndEllipsis + | DrawTextFlags::MultiLine)); +} + +void VclTextTest::testGetRightBottomAlignedMultiLineTextRect() +{ + ScopedVclPtr<VirtualDevice> device = VclPtr<VirtualDevice>::Create(DeviceFormat::DEFAULT); + device->SetOutputSizePixel(Size(1000, 1000)); + device->SetFont(vcl::Font("Liberation Sans", Size(0, 11))); + + CPPUNIT_ASSERT_EQUAL(tools::Rectangle(Point(926, 989), Size(75, 12)), + device->GetTextRect(tools::Rectangle(Point(), Point(1000, 1000)), + "This is test text", + DrawTextFlags::Right | DrawTextFlags::Bottom + | DrawTextFlags::MultiLine)); +} + CPPUNIT_TEST_SUITE_REGISTRATION(VclTextTest); CPPUNIT_PLUGIN_IMPLEMENT();