diff options
author | Axel Rasmussen <axel.rasmussen1@gmail.com> | 2014-04-15 22:53:36 -0600 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-05-21 17:30:11 +0200 |
commit | 2983cb9531d47e5826540ca79e3066a8ed0db30c (patch) | |
tree | 39121af5d6e22e256a593fc94ce89c6ffeb2a78c /tests | |
parent | ff31090d07cbbb6f67d259438939e810a0baf67f (diff) |
Fix broken QPlainTextDocumentLayout after removing chars
This fixes an issue where, if characters were removed from several
blocks in a single edit, the document layout would end up being
corrupted since the document layout manager wouldn't re-layout the
proper number of text blocks.
Task-number: QTBUG-30051
Change-Id: Idf3a6f567120e6a5dbebf1f65f685d374219328a
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp index 61eb390fd3..c47f7b1ff6 100644 --- a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp +++ b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp @@ -154,6 +154,7 @@ private slots: void findBackwardWithRegExp(); void findWithRegExpReturnsFalseIfNoMoreResults(); #endif + void layoutAfterMultiLineRemove(); private: void createSelection(); @@ -1567,5 +1568,49 @@ void tst_QPlainTextEdit::findWithRegExpReturnsFalseIfNoMoreResults() } #endif +void tst_QPlainTextEdit::layoutAfterMultiLineRemove() +{ + ed->setVisible(true); // The widget must be visible to reproduce this bug. + + QString contents; + for (int i = 0; i < 5; ++i) + contents.append("\ttest\n"); + + ed->setPlainText(contents); + + /* + * Remove the tab from the beginning of lines 2-4, in an edit block. The + * edit block is required for the bug to be reproduced. + */ + + QTextCursor curs = ed->textCursor(); + curs.movePosition(QTextCursor::Start); + curs.movePosition(QTextCursor::NextBlock); + + curs.beginEditBlock(); + for (int i = 0; i < 3; ++i) { + curs.deleteChar(); + curs.movePosition(QTextCursor::NextBlock); + } + curs.endEditBlock(); + + /* + * Now, we're going to perform the following actions: + * + * - Move to the beginning of the document. + * - Move down three times - this should put us at the front of block 3. + * - Move to the end of the line. + * + * At this point, if the document layout is behaving correctly, we should + * still be positioned on block 3. Verify that this is the case. + */ + + curs.movePosition(QTextCursor::Start); + curs.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, 3); + curs.movePosition(QTextCursor::EndOfLine); + + QCOMPARE(curs.blockNumber(), 3); +} + QTEST_MAIN(tst_QPlainTextEdit) #include "tst_qplaintextedit.moc" |