diff options
Diffstat (limited to 'tests/auto/gui/text')
-rw-r--r-- | tests/auto/gui/text/qstatictext/tst_qstatictext.cpp | 55 | ||||
-rw-r--r-- | tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp | 57 |
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" |