diff options
Diffstat (limited to 'tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp')
-rw-r--r-- | tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp index eafbebd..83f8cd0 100644 --- a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp +++ b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp @@ -113,6 +113,7 @@ private slots: void mirroredChars(); void thaiIsolatedSaraAm(); + void thaiWithZWJ(); }; tst_QTextScriptEngine::tst_QTextScriptEngine() @@ -1264,5 +1265,46 @@ void tst_QTextScriptEngine::thaiIsolatedSaraAm() QSKIP("Cannot find Waree.", SkipAll); } +void tst_QTextScriptEngine::thaiWithZWJ() +{ + QString s(QString::fromUtf8("รรร“ร…ร”ร\xA0ร本ร") + QChar(0x0363)/*superscript 'a', for testing Inherited class*/); + QTextLayout layout(s); + layout.beginLayout(); + layout.createLine(); + layout.endLayout(); + + QTextEngine *e = layout.engine(); + e->width(0, s.length()); //force itemize and shape + + // A thai implementation could either remove the ZWJ and ZWNJ characters, or hide them. + // The current implementation hides them, so we test for that. + // But make sure that we don't hide anything else + QCOMPARE(e->layoutData->items.size(), 11); + QCOMPARE(e->layoutData->items[0].num_glyphs, ushort(5)); // Thai: The ZWJ and ZWNJ characters are inherited, so should be part of the thai script + QCOMPARE(e->layoutData->items[1].num_glyphs, ushort(1)); // Common: The smart quotes cannot be handled by thai, so should be a seperate item + QCOMPARE(e->layoutData->items[2].num_glyphs, ushort(1)); // Thai: Thai character + QCOMPARE(e->layoutData->items[3].num_glyphs, ushort(1)); // Common: Ellipsis + QCOMPARE(e->layoutData->items[4].num_glyphs, ushort(1)); // Thai: Thai character + QCOMPARE(e->layoutData->items[5].num_glyphs, ushort(1)); // Common: Smart quote + QCOMPARE(e->layoutData->items[6].num_glyphs, ushort(1)); // Thai: Thai character + QCOMPARE(e->layoutData->items[7].num_glyphs, ushort(1)); // Common: \xA0 = non-breaking space. Could be useful to have in thai, but not currently implemented + QCOMPARE(e->layoutData->items[8].num_glyphs, ushort(1)); // Thai: Thai character + QCOMPARE(e->layoutData->items[9].num_glyphs, ushort(1)); // Japanese: Kanji for tree + QCOMPARE(e->layoutData->items[10].num_glyphs, ushort(2)); // Thai: Thai character followed by superscript "a" which is of inherited type + + //A quick sanity check - check all the characters are individual clusters + unsigned short *logClusters = e->layoutData->logClustersPtr; + for (int i = 0; i < 5; i++) + QCOMPARE(logClusters[i], ushort(i)); + for (int i = 0; i < 10; i++) + QCOMPARE(logClusters[i+5], ushort(0)); + QCOMPARE(logClusters[15], ushort(1)); + + // The only characters that we should be hiding are the ZWJ and ZWNJ characters in position 1 + // and 3. + for (int i = 0; i < 16; i++) + QCOMPARE((bool)e->layoutData->glyphLayout.attributes[i].dontPrint, (i == 1 || i == 3)); +} + QTEST_MAIN(tst_QTextScriptEngine) #include "tst_qtextscriptengine.moc" |