summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui/text
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/gui/text')
-rw-r--r--tests/auto/gui/text/qstatictext/tst_qstatictext.cpp55
-rw-r--r--tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp57
2 files changed, 112 insertions, 0 deletions
diff --git a/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp b/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp
index ec30cc8b67..b3d1b75a42 100644
--- a/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp
+++ b/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp
@@ -96,6 +96,8 @@ private slots:
void textDocumentColor();
#endif
+ void multiLine();
+
private:
bool supportsTransformations() const;
@@ -854,5 +856,58 @@ void tst_QStaticText::textDocumentColor()
}
#endif
+class TestPaintEngine: public QPaintEngine
+{
+public:
+ void drawTextItem(const QPointF &p, const QTextItem &textItem) Q_DECL_OVERRIDE
+ {
+ differentVerticalPositions.insert(qRound(p.y()));
+ }
+
+ void updateState(const QPaintEngineState &) Q_DECL_OVERRIDE {}
+
+ void drawPolygon(const QPointF *, int , PolygonDrawMode ) Q_DECL_OVERRIDE {}
+
+ bool begin(QPaintDevice *) Q_DECL_OVERRIDE { return true; }
+ bool end() Q_DECL_OVERRIDE { return true; }
+ void drawPixmap(const QRectF &, const QPixmap &, const QRectF &) Q_DECL_OVERRIDE {}
+ Type type() const Q_DECL_OVERRIDE
+ {
+ return User;
+ }
+
+ QSet<int> differentVerticalPositions;
+};
+
+class TestPixmap: public QPixmap
+{
+public:
+ TestPixmap(int w, int h) : QPixmap(w, h), testPaintEngine(new TestPaintEngine) {}
+ ~TestPixmap() { delete testPaintEngine; }
+
+ QPaintEngine *paintEngine() const
+ {
+ return testPaintEngine;
+ }
+
+ TestPaintEngine *testPaintEngine;
+};
+
+void tst_QStaticText::multiLine()
+{
+ TestPixmap pixmap(100, 100);
+
+ TestPaintEngine *paintEngine = pixmap.testPaintEngine;
+
+ {
+ QPainter p(&pixmap);
+ QStaticText text;
+ text.setText(QLatin1String("line 1") + QChar(QChar::LineSeparator) + QLatin1String("line 2"));
+ p.drawStaticText(0, 0, text);
+ }
+
+ QCOMPARE(paintEngine->differentVerticalPositions.size(), 2);
+}
+
QTEST_MAIN(tst_QStaticText)
#include "tst_qstatictext.moc"
diff --git a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
index 4d5af44ff1..0d1d0f1ae1 100644
--- a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
+++ b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
@@ -135,6 +135,7 @@ private slots:
void cursorInNonStopChars();
void nbsp();
void noModificationOfInputString();
+ void superscriptCrash_qtbug53911();
private:
QFont testFont;
@@ -2197,5 +2198,61 @@ void tst_QTextLayout::noModificationOfInputString()
}
}
+void tst_QTextLayout::superscriptCrash_qtbug53911()
+{
+ static int fontSizes = 64;
+ static QString layoutText = "THIS IS SOME EXAMPLE TEXT THIS IS SOME EXAMPLE TEXT";
+
+ QList<QTextLayout*> textLayouts;
+ for (int i = 0; i < fontSizes; ++i) {
+ for (int j = 0; j < 4; ++j) {
+ QTextLayout* newTextLayout = new QTextLayout();
+ newTextLayout->setText(layoutText);
+ QList<QTextLayout::FormatRange> formatRanges;
+ QTextLayout::FormatRange formatRange;
+
+ formatRange.format.setFont(QFont());
+ formatRange.format.setFontPointSize(i + 5);
+
+ switch (j) {
+ case 0:
+ formatRange.format.setFontWeight(QFont::Normal);
+ formatRange.format.setFontItalic(false);
+ break;
+ case 1:
+ formatRange.format.setFontWeight(QFont::Bold);
+ formatRange.format.setFontItalic(false);
+ break;
+ case 2:
+ formatRange.format.setFontWeight(QFont::Bold);
+ formatRange.format.setFontItalic(true);
+ break;
+ case 3:
+ formatRange.format.setFontWeight(QFont::Normal);
+ formatRange.format.setFontItalic(true);
+ break;
+ }
+
+ formatRange.format.setVerticalAlignment( QTextCharFormat::AlignSuperScript);
+
+ formatRange.start = 0;
+ formatRange.length = layoutText.size();
+ formatRanges << formatRange;
+ newTextLayout->setAdditionalFormats(formatRanges);
+
+ textLayouts.push_front(newTextLayout);
+ }
+ }
+
+ // This loop would crash before fix for QTBUG-53911
+ foreach (QTextLayout *textLayout, textLayouts) {
+ textLayout->beginLayout();
+ while (textLayout->createLine().isValid());
+ textLayout->endLayout();
+ }
+
+ qDeleteAll(textLayouts);
+}
+
QTEST_MAIN(tst_QTextLayout)
#include "tst_qtextlayout.moc"