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;
}
Exemple #2
0
// 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----------"));
}