diff options
author | David Faure <david.faure@kdab.com> | 2017-02-20 10:55:59 +0100 |
---|---|---|
committer | David Faure <david.faure@kdab.com> | 2017-02-23 18:11:55 +0000 |
commit | 90b48a70ffb64d97211150fa0849dc0fa0023b7d (patch) | |
tree | 1dc0532f52bf05799dba5d627a753777932f6cf2 /tests/auto | |
parent | 8e9582847506bf17755415fdddd92c242407851c (diff) |
QTextFormatCollection: replace copy ctor and op= with clear()
operator=, which was only used for clearing, wasn't clearing the hash.
This led to a mismatch between the vector and the hash (given that the hash
points into the vector).
Spotted by interrupting kmail in gdb, and it was in this code
iterating over a 2000 entries hash (the first vector entries not matching
the hash, this code keep appending new entries for the same formats).
This fixes QTBUG-8862 again, the initial fix having been accidentally
reverted in 467b15a.
Change-Id: Ia34b3d002a0199e1930431a4bbdb2ec981ed4ffc
Task-number: QTBUG-8862
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/gui/text/qtextformat/tst_qtextformat.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/auto/gui/text/qtextformat/tst_qtextformat.cpp b/tests/auto/gui/text/qtextformat/tst_qtextformat.cpp index 71ee980de1..b8afd6a447 100644 --- a/tests/auto/gui/text/qtextformat/tst_qtextformat.cpp +++ b/tests/auto/gui/text/qtextformat/tst_qtextformat.cpp @@ -60,6 +60,7 @@ private slots: void setFont(); void setFont_collection_data(); void setFont_collection(); + void clearCollection(); }; /*! \internal @@ -640,5 +641,32 @@ void tst_QTextFormat::setFont_collection() } } +void tst_QTextFormat::clearCollection() +{ + QTextFormatCollection collection; + QFont f; + f.setUnderline(true); + collection.setDefaultFont(f); + QTextCharFormat charFormat; + charFormat.setFontStyleHint(QFont::SansSerif); + int formatIndex = collection.indexForFormat(charFormat); + QCOMPARE(formatIndex, 0); + QTextCharFormat charFormat2; + charFormat2.setUnderlineStyle(QTextCharFormat::SingleUnderline); + int formatIndex2 = collection.indexForFormat(charFormat2); + QCOMPARE(formatIndex2, 1); + QCOMPARE(collection.formats.count(), 2); + QCOMPARE(collection.hashes.count(), 2); + QCOMPARE(collection.defaultFont(), f); + + collection.clear(); + QCOMPARE(collection.formats.count(), 0); + QCOMPARE(collection.hashes.count(), 0); + QCOMPARE(collection.indexForFormat(charFormat2), 0); + QCOMPARE(collection.formats.count(), 1); + QCOMPARE(collection.hashes.count(), 1); + QCOMPARE(collection.defaultFont(), f); // kept, QTextDocument::clear or setPlainText should not reset the font set by setDefaultFont +} + QTEST_MAIN(tst_QTextFormat) #include "tst_qtextformat.moc" |