void UndoManagerTest::testUndoRedoCount() { TestDocument doc; KateUndoManager *undoManager = doc.undoManager(); // no undo/redo items at the beginning QCOMPARE(undoManager->undoCount(), 0u); QCOMPARE(undoManager->redoCount(), 0u); doc.insertText(Cursor(0, 0), "a"); // create one insert-group QCOMPARE(undoManager->undoCount(), 1u); QCOMPARE(undoManager->redoCount(), 0u); doc.undo(); // move insert-group to redo items QCOMPARE(undoManager->undoCount(), 0u); QCOMPARE(undoManager->redoCount(), 1u); doc.redo(); // move insert-group back to undo items QCOMPARE(undoManager->undoCount(), 1u); QCOMPARE(undoManager->redoCount(), 0u); doc.insertText(Cursor(0, 1), "b"); // merge "b" into insert-group QCOMPARE(undoManager->undoCount(), 1u); QCOMPARE(undoManager->redoCount(), 0u); doc.removeText(Range(0, 1, 0, 2)); // create an additional remove-group QCOMPARE(undoManager->undoCount(), 2u); QCOMPARE(undoManager->redoCount(), 0u); doc.undo(); // move remove-group to redo items QCOMPARE(undoManager->undoCount(), 1u); QCOMPARE(undoManager->redoCount(), 1u); doc.insertText(Cursor(0, 1), "b"); // merge "b" into insert-group // and remove remove-group QCOMPARE(undoManager->undoCount(), 1u); QCOMPARE(undoManager->redoCount(), 0u); }
void UndoManagerTest::testSafePoint() { TestDocument doc; KateUndoManager *undoManager = doc.undoManager(); doc.insertText(Cursor(0, 0), "a"); // create one undo group QCOMPARE(undoManager->undoCount(), 1u); QCOMPARE(undoManager->redoCount(), 0u); undoManager->undoSafePoint(); doc.insertText(Cursor(0, 1), "b"); // create a second undo group (don't merge) QCOMPARE(undoManager->undoCount(), 2u); doc.undo(); // move second undo group to redo items QCOMPARE(undoManager->undoCount(), 1u); QCOMPARE(undoManager->redoCount(), 1u); doc.insertText(Cursor(0, 1), "b"); // create a second undo group again, (don't merge) QCOMPARE(undoManager->undoCount(), 2u); QCOMPARE(undoManager->redoCount(), 0u); doc.editStart(); doc.insertText(Cursor(0, 2), "c"); undoManager->undoSafePoint(); doc.insertText(Cursor(0, 3), "d"); doc.editEnd(); // merge both edits into second undo group QCOMPARE(undoManager->undoCount(), 2u); QCOMPARE(undoManager->redoCount(), 0u); doc.insertText(Cursor(0, 4), "e"); // create a third undo group (don't merge) QCOMPARE(undoManager->undoCount(), 3u); QCOMPARE(undoManager->redoCount(), 0u); }