diff --git a/doc/src/howto/creator-only/creator-autotest.qdoc b/doc/src/howto/creator-only/creator-autotest.qdoc index 80a8f91f6b5..6c05f13f8d7 100644 --- a/doc/src/howto/creator-only/creator-autotest.qdoc +++ b/doc/src/howto/creator-only/creator-autotest.qdoc @@ -240,11 +240,6 @@ \image qtcreator-autotests-options.png - You can add filters to specify the directories within the current project - to scan for tests. Select the \uicontrol {Global Filters} check box, and - then select \uicontrol Add to specify paths to the directories to scan for - tests. Wildcards are not supported in the filter expressions. - In some special setups, \QC cannot deduce which executable or run configuration it should use. If \QC repeatedly asks you to select the tests to run when trying to execute tests, you can enable it to cache diff --git a/src/plugins/autotest/testcodeparser.cpp b/src/plugins/autotest/testcodeparser.cpp index 1449816fc0a..5916291b7f2 100644 --- a/src/plugins/autotest/testcodeparser.cpp +++ b/src/plugins/autotest/testcodeparser.cpp @@ -171,28 +171,6 @@ void TestCodeParser::updateTestTree(ITestParser *parser) scanForTests(QStringList(), parser); } -static QStringList filterFiles(const QString &projectDir, const QStringList &files) -{ - const QSharedPointer &settings = AutotestPlugin::settings(); - const QSet &filters = settings->whiteListFilters.toSet(); // avoid duplicates - if (!settings->filterScan || filters.isEmpty()) - return files; - QStringList finalResult; - for (const QString &file : files) { - // apply filter only below project directory if file is part of a project - const QString &fileToProcess = file.startsWith(projectDir) - ? file.mid(projectDir.size()) - : file; - for (const QString &filter : filters) { - if (fileToProcess.contains(filter)) { - finalResult.push_back(file); - break; - } - } - } - return finalResult; -} - // used internally to indicate a parse that failed due to having triggered a parse for a file that // is not (yet) part of the CppModelManager's snapshot static bool parsingHasFailed; @@ -379,7 +357,6 @@ void TestCodeParser::scanForTests(const QStringList &fileList, ITestParser *pars m_model->markForRemoval(filePath); } - list = filterFiles(project->projectDirectory().toString(), list); if (list.isEmpty()) { if (isFullParse) { Core::MessageManager::instance()->write( diff --git a/src/plugins/autotest/testsettings.cpp b/src/plugins/autotest/testsettings.cpp index c825ea55733..49e028d41da 100644 --- a/src/plugins/autotest/testsettings.cpp +++ b/src/plugins/autotest/testsettings.cpp @@ -39,8 +39,6 @@ static const char omitInternalKey[] = "OmitInternal"; static const char omitRunConfigWarnKey[] = "OmitRCWarnings"; static const char limitResultOutputKey[] = "LimitResultOutput"; static const char autoScrollKey[] = "AutoScrollResults"; -static const char filterScanKey[] = "FilterScan"; -static const char filtersKey[] = "WhiteListFilters"; static const char processArgsKey[] = "ProcessArgs"; static const char displayApplicationKey[] = "DisplayApp"; static const char groupSuffix[] = ".group"; @@ -62,8 +60,6 @@ void TestSettings::toSettings(QSettings *s) const s->setValue(autoScrollKey, autoScroll); s->setValue(processArgsKey, processArgs); s->setValue(displayApplicationKey, displayApplication); - s->setValue(filterScanKey, filterScan); - s->setValue(filtersKey, whiteListFilters); // store frameworks and their current active and grouping state for (const Core::Id &id : frameworks.keys()) { s->setValue(QLatin1String(id.name()), frameworks.value(id)); @@ -82,8 +78,6 @@ void TestSettings::fromSettings(QSettings *s) autoScroll = s->value(autoScrollKey, true).toBool(); processArgs = s->value(processArgsKey, false).toBool(); displayApplication = s->value(displayApplicationKey, false).toBool(); - filterScan = s->value(filterScanKey, false).toBool(); - whiteListFilters = s->value(filtersKey, QStringList()).toStringList(); // try to get settings for registered frameworks TestFrameworkManager *frameworkManager = TestFrameworkManager::instance(); const QList ®istered = frameworkManager->registeredFrameworkIds(); diff --git a/src/plugins/autotest/testsettings.h b/src/plugins/autotest/testsettings.h index 6eff083e599..3f41a8c1398 100644 --- a/src/plugins/autotest/testsettings.h +++ b/src/plugins/autotest/testsettings.h @@ -47,12 +47,10 @@ struct TestSettings bool omitRunConfigWarn = false; bool limitResultOutput = true; bool autoScroll = true; - bool filterScan = false; bool processArgs = false; bool displayApplication = false; QHash frameworks; QHash frameworksGrouping; - QStringList whiteListFilters; }; } // namespace Internal diff --git a/src/plugins/autotest/testsettingspage.cpp b/src/plugins/autotest/testsettingspage.cpp index e2bf15ae6c5..709c9685c09 100644 --- a/src/plugins/autotest/testsettingspage.cpp +++ b/src/plugins/autotest/testsettingspage.cpp @@ -32,90 +32,12 @@ #include "autotestplugin.h" #include -#include #include #include -#include -#include -#include - namespace Autotest { namespace Internal { -class TestFilterDialog : public QDialog -{ -public: - explicit TestFilterDialog(QWidget *parent = nullptr, Qt::WindowFlags f = nullptr); - QString filterPath() const; - void setDetailsText(const QString &details) { m_details->setText(details); } - void setDefaultFilterPath(const QString &defaultPath); -private: - static bool validate(Utils::FancyLineEdit *edit, QString * /*errormessage*/); - QLabel *m_details; - Utils::FancyLineEdit *m_lineEdit; - QString m_defaultPath; -}; - -TestFilterDialog::TestFilterDialog(QWidget *parent, Qt::WindowFlags f) - : QDialog(parent, f), - m_details(new QLabel), - m_lineEdit(new Utils::FancyLineEdit) -{ - setModal(true); - auto layout = new QVBoxLayout(this); - layout->setSizeConstraint(QLayout::SetFixedSize); - layout->addWidget(m_details); - m_lineEdit->setValidationFunction(&validate); - layout->addWidget(m_lineEdit); - auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this); - auto okButton = buttonBox->button(QDialogButtonBox::Ok); - auto cancelButton = buttonBox->button(QDialogButtonBox::Cancel); - okButton->setEnabled(false); - layout->addWidget(buttonBox); - setLayout(layout); - connect(m_lineEdit, &Utils::FancyLineEdit::validChanged, okButton, &QPushButton::setEnabled); - connect(okButton, &QPushButton::clicked, this, &QDialog::accept); - connect(cancelButton, &QPushButton::clicked, this, &QDialog::reject); -} - -QString TestFilterDialog::filterPath() const -{ - static const QRegExp repetition("//+"); - QString path = m_lineEdit->isValid() ? m_lineEdit->text() : m_defaultPath; - path.replace('\\', '/'); // turn windows separators into forward slashes - path.replace(repetition, "/"); // avoid duplicated separators - if (!path.startsWith('/')) - path.prepend('/'); - if (!path.endsWith('/')) - path.append('/'); - if (path.length() <= 2) // after surrounding with '/' this should be > 2 if valid - return QString(); // empty string marks invalid filter - return path; -} - -void TestFilterDialog::setDefaultFilterPath(const QString &defaultPath) -{ - m_lineEdit->setText(defaultPath); - if (m_lineEdit->isValid()) - m_defaultPath = defaultPath; - else - m_lineEdit->setText(m_defaultPath); -} - -bool TestFilterDialog::validate(Utils::FancyLineEdit *edit, QString *) -{ - if (!edit) - return false; - const QString &value = edit->text(); - if (value.isEmpty()) - return false; - // should we distinguish between Windows and UNIX? - static const QRegExp valid("(\\|/)?([^?*:;\"\'|<>\t\b]+(\\|/)?)+"); - return valid.exactMatch(value); -} -/**************************************************************************************************/ - TestSettingsWidget::TestSettingsWidget(QWidget *parent) : QWidget(parent) { @@ -129,17 +51,6 @@ TestSettingsWidget::TestSettingsWidget(QWidget *parent) "having at least one active test framework.")); connect(m_ui.frameworkTreeWidget, &QTreeWidget::itemChanged, this, &TestSettingsWidget::onFrameworkItemChanged); - connect(m_ui.addFilter, &QPushButton::clicked, this, &TestSettingsWidget::onAddFilterClicked); - connect(m_ui.editFilter, &QPushButton::clicked, this, &TestSettingsWidget::onEditFilterClicked); - connect(m_ui.filterTreeWidget, &QTreeWidget::activated, - this, &TestSettingsWidget::onEditFilterClicked); - connect(m_ui.removeFilter, &QPushButton::clicked, - this, &TestSettingsWidget::onRemoveFilterClicked); - connect(m_ui.filterTreeWidget, &QTreeWidget::itemSelectionChanged, [this] () { - const bool enable = m_ui.filterTreeWidget->selectionModel()->hasSelection(); - m_ui.editFilter->setEnabled(enable); - m_ui.removeFilter->setEnabled(enable); - }); connect(m_ui.resetChoicesButton, &QPushButton::clicked, this, [] { AutotestPlugin::clearChoiceCache(); }); } @@ -153,9 +64,7 @@ void TestSettingsWidget::setSettings(const TestSettings &settings) m_ui.autoScrollCB->setChecked(settings.autoScroll); m_ui.processArgsCB->setChecked(settings.processArgs); m_ui.displayAppCB->setChecked(settings.displayApplication); - m_ui.filterGroupBox->setChecked(settings.filterScan); populateFrameworksListWidget(settings.frameworks); - populateFiltersWidget(settings.whiteListFilters); } TestSettings TestSettingsWidget::settings() const @@ -168,9 +77,7 @@ TestSettings TestSettingsWidget::settings() const result.autoScroll = m_ui.autoScrollCB->isChecked(); result.processArgs = m_ui.processArgsCB->isChecked(); result.displayApplication = m_ui.displayAppCB->isChecked(); - result.filterScan = m_ui.filterGroupBox->isChecked(); frameworkSettings(result); - result.whiteListFilters = filters(); return result; } @@ -196,12 +103,6 @@ void TestSettingsWidget::populateFrameworksListWidget(const QHashmodel(); @@ -216,16 +117,6 @@ void TestSettingsWidget::frameworkSettings(TestSettings &settings) const } } -QStringList TestSettingsWidget::filters() const -{ - QStringList result; - if (QAbstractItemModel *model = m_ui.filterTreeWidget->model()) { - for (int row = 0, count = model->rowCount(); row < count; ++row) - result.append(model->index(row, 0).data().toString()); - } - return result; -} - void TestSettingsWidget::onFrameworkItemChanged() { if (QAbstractItemModel *model = m_ui.frameworkTreeWidget->model()) { @@ -241,45 +132,6 @@ void TestSettingsWidget::onFrameworkItemChanged() m_ui.frameworksWarnIcon->setVisible(true); } -void TestSettingsWidget::onAddFilterClicked() -{ - TestFilterDialog dialog; - dialog.setWindowTitle(tr("Add Filter")); - dialog.setDetailsText("

" + tr("Specify a filter expression to be added to the list of filters." - "
Wildcards are not supported.") + "

"); - if (dialog.exec() == QDialog::Accepted) { - const QString &filter = dialog.filterPath(); - if (!filter.isEmpty()) - new QTreeWidgetItem(m_ui.filterTreeWidget, {filter} ); - } -} - -void TestSettingsWidget::onEditFilterClicked() -{ - const QList &selected = m_ui.filterTreeWidget->selectedItems(); - QTC_ASSERT(selected.size() == 1, return); - const QString &oldFilter = selected.first()->data(0, Qt::DisplayRole).toString(); - - TestFilterDialog dialog; - dialog.setWindowTitle(tr("Edit Filter")); - dialog.setDetailsText("

" + tr("Specify a filter expression that will replace \"%1\"." - "
Wildcards are not supported.").arg(oldFilter) + "

"); - dialog.setDefaultFilterPath(oldFilter); - if (dialog.exec() == QDialog::Accepted) { - const QString &edited = dialog.filterPath(); - if (!edited.isEmpty() && edited != oldFilter) - selected.first()->setData(0, Qt::DisplayRole, edited); - } -} - -void TestSettingsWidget::onRemoveFilterClicked() -{ - const QList &selected = m_ui.filterTreeWidget->selectedItems(); - QTC_ASSERT(selected.size() == 1, return); - m_ui.filterTreeWidget->removeItemWidget(selected.first(), 0); - delete selected.first(); -} - TestSettingsPage::TestSettingsPage(const QSharedPointer &settings) : m_settings(settings) { @@ -306,8 +158,6 @@ void TestSettingsPage::apply() return; const TestSettings newSettings = m_widget->settings(); bool frameworkSyncNecessary = newSettings.frameworks != m_settings->frameworks; - bool forceReparse = newSettings.filterScan != m_settings->filterScan || - newSettings.whiteListFilters.toSet() != m_settings->whiteListFilters.toSet(); const QList changedIds = Utils::filtered(newSettings.frameworksGrouping.keys(), [newSettings, this] (const Core::Id &id) { return newSettings.frameworksGrouping[id] != m_settings->frameworksGrouping[id]; @@ -318,8 +168,6 @@ void TestSettingsPage::apply() frameworkManager->activateFrameworksFromSettings(m_settings); if (frameworkSyncNecessary) TestTreeModel::instance()->syncTestFrameworks(); - else if (forceReparse) - TestTreeModel::instance()->parser()->emitUpdateTestTree(); else if (!changedIds.isEmpty()) TestTreeModel::instance()->rebuild(changedIds); } diff --git a/src/plugins/autotest/testsettingspage.h b/src/plugins/autotest/testsettingspage.h index 2b1216c9eb6..a1005004769 100644 --- a/src/plugins/autotest/testsettingspage.h +++ b/src/plugins/autotest/testsettingspage.h @@ -47,13 +47,8 @@ public: private: void populateFrameworksListWidget(const QHash &frameworks); - void populateFiltersWidget(const QStringList &filters); void frameworkSettings(TestSettings &settings) const; - QStringList filters() const; void onFrameworkItemChanged(); - void onAddFilterClicked(); - void onEditFilterClicked(); - void onRemoveFilterClicked(); Ui::TestSettingsPage m_ui; }; diff --git a/src/plugins/autotest/testsettingspage.ui b/src/plugins/autotest/testsettingspage.ui index dbdf49842a6..53c85920373 100644 --- a/src/plugins/autotest/testsettingspage.ui +++ b/src/plugins/autotest/testsettingspage.ui @@ -7,7 +7,7 @@ 0 0 585 - 458 + 357 @@ -283,102 +283,6 @@ Warning: this is an experimental feature and might lead to failing to execute th - - - - true - - - Global Filters - - - true - - - false - - - - - - Filters used on directories when scanning for tests.<br/>If filtering is enabled, only directories that match any of the filters will be scanned. - - - true - - - true - - - - 1 - - - - - - - - - - Add... - - - - - - - false - - - Edit... - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - false - - - Remove - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - -