tests/auto/qtextcursor/tst_qtextcursor.cpp
changeset 30 5dc02b23752f
parent 18 2f34d5167611
child 33 3e2da88830cd
--- a/tests/auto/qtextcursor/tst_qtextcursor.cpp	Wed Jun 23 19:07:03 2010 +0300
+++ b/tests/auto/qtextcursor/tst_qtextcursor.cpp	Tue Jul 06 15:10:48 2010 +0300
@@ -150,6 +150,7 @@
     void adjustCursorsOnInsert();
 
     void cursorPositionWithBlockUndoAndRedo();
+    void cursorPositionWithBlockUndoAndRedo2();
 
 private:
     int blockCount();
@@ -1778,5 +1779,38 @@
     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"