File indexing completed on 2024-12-08 12:24:05
0001 /* 0002 This file is part of the KDE libraries 0003 SPDX-FileCopyrightText: 2012-2018 Dominik Haumann <dhaumann@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "bug313769.h" 0009 #include "moc_bug313769.cpp" 0010 0011 #include <katebuffer.h> 0012 #include <kateconfig.h> 0013 #include <katedocument.h> 0014 #include <kateglobal.h> 0015 #include <kateview.h> 0016 #include <ktexteditor/range.h> 0017 0018 #include <QtTestWidgets> 0019 0020 QTEST_MAIN(BugTest) 0021 0022 using namespace KTextEditor; 0023 0024 BugTest::BugTest() 0025 : QObject() 0026 { 0027 } 0028 0029 BugTest::~BugTest() 0030 { 0031 } 0032 0033 void BugTest::initTestCase() 0034 { 0035 KTextEditor::EditorPrivate::enableUnitTestMode(); 0036 } 0037 0038 void BugTest::cleanupTestCase() 0039 { 0040 } 0041 0042 void BugTest::tryCrash() 0043 { 0044 KTextEditor::DocumentPrivate doc(false, false); 0045 const QUrl url = QUrl::fromLocalFile(QLatin1String(TEST_DATA_DIR "bug313769.cpp")); 0046 doc.openUrl(url); 0047 doc.discardDataRecovery(); 0048 doc.setHighlightingMode(QStringLiteral("C++")); 0049 doc.buffer().ensureHighlighted(doc.lines()); 0050 0051 // view must be visible... 0052 KTextEditor::ViewPrivate *view = static_cast<KTextEditor::ViewPrivate *>(doc.createView(nullptr)); 0053 view->show(); 0054 view->resize(900, 800); 0055 view->config()->setDynWordWrap(true); 0056 view->setSelection(Range(2, 0, 74, 0)); 0057 view->setCursorPosition(Cursor(74, 0)); 0058 0059 doc.editBegin(); 0060 QString text = doc.line(1); 0061 doc.insertLine(74, text); 0062 doc.removeLine(1); 0063 view->setCursorPosition(Cursor(1, 0)); 0064 doc.editEnd(); 0065 0066 QTest::qWait(200); 0067 // fold toplevel nodes 0068 for (int line = 0; line < doc.lines(); ++line) { 0069 if (view->textFolding().isLineVisible(line)) { 0070 view->foldLine(line); 0071 } 0072 } 0073 doc.buffer().ensureHighlighted(doc.lines()); 0074 0075 view->setCursorPosition(Cursor(0, 0)); 0076 0077 QTest::qWait(100); 0078 doc.undo(); 0079 QTest::qWait(100); 0080 doc.redo(); 0081 QTest::qWait(500); 0082 qDebug() << "!!! Does undo crash?"; 0083 doc.undo(); 0084 0085 QTest::qWait(500); 0086 qDebug() << "!!! No crash (qWait not long enough)? Nice!"; 0087 }