void UndoManagerTest::testSelectionUndo() { TestDocument doc; KateView *view = static_cast<KateView*>(doc.createView(0)); doc.setText("aaaa bbbb cccc\n" "dddd eeee ffff"); view->setCursorPosition(KTextEditor::Cursor(1, 9)); KTextEditor::Range selectionRange(KTextEditor::Cursor(0, 5), KTextEditor::Cursor(1, 9)); view->setSelection(selectionRange); doc.typeChars(view, "eeee"); // cursor position: "aaaa eeee| ffff", no selection anymore QCOMPARE(view->cursorPosition(), KTextEditor::Cursor(0, 9)); QCOMPARE(view->selection(), false); // undo to remove "eeee" and add selection and text again doc.undo(); QCOMPARE(view->cursorPosition(), KTextEditor::Cursor(1, 9)); QCOMPARE(view->selection(), true); QCOMPARE(view->selectionRange(), selectionRange); // redo to insert "eeee" again and remove selection // cursor position: "aaaa eeee| ffff", no selection anymore doc.redo(); QCOMPARE(view->cursorPosition(), KTextEditor::Cursor(0, 9)); QCOMPARE(view->selection(), false); delete view; }
// This test makes sure that, // - if you have selected text // - that spans a folded range, // - and the cursor is at the end of the text selection, // - and you type a char, e.g. 'x', // then the resulting text is correct, and changing region // visibility does not mess around with the text cursor. // // See https://bugs.kde.org/show_bug.cgi?id=295632 void KateFoldingTest::testBug295632() { KateDocument doc(false, false, false); QString text = "oooossssssss\n" "{\n" "\n" "}\n" "ssssss----------"; doc.setText(text); // view must be visible... KateView* view = static_cast<KateView*>(doc.createView(0)); view->show(); view->resize(400, 300); qint64 foldId = view->textFolding().newFoldingRange (KTextEditor::Range(1, 0, 3, 1)); view->textFolding().foldRange(foldId); QVERIFY(view->textFolding().isLineVisible(0)); QVERIFY(view->textFolding().isLineVisible(1)); QVERIFY(!view->textFolding().isLineVisible(2)); QVERIFY(!view->textFolding().isLineVisible(3)); QVERIFY(view->textFolding().isLineVisible(4)); view->setSelection(Range(Cursor(0,4), Cursor(4, 6))); view->setCursorPosition(Cursor(4, 6)); QTest::qWait(100); doc.typeChars(view, "x"); QTest::qWait(100); QString line = doc.line(0); QCOMPARE(line, QString("oooox----------")); }
// // when text is folded, and you set the text selection from top to bottom and // type a character, the resulting text is borked. // // See https://bugs.kde.org/show_bug.cgi?id=295632 // void KateFoldedSelectionTest::foldedSelectionTest() { KateDocument doc(false, false, false); QString text = "oooossssssss\n" "{\n" "\n" "}\n" "ssssss----------"; doc.setText(text); doc.setHighlightingMode("C++"); doc.buffer().ensureHighlighted (doc.lines()); // view must be visible... KateView* view = static_cast<KateView*>(doc.createView(0)); view->show(); view->resize(400, 300); QTest::qWait(500); doc.foldingTree()->collapseOne(1, 1); QTest::qWait(500); view->setSelection(Range(Cursor(0,4), Cursor(4, 6))); view->setCursorPosition(Cursor(4, 6)); QTest::qWait(500); doc.typeChars(view, "x"); QTest::qWait(500); QString line = doc.line(0); QCOMPARE(line, QString("oooox----------")); }