diff options
author | Khaled Hosny <khaled@libreoffice.org> | 2023-06-12 22:48:59 +0300 |
---|---|---|
committer | خالد حسني <khaled@libreoffice.org> | 2023-06-13 22:44:52 +0200 |
commit | 6b178c6e88ec5a765ad2b3ccd98182286222f550 (patch) | |
tree | 1c2c70a484b08c9bda17c445234cf6929d7990b2 /vcl/qa/cppunit | |
parent | 3d4c4a95c32ad2a96831c3db552b0c389c596aea (diff) |
tdf#153440: Add test
Change-Id: I0c036cd1d8022e6ff265aa67ab177c57eba0c4ac
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152934
Tested-by: Jenkins
Reviewed-by: خالد حسني <khaled@libreoffice.org>
Diffstat (limited to 'vcl/qa/cppunit')
-rw-r--r-- | vcl/qa/cppunit/complextext.cxx | 60 | ||||
-rw-r--r-- | vcl/qa/cppunit/data/tdf153440.ttf | bin | 0 -> 1804 bytes | |||
-rw-r--r-- | vcl/qa/cppunit/data/tdf153440.ttf.readme | 12 |
3 files changed, 71 insertions, 1 deletions
diff --git a/vcl/qa/cppunit/complextext.cxx b/vcl/qa/cppunit/complextext.cxx index 9473d5b7b696..631a24379a7f 100644 --- a/vcl/qa/cppunit/complextext.cxx +++ b/vcl/qa/cppunit/complextext.cxx @@ -44,8 +44,27 @@ static std::ostream& operator<<(std::ostream& rStream, const std::vector<sal_Int class VclComplexTextTest : public test::BootstrapFixture { + OUString maDataUrl = u"/vcl/qa/cppunit/data/"; + public: - VclComplexTextTest() : BootstrapFixture(true, false) {} + OUString getFullUrl(std::u16string_view sFileName) + { + return m_directories.getURLFromSrc(maDataUrl) + sFileName; + } + + bool addFont(OutputDevice* pOutDev, std::u16string_view sFileName, + std::u16string_view sFamilyName) + { + OutputDevice::ImplClearAllFontData(true); + bool bAdded = pOutDev->AddTempDevFont(getFullUrl(sFileName), OUString(sFamilyName)); + OutputDevice::ImplRefreshAllFontData(true); + return bAdded; + } + + VclComplexTextTest() + : BootstrapFixture(true, false) + { + } }; CPPUNIT_TEST_FIXTURE(VclComplexTextTest, testArabic) @@ -421,4 +440,43 @@ CPPUNIT_TEST_FIXTURE(VclComplexTextTest, testTdf152048_2) #endif } +CPPUNIT_TEST_FIXTURE(VclComplexTextTest, testTdf153440) +{ +#if HAVE_MORE_FONTS + vcl::Font aFont(u"Noto Naskh Arabic", u"Regular", Size(0, 72)); + + ScopedVclPtrInstance<VirtualDevice> pOutDev; + pOutDev->SetFont(aFont); + +#if !defined _WIN32 // TODO: Fails on jenkins but passes locally + // Add an emoji font so that we are sure a font will be found for the + // emoji. The font is subset and supports only 🌿. + bool bAdded = addFont(pOutDev, u"tdf153440.ttf", u"Noto Emoji"); + CPPUNIT_ASSERT_EQUAL(true, bAdded); +#endif + + for (auto& aString : { u"ع 🌿 ع", u"a 🌿 a" }) + { + OUString aText(aString); + bool bRTL = aText.startsWith(u"ع"); + + auto pLayout = pOutDev->ImplLayout(aText, 0, -1, Point(0, 0), 0, {}, {}); + + int nStart = 0; + DevicePoint aPos; + const GlyphItem* pGlyphItem; + while (pLayout->GetNextGlyph(&pGlyphItem, aPos, nStart)) + { + // Assert glyph ID is not 0, if it is 0 then font fallback didn’t + // happen. + CPPUNIT_ASSERT(pGlyphItem->glyphId()); + + // Assert that we are indeed doing RTL layout for RTL text since + // the bug does not happen for LTR text. + CPPUNIT_ASSERT_EQUAL(bRTL, pGlyphItem->IsRTLGlyph()); + } + } +#endif +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/qa/cppunit/data/tdf153440.ttf b/vcl/qa/cppunit/data/tdf153440.ttf Binary files differnew file mode 100644 index 000000000000..933e74733b0a --- /dev/null +++ b/vcl/qa/cppunit/data/tdf153440.ttf diff --git a/vcl/qa/cppunit/data/tdf153440.ttf.readme b/vcl/qa/cppunit/data/tdf153440.ttf.readme new file mode 100644 index 000000000000..6fffab0decab --- /dev/null +++ b/vcl/qa/cppunit/data/tdf153440.ttf.readme @@ -0,0 +1,12 @@ +This is a subset copy of Noto Emoji font licensed under Open Font License and +obtained from: + + https://fonts.google.com/noto/specimen/Noto+Emoji + +And subset using hb-subset to contain only the one glyph used in the test: + + hb-subset static/NotoEmoji-Regular.ttf "🌿 " -o tdf153440.ttf --drop-tables=GSUB,STAT,vhea,vmtx + +The space is added to the subset as it seems needed to get the font to work on +Windows. (The --drop-tables argument is not necessary be saves a few bytes of +stuff we don’t need.) |