// 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----------")); }
void BugTest::tryCrash() { KateDocument doc(false, false, false); QString url = KDESRCDIR + QString("data/folding-crash.py"); doc.openUrl(url); doc.discardDataRecovery(); doc.setHighlightingMode("Python"); doc.buffer().ensureHighlighted (doc.lines()); // view must be visible... KateView* view = static_cast<KateView*>(doc.createView(0)); view->show(); view->resize(400, 300); // fold all doc.foldingTree()->collapseToplevelNodes(); QTest::qWait(1000); view->down(); view->down(); view->down(); view->cursorLeft(); QTest::qWait(1000); qDebug() << "!!! The next line usually crashes in the code folding code"; view->backspace(); doc.buffer().ensureHighlighted (doc.lines()); QTest::qWait(1000); }
// tests: // - RangeFeedback::mouseEnteredRange // - RangeFeedback::mouseExitedRange void MovingRangeTest::testFeedbackMouse() { KateDocument doc (false, false, false); // the range created below will span the 'x' characters QString text("..xxxx\n" "xxxx.."); doc.setText(text); KateView* view = static_cast<KateView*>(doc.createView(0)); view->setCursorPosition(Cursor(1, 6)); view->show(); view->resize(200, 100); // create range feedback RangeFeedback rf; QVERIFY(!rf.mouseEnteredRangeCalled()); QVERIFY(!rf.mouseExitedRangeCalled()); // allow empty MovingRange* range = doc.newMovingRange(Range(Cursor(0, 2), Cursor(1, 4)), KTextEditor::MovingRange::ExpandLeft | KTextEditor::MovingRange::ExpandRight, KTextEditor::MovingRange::InvalidateIfEmpty); range->setFeedback(&rf); rf.verifyReset(); // left (nothing) QTest::mouseMove(view, view->cursorToCoordinate(Cursor(0, 0)) + QPoint(0, 5)); QTest::qWait(200); // process mouse events. do not move mouse manually QVERIFY(!rf.mouseEnteredRangeCalled()); QVERIFY(!rf.mouseExitedRangeCalled()); // middle (enter) rf.reset(); QTest::mouseMove(view, view->cursorToCoordinate(Cursor(0, 3)) + QPoint(0, 5)); QTest::qWait(200); // process mouse events. do not move mouse manually QVERIFY(rf.mouseEnteredRangeCalled()); QVERIFY(!rf.mouseExitedRangeCalled()); // right (exit) rf.reset(); QTest::mouseMove(view, view->cursorToCoordinate(Cursor(1, 6)) + QPoint(10, 5)); QTest::qWait(200); // process mouse events. do not move mouse manually QVERIFY(!rf.mouseEnteredRangeCalled()); QVERIFY(rf.mouseExitedRangeCalled()); }
// This is a unit test for bug 311866 (http://bugs.kde.org/show_bug.cgi?id=311866) // It loads 5 lines of C++ code, places the cursor in line 4, and then folds // the code. // Expected behavior: the cursor should be moved so it stays visible // Buggy behavior: the cursor is hidden, and moving the hidden cursor crashes kate void KateFoldingTest::testCrash311866() { KateDocument doc(false, false, false); QString url = KDESRCDIR + QString("data/bug311866.cpp"); doc.openUrl(url); doc.setHighlightingMode("C++"); doc.buffer().ensureHighlighted (6); KateView* view = static_cast<KateView*>(doc.createView(0)); view->show(); view->resize(400, 300); view->setCursorPosition(Cursor(3, 0)); QTest::qWait(100); view->slotFoldToplevelNodes(); doc.buffer().ensureHighlighted (6); qDebug() << "!!! Does the next line crash?"; view->up(); }