File indexing completed on 2024-05-19 04:42:10
0001 /* 0002 SPDX-FileCopyrightText: 2011 Silvère Lestang <silvere.lestang@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "test_standardoutputview.h" 0008 0009 #include <QAction> 0010 #include <QStackedWidget> 0011 #include <QStandardItemModel> 0012 #include <QItemDelegate> 0013 #include <QTreeView> 0014 #include <QTest> 0015 0016 #include <KLocalizedString> 0017 0018 #include <tests/testcore.h> 0019 #include <tests/autotestshell.h> 0020 #include <sublime/view.h> 0021 #include <sublime/controller.h> 0022 #include <sublime/area.h> 0023 #include <sublime/tooldocument.h> 0024 #include <interfaces/iplugincontroller.h> 0025 #include <outputview/ioutputview.h> 0026 0027 #include "../outputwidget.h" 0028 #include "../toolviewdata.h" 0029 0030 namespace { 0031 QByteArray toolViewConfigSubgroup() 0032 { 0033 return QByteArrayLiteral("test_toolview"); 0034 } 0035 QString toolViewTitle() 0036 { 0037 return QStringLiteral("my_toolview"); 0038 } 0039 } 0040 0041 namespace KDevelop 0042 { 0043 class IUiController; 0044 } 0045 0046 QTEST_MAIN(StandardOutputViewTest) 0047 0048 void StandardOutputViewTest::initTestCase() 0049 { 0050 KDevelop::AutoTestShell::init({QStringLiteral("KDevStandardOutputView")}); 0051 m_testCore = new KDevelop::TestCore(); 0052 m_testCore->initialize(KDevelop::Core::Default); 0053 0054 m_controller = m_testCore->uiControllerInternal(); 0055 0056 QTest::qWait(500); // makes sure that everything is loaded (don't know if it's required) 0057 0058 m_stdOutputView = nullptr; 0059 KDevelop::IPluginController* plugin_controller = m_testCore->pluginController(); 0060 0061 // make sure KDevStandardOutputView is loaded 0062 KDevelop::IPlugin* plugin = plugin_controller->loadPlugin(QStringLiteral("KDevStandardOutputView")); 0063 QVERIFY(plugin); 0064 m_stdOutputView = dynamic_cast<KDevelop::IOutputView*>(plugin); 0065 QVERIFY(m_stdOutputView); 0066 } 0067 0068 void StandardOutputViewTest::cleanupTestCase() 0069 { 0070 m_testCore->cleanup(); 0071 delete m_testCore; 0072 } 0073 0074 OutputWidget* StandardOutputViewTest::toolViewPointer(const QString& toolViewTitle) 0075 { 0076 const QList< Sublime::View* > views = m_controller->activeArea()->toolViews(); 0077 for (Sublime::View* view : views) { 0078 auto* doc = qobject_cast<Sublime::ToolDocument*>(view->document()); 0079 if(doc) { 0080 if(doc->title() == toolViewTitle && view->hasWidget()) { 0081 // cannot use qobject_cast here, test code currently slightly fragile due to 0082 // duplicated compilation of OutputWidget, here & loaded plugin 0083 // cmp. comment in CMakeLists.txt 0084 return dynamic_cast<OutputWidget*>(view->widget()); 0085 } 0086 } 0087 } 0088 return nullptr; 0089 } 0090 0091 void StandardOutputViewTest::testRegisterAndRemoveToolView() 0092 { 0093 toolViewId = m_stdOutputView->registerToolView(toolViewConfigSubgroup(), toolViewTitle(), 0094 KDevelop::IOutputView::HistoryView); 0095 QVERIFY(toolViewPointer(toolViewTitle())); 0096 0097 // re-registering should return the same tool view instead of creating a new one 0098 QCOMPARE(toolViewId, 0099 m_stdOutputView->registerToolView(toolViewConfigSubgroup(), toolViewTitle(), 0100 KDevelop::IOutputView::HistoryView)); 0101 0102 m_stdOutputView->removeToolView(toolViewId); 0103 QVERIFY(!toolViewPointer(toolViewTitle())); 0104 } 0105 0106 void StandardOutputViewTest::testActions() 0107 { 0108 toolViewId = m_stdOutputView->registerToolView(toolViewConfigSubgroup(), toolViewTitle(), 0109 KDevelop::IOutputView::MultipleView, QIcon()); 0110 OutputWidget* outputWidget = toolViewPointer(toolViewTitle()); 0111 QVERIFY(outputWidget); 0112 0113 QList<QAction*> actions = outputWidget->actions(); 0114 QCOMPARE(actions.size(), 13); 0115 0116 m_stdOutputView->removeToolView(toolViewId); 0117 QVERIFY(!toolViewPointer(toolViewTitle())); 0118 0119 QList<QAction*> addedActions; 0120 addedActions.append(new QAction(QStringLiteral("Action1"), this)); 0121 addedActions.append(new QAction(QStringLiteral("Action2"), this)); 0122 toolViewId = m_stdOutputView->registerToolView( 0123 toolViewConfigSubgroup(), toolViewTitle(), KDevelop::IOutputView::HistoryView, QIcon(), 0124 KDevelop::IOutputView::ShowItemsButton | KDevelop::IOutputView::AddFilterAction, addedActions); 0125 outputWidget = toolViewPointer(toolViewTitle()); 0126 QVERIFY(outputWidget); 0127 0128 actions = outputWidget->actions(); 0129 QCOMPARE(actions.size(), 18); 0130 QCOMPARE(actions[actions.size()-2]->text(), addedActions[0]->text()); 0131 QCOMPARE(actions[actions.size()-1]->text(), addedActions[1]->text()); 0132 0133 m_stdOutputView->removeToolView(toolViewId); 0134 QVERIFY(!toolViewPointer(toolViewTitle())); 0135 } 0136 0137 void StandardOutputViewTest::testRegisterAndRemoveOutput() 0138 { 0139 toolViewId = m_stdOutputView->registerToolView(toolViewConfigSubgroup(), toolViewTitle(), 0140 KDevelop::IOutputView::MultipleView, QIcon()); 0141 OutputWidget* outputWidget = toolViewPointer(toolViewTitle()); 0142 QVERIFY(outputWidget); 0143 0144 for(int i = 0; i < 5; i++) 0145 { 0146 outputId[i] = m_stdOutputView->registerOutputInToolView(toolViewId, QStringLiteral("output%1").arg(i)); 0147 } 0148 for(int i = 0; i < 5; i++) 0149 { 0150 QCOMPARE(outputWidget->data->outputdata.value(outputId[i])->title, QStringLiteral("output%1").arg(i)); 0151 QCOMPARE(outputWidget->m_tabwidget->tabText(i), QStringLiteral("output%1").arg(i)); 0152 } 0153 for (int id : outputId) { 0154 m_stdOutputView->removeOutput(id); 0155 QVERIFY(!outputWidget->data->outputdata.contains(id)); 0156 } 0157 QCOMPARE(outputWidget->m_tabwidget->count(), 0); 0158 0159 m_stdOutputView->removeToolView(toolViewId); 0160 QVERIFY(!toolViewPointer(toolViewTitle())); 0161 0162 toolViewId = m_stdOutputView->registerToolView( 0163 toolViewConfigSubgroup(), toolViewTitle(), KDevelop::IOutputView::HistoryView, QIcon(), 0164 KDevelop::IOutputView::ShowItemsButton | KDevelop::IOutputView::AddFilterAction); 0165 outputWidget = toolViewPointer(toolViewTitle()); 0166 QVERIFY(outputWidget); 0167 0168 for(int i = 0; i < 5; i++) 0169 { 0170 outputId[i] = m_stdOutputView->registerOutputInToolView(toolViewId, QStringLiteral("output%1").arg(i)); 0171 } 0172 for(int i = 0; i < 5; i++) 0173 { 0174 QCOMPARE(outputWidget->data->outputdata.value(outputId[i])->title, QStringLiteral("output%1").arg(i)); 0175 } 0176 for (int id : outputId) { 0177 m_stdOutputView->removeOutput(id); 0178 QVERIFY(!outputWidget->data->outputdata.contains(id)); 0179 } 0180 QCOMPARE(outputWidget->m_stackwidget->count(), 0); 0181 0182 m_stdOutputView->removeToolView(toolViewId); 0183 QVERIFY(!toolViewPointer(toolViewTitle())); 0184 } 0185 0186 void StandardOutputViewTest::testSetModelAndDelegate() 0187 { 0188 toolViewId = m_stdOutputView->registerToolView(toolViewConfigSubgroup(), toolViewTitle(), 0189 KDevelop::IOutputView::MultipleView, QIcon()); 0190 OutputWidget* outputWidget = toolViewPointer(toolViewTitle()); 0191 QVERIFY(outputWidget); 0192 0193 QAbstractItemModel* model = new QStandardItemModel; 0194 QPointer<QAbstractItemModel> checkModel(model); 0195 QAbstractItemDelegate* delegate = new QItemDelegate; 0196 QPointer<QAbstractItemDelegate> checkDelegate(delegate); 0197 0198 outputId[0] = m_stdOutputView->registerOutputInToolView(toolViewId, QStringLiteral("output")); 0199 m_stdOutputView->setModel(outputId[0], model); 0200 m_stdOutputView->setDelegate(outputId[0], delegate); 0201 0202 QCOMPARE(outputWidget->m_views.value(outputId[0]).view->model(), model); 0203 QCOMPARE(outputWidget->m_views.value(outputId[0]).view->itemDelegate(), delegate); 0204 0205 QVERIFY(model->parent()); // they have a parent (the outputdata), so parent() != 0x0 0206 QVERIFY(delegate->parent()); 0207 0208 m_stdOutputView->removeToolView(toolViewId); 0209 QVERIFY(!toolViewPointer(toolViewTitle())); 0210 0211 // view deleted, hence model + delegate deleted 0212 QVERIFY(!checkModel.data()); 0213 QVERIFY(!checkDelegate.data()); 0214 } 0215 0216 void StandardOutputViewTest::testStandardToolViews() 0217 { 0218 QFETCH(KDevelop::IOutputView::StandardToolView, view); 0219 int id = m_stdOutputView->standardToolView(view); 0220 QVERIFY(id); 0221 QCOMPARE(id, m_stdOutputView->standardToolView(view)); 0222 } 0223 0224 void StandardOutputViewTest::testStandardToolViews_data() 0225 { 0226 QTest::addColumn<KDevelop::IOutputView::StandardToolView>("view"); 0227 0228 QTest::newRow("build") << KDevelop::IOutputView::BuildView; 0229 QTest::newRow("run") << KDevelop::IOutputView::RunView; 0230 QTest::newRow("debug") << KDevelop::IOutputView::DebugView; 0231 QTest::newRow("test") << KDevelop::IOutputView::TestView; 0232 QTest::newRow("vcs") << KDevelop::IOutputView::VcsView; 0233 } 0234 0235 #include "moc_test_standardoutputview.cpp"