diff options
author | mae <qt-info@nokia.com> | 2010-04-07 11:13:15 (GMT) |
---|---|---|
committer | mae <qt-info@nokia.com> | 2010-04-07 11:54:03 (GMT) |
commit | 054950602a6675d01a9815a567b69157ee8ceff6 (patch) | |
tree | 8208e5557ca6db761d8f6b44fd4210a155b0a59d /tests/auto | |
parent | 0dd9960cbc533e377c8cc38b9e81b14108fac9be (diff) | |
download | Qt-054950602a6675d01a9815a567b69157ee8ceff6.zip Qt-054950602a6675d01a9815a567b69157ee8ceff6.tar.gz Qt-054950602a6675d01a9815a567b69157ee8ceff6.tar.bz2 |
Fix QTextDocument::undo() cursor positioning
When doing block undo operations, QTextDocument used the change
position of the last undo command for positioning the cursor.
This is incorrect if the last commands are of type
QTextUndoCommand::Removed but split because of the text
fragments. The bug is highly noticable in creator when
inserting snippets and doing undo afterwards.
The change adds an auto test.
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/qtextcursor/tst_qtextcursor.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/auto/qtextcursor/tst_qtextcursor.cpp b/tests/auto/qtextcursor/tst_qtextcursor.cpp index f55b8db..d44ce72 100644 --- a/tests/auto/qtextcursor/tst_qtextcursor.cpp +++ b/tests/auto/qtextcursor/tst_qtextcursor.cpp @@ -150,6 +150,7 @@ private slots: void adjustCursorsOnInsert(); void cursorPositionWithBlockUndoAndRedo(); + void cursorPositionWithBlockUndoAndRedo2(); private: int blockCount(); @@ -1778,5 +1779,38 @@ void tst_QTextCursor::cursorPositionWithBlockUndoAndRedo() QCOMPARE(cursor.position(), cursorPositionAfter); } +void tst_QTextCursor::cursorPositionWithBlockUndoAndRedo2() +{ + cursor.insertText("AAAABBBB"); + int cursorPositionBefore = cursor.position(); + cursor.setPosition(0, QTextCursor::KeepAnchor); + cursor.beginEditBlock(); + cursor.removeSelectedText(); + cursor.insertText("AAAABBBBCCCCDDDD"); + cursor.endEditBlock(); + doc->undo(&cursor); + QVERIFY(doc->toPlainText() == "AAAABBBB"); + QCOMPARE(cursor.position(), cursorPositionBefore); + + cursor.insertText("CCCC"); + QVERIFY(doc->toPlainText() == "AAAABBBBCCCC"); + + cursorPositionBefore = cursor.position(); + cursor.setPosition(0, QTextCursor::KeepAnchor); + cursor.beginEditBlock(); + cursor.removeSelectedText(); + cursor.insertText("AAAABBBBCCCCDDDD"); + cursor.endEditBlock(); + + /* this undo now implicitely reinserts two segments, first "CCCCC", then + "AAAABBBB". The test ensures that the two are combined in order to + reconstruct the correct cursor position */ + doc->undo(&cursor); + + + QVERIFY(doc->toPlainText() == "AAAABBBBCCCC"); + QCOMPARE(cursor.position(), cursorPositionBefore); +} + QTEST_MAIN(tst_QTextCursor) #include "tst_qtextcursor.moc" |