aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSergey Morozov <dev@gres.biz>2018-05-05 22:28:55 +0300
committerChristian Stenger <christian.stenger@qt.io>2018-05-15 14:41:53 +0000
commit57edd22d11669ab9c36cb9a652643a5d5b1856ba (patch)
tree9443649c36a762a8e3405fecb41ee336e9c5d51a /src
parent887a0538cdae7bb45f4d054f5c0a6d8c7b73162b (diff)
AutoTest: Add action to run all tests from current file
Run specific test functions since one test case can be implemented in multiple files. Task-number: QTCREATORBUG-20329 Change-Id: I07f435c264f18e9608caa5b7ee20dff2d33ee9c0 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/autotest/autotest.qrc2
-rw-r--r--src/plugins/autotest/autotestconstants.h1
-rw-r--r--src/plugins/autotest/autotesticons.h2
-rw-r--r--src/plugins/autotest/autotestplugin.cpp33
-rw-r--r--src/plugins/autotest/autotestplugin.h1
-rw-r--r--src/plugins/autotest/gtest/gtesttreeitem.cpp33
-rw-r--r--src/plugins/autotest/gtest/gtesttreeitem.h1
-rw-r--r--src/plugins/autotest/images/run_file.pngbin0 -> 102 bytes
-rw-r--r--src/plugins/autotest/images/run_file@2x.pngbin0 -> 132 bytes
-rw-r--r--src/plugins/autotest/qtest/qttesttreeitem.cpp29
-rw-r--r--src/plugins/autotest/qtest/qttesttreeitem.h1
-rw-r--r--src/plugins/autotest/quick/quicktesttreeitem.cpp30
-rw-r--r--src/plugins/autotest/quick/quicktesttreeitem.h1
-rw-r--r--src/plugins/autotest/testresultspane.cpp7
-rw-r--r--src/plugins/autotest/testresultspane.h1
-rw-r--r--src/plugins/autotest/testtreeitem.cpp5
-rw-r--r--src/plugins/autotest/testtreeitem.h2
-rw-r--r--src/plugins/autotest/testtreemodel.cpp8
-rw-r--r--src/plugins/autotest/testtreemodel.h1
19 files changed, 156 insertions, 2 deletions
diff --git a/src/plugins/autotest/autotest.qrc b/src/plugins/autotest/autotest.qrc
index f4f6892d47..0c3a24d7ac 100644
--- a/src/plugins/autotest/autotest.qrc
+++ b/src/plugins/autotest/autotest.qrc
@@ -17,5 +17,7 @@
<file>images/text@2x.png</file>
<file>images/visual.png</file>
<file>images/visual@2x.png</file>
+ <file>images/run_file.png</file>
+ <file>images/run_file@2x.png</file>
</qresource>
</RCC>
diff --git a/src/plugins/autotest/autotestconstants.h b/src/plugins/autotest/autotestconstants.h
index 2de0fe43ab..1f92aba915 100644
--- a/src/plugins/autotest/autotestconstants.h
+++ b/src/plugins/autotest/autotestconstants.h
@@ -33,6 +33,7 @@ namespace Constants {
const char ACTION_SCAN_ID[] = "AutoTest.ScanAction";
const char ACTION_RUN_ALL_ID[] = "AutoTest.RunAll";
const char ACTION_RUN_SELECTED_ID[] = "AutoTest.RunSelected";
+const char ACTION_RUN_FILE_ID[] = "AutoTest.RunFile";
const char ACTION_RUN_UCURSOR[] = "AutoTest.RunUnderCursor";
const char ACTION_RUN_DBG_UCURSOR[] = "AutoTest.RunDebugUnderCursor";
const char MENU_ID[] = "AutoTest.Menu";
diff --git a/src/plugins/autotest/autotesticons.h b/src/plugins/autotest/autotesticons.h
index 07a8f86875..30f5a0d424 100644
--- a/src/plugins/autotest/autotesticons.h
+++ b/src/plugins/autotest/autotesticons.h
@@ -37,6 +37,8 @@ const Utils::Icon SORT_NATURALLY({
const Utils::Icon RUN_SELECTED_OVERLAY({
{":/autotest/images/runselected_boxes.png", Utils::Theme::BackgroundColorDark},
{":/autotest/images/runselected_tickmarks.png", Utils::Theme::IconsBaseColor}});
+const Utils::Icon RUN_FILE_OVERLAY({
+ {":/autotest/images/run_file.png", Utils::Theme::IconsBaseColor}});
const Utils::Icon RESULT_PASS({
{":/utils/images/filledcircle.png", Utils::Theme::OutputPanes_TestPassTextColor}},
diff --git a/src/plugins/autotest/autotestplugin.cpp b/src/plugins/autotest/autotestplugin.cpp
index d7bb68cdec..e3b48316c7 100644
--- a/src/plugins/autotest/autotestplugin.cpp
+++ b/src/plugins/autotest/autotestplugin.cpp
@@ -127,6 +127,18 @@ void AutotestPlugin::initializeMenuEntries()
action->setEnabled(false);
menu->addAction(command);
+ action = new QAction(tr("Run Tests for Current &File"), this);
+ Utils::Icon runFileIcon = Utils::Icons::RUN_SMALL_TOOLBAR;
+ for (const Utils::IconMaskAndColor &maskAndColor : Icons::RUN_FILE_OVERLAY)
+ runFileIcon.append(maskAndColor);
+ action->setIcon(runFileIcon.icon());
+ action->setToolTip(tr("Run Tests for Current File"));
+ command = ActionManager::registerAction(action, Constants::ACTION_RUN_FILE_ID);
+ command->setDefaultKeySequence(QKeySequence(tr("Alt+Shift+T,Alt+F")));
+ connect(action, &QAction::triggered, this, &AutotestPlugin::onRunFileTriggered);
+ action->setEnabled(false);
+ menu->addAction(command);
+
action = new QAction(tr("Re&scan Tests"), this);
command = ActionManager::registerAction(action, Constants::ACTION_SCAN_ID);
command->setDefaultKeySequence(QKeySequence(tr("Alt+Shift+T,Alt+S")));
@@ -219,6 +231,26 @@ void AutotestPlugin::onRunSelectedTriggered()
runner->prepareToRunTests(TestRunMode::Run);
}
+void AutotestPlugin::onRunFileTriggered()
+{
+ const IDocument *document = EditorManager::currentDocument();
+ if (!document)
+ return;
+
+ const Utils::FileName &fileName = document->filePath();
+ if (fileName.isEmpty())
+ return;
+
+ TestTreeModel *model = TestTreeModel::instance();
+ const QList<TestConfiguration *> tests = model->getTestsForFile(fileName);
+ if (tests.isEmpty())
+ return;
+
+ TestRunner *runner = TestRunner::instance();
+ runner->setSelectedTests(tests);
+ runner->prepareToRunTests(TestRunMode::Run);
+}
+
void AutotestPlugin::onRunUnderCursorTriggered(TestRunMode mode)
{
QTextCursor cursor = Utils::Text::wordStartCursor(
@@ -263,6 +295,7 @@ void AutotestPlugin::updateMenuItemsEnabledState()
ActionManager::command(Constants::ACTION_RUN_ALL_ID)->action()->setEnabled(canRun);
ActionManager::command(Constants::ACTION_RUN_SELECTED_ID)->action()->setEnabled(canRun);
+ ActionManager::command(Constants::ACTION_RUN_FILE_ID)->action()->setEnabled(canRun);
ActionManager::command(Constants::ACTION_SCAN_ID)->action()->setEnabled(canScan);
ActionContainer *contextMenu = ActionManager::actionContainer(CppEditor::Constants::M_CONTEXT);
diff --git a/src/plugins/autotest/autotestplugin.h b/src/plugins/autotest/autotestplugin.h
index cbd85937eb..efd8d31e77 100644
--- a/src/plugins/autotest/autotestplugin.h
+++ b/src/plugins/autotest/autotestplugin.h
@@ -60,6 +60,7 @@ private:
void initializeMenuEntries();
void onRunAllTriggered();
void onRunSelectedTriggered();
+ void onRunFileTriggered();
void onRunUnderCursorTriggered(TestRunMode mode);
QList<QObject *> createTestObjects() const override;
const QSharedPointer<TestSettings> m_settings;
diff --git a/src/plugins/autotest/gtest/gtesttreeitem.cpp b/src/plugins/autotest/gtest/gtesttreeitem.cpp
index b24f57f694..8f7c56dab9 100644
--- a/src/plugins/autotest/gtest/gtesttreeitem.cpp
+++ b/src/plugins/autotest/gtest/gtesttreeitem.cpp
@@ -268,6 +268,39 @@ QList<TestConfiguration *> GTestTreeItem::getSelectedTestConfigurations() const
return getTestConfigurations(false);
}
+QList<TestConfiguration *> GTestTreeItem::getTestConfigurationsForFile(const Utils::FileName &fileName) const
+{
+ QList<TestConfiguration *> result;
+ ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
+ if (!project || type() != Root)
+ return result;
+
+ QHash<QString, TestCases> testCases;
+ const QString &file = fileName.toString();
+ forAllChildren([&testCases, &file](TestTreeItem *node) {
+ if (node->type() == Type::TestFunctionOrSet && node->filePath() == file) {
+ QTC_ASSERT(node->parentItem(), return);
+ const GTestTreeItem *testCase = static_cast<GTestTreeItem *>(node->parentItem());
+ QTC_ASSERT(testCase->type() == Type::TestCase, return);
+ TestCases &cases = testCases[testCase->proFile()];
+ cases.filters.append(
+ gtestFilter(testCase->state()).arg(testCase->name(), node->name()));
+ cases.internalTargets.unite(node->internalTargets());
+ }
+ });
+ for (auto it = testCases.begin(), end = testCases.end(); it != end; ++it) {
+ for (const QString &target : qAsConst(it.value().internalTargets)) {
+ GTestConfiguration *tc = new GTestConfiguration;
+ tc->setTestCases(it.value().filters);
+ tc->setProjectFile(it.key());
+ tc->setProject(project);
+ tc->setInternalTarget(target);
+ result << tc;
+ }
+ }
+ return result;
+}
+
TestTreeItem *GTestTreeItem::find(const TestParseResult *result)
{
QTC_ASSERT(result, return nullptr);
diff --git a/src/plugins/autotest/gtest/gtesttreeitem.h b/src/plugins/autotest/gtest/gtesttreeitem.h
index c3ff8dba71..22225ae7f5 100644
--- a/src/plugins/autotest/gtest/gtesttreeitem.h
+++ b/src/plugins/autotest/gtest/gtesttreeitem.h
@@ -57,6 +57,7 @@ public:
TestConfiguration *debugConfiguration() const override;
QList<TestConfiguration *> getAllTestConfigurations() const override;
QList<TestConfiguration *> getSelectedTestConfigurations() const override;
+ QList<TestConfiguration *> getTestConfigurationsForFile(const Utils::FileName &fileName) const override;
TestTreeItem *find(const TestParseResult *result) override;
TestTreeItem *findChild(const TestTreeItem *other) override;
bool modify(const TestParseResult *result) override;
diff --git a/src/plugins/autotest/images/run_file.png b/src/plugins/autotest/images/run_file.png
new file mode 100644
index 0000000000..6a3bfc766f
--- /dev/null
+++ b/src/plugins/autotest/images/run_file.png
Binary files differ
diff --git a/src/plugins/autotest/images/run_file@2x.png b/src/plugins/autotest/images/run_file@2x.png
new file mode 100644
index 0000000000..4b386818c9
--- /dev/null
+++ b/src/plugins/autotest/images/run_file@2x.png
Binary files differ
diff --git a/src/plugins/autotest/qtest/qttesttreeitem.cpp b/src/plugins/autotest/qtest/qttesttreeitem.cpp
index 46a2ca03e9..2f375a484e 100644
--- a/src/plugins/autotest/qtest/qttesttreeitem.cpp
+++ b/src/plugins/autotest/qtest/qttesttreeitem.cpp
@@ -235,6 +235,35 @@ QList<TestConfiguration *> QtTestTreeItem::getSelectedTestConfigurations() const
return result;
}
+QList<TestConfiguration *> QtTestTreeItem::getTestConfigurationsForFile(const Utils::FileName &fileName) const
+{
+ QList<TestConfiguration *> result;
+
+ ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
+ if (!project || type() != Root)
+ return result;
+
+ QHash<TestTreeItem *, QStringList> testFunctions;
+ const QString &file = fileName.toString();
+ forAllChildren([&testFunctions, &file](TestTreeItem *node) {
+ if (node->type() == Type::TestFunctionOrSet && node->filePath() == file) {
+ QTC_ASSERT(node->parentItem(), return);
+ TestTreeItem *testCase = node->parentItem();
+ QTC_ASSERT(testCase->type() == Type::TestCase, return);
+ testFunctions[testCase] << node->name();
+ }
+ });
+
+ for (auto it = testFunctions.cbegin(), end = testFunctions.cend(); it != end; ++it) {
+ TestConfiguration *tc = it.key()->testConfiguration();
+ QTC_ASSERT(tc, continue);
+ tc->setTestCases(it.value());
+ result << tc;
+ }
+
+ return result;
+}
+
TestTreeItem *QtTestTreeItem::find(const TestParseResult *result)
{
QTC_ASSERT(result, return nullptr);
diff --git a/src/plugins/autotest/qtest/qttesttreeitem.h b/src/plugins/autotest/qtest/qttesttreeitem.h
index 9b70b735fa..2de8eb8f82 100644
--- a/src/plugins/autotest/qtest/qttesttreeitem.h
+++ b/src/plugins/autotest/qtest/qttesttreeitem.h
@@ -45,6 +45,7 @@ public:
TestConfiguration *debugConfiguration() const override;
QList<TestConfiguration *> getAllTestConfigurations() const override;
QList<TestConfiguration *> getSelectedTestConfigurations() const override;
+ QList<TestConfiguration *> getTestConfigurationsForFile(const Utils::FileName &fileName) const override;
TestTreeItem *find(const TestParseResult *result) override;
TestTreeItem *findChild(const TestTreeItem *other) override;
bool modify(const TestParseResult *result) override;
diff --git a/src/plugins/autotest/quick/quicktesttreeitem.cpp b/src/plugins/autotest/quick/quicktesttreeitem.cpp
index 6c0c4b4feb..dc17be469b 100644
--- a/src/plugins/autotest/quick/quicktesttreeitem.cpp
+++ b/src/plugins/autotest/quick/quicktesttreeitem.cpp
@@ -279,6 +279,36 @@ QList<TestConfiguration *> QuickTestTreeItem::getSelectedTestConfigurations() co
return result;
}
+QList<TestConfiguration *> QuickTestTreeItem::getTestConfigurationsForFile(const Utils::FileName &fileName) const
+{
+ QList<TestConfiguration *> result;
+ ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
+ if (!project || type() != Root)
+ return result;
+
+ QHash<TestTreeItem *, QStringList> testFunctions;
+ const QString &file = fileName.toString();
+ forAllChildren([&testFunctions, &file](TestTreeItem *node) {
+ if (node->type() == Type::TestFunctionOrSet && node->filePath() == file) {
+ QTC_ASSERT(node->parentItem(), return);
+ TestTreeItem *testCase = node->parentItem();
+ QTC_ASSERT(testCase->type() == Type::TestCase, return);
+ if (testCase->name().isEmpty())
+ return;
+ testFunctions[testCase] << testCase->name() + "::" + node->name();
+ }
+ });
+
+ for (auto it = testFunctions.cbegin(), end = testFunctions.cend(); it != end; ++it) {
+ TestConfiguration *tc = it.key()->testConfiguration();
+ QTC_ASSERT(tc, continue);
+ tc->setTestCases(it.value());
+ result << tc;
+ }
+
+ return result;
+}
+
TestTreeItem *QuickTestTreeItem::find(const TestParseResult *result)
{
QTC_ASSERT(result, return nullptr);
diff --git a/src/plugins/autotest/quick/quicktesttreeitem.h b/src/plugins/autotest/quick/quicktesttreeitem.h
index 48c2467de9..e00afc434b 100644
--- a/src/plugins/autotest/quick/quicktesttreeitem.h
+++ b/src/plugins/autotest/quick/quicktesttreeitem.h
@@ -45,6 +45,7 @@ public:
TestConfiguration *debugConfiguration() const override;
QList<TestConfiguration *> getAllTestConfigurations() const override;
QList<TestConfiguration *> getSelectedTestConfigurations() const override;
+ QList<TestConfiguration *> getTestConfigurationsForFile(const Utils::FileName &fileName) const override;
TestTreeItem *find(const TestParseResult *result) override;
TestTreeItem *findChild(const TestTreeItem *other) override;
bool modify(const TestParseResult *result) override;
diff --git a/src/plugins/autotest/testresultspane.cpp b/src/plugins/autotest/testresultspane.cpp
index d2b3ec97dd..3047e6d710 100644
--- a/src/plugins/autotest/testresultspane.cpp
+++ b/src/plugins/autotest/testresultspane.cpp
@@ -178,6 +178,9 @@ void TestResultsPane::createToolButtons()
m_runSelected = new QToolButton(m_treeView);
m_runSelected->setDefaultAction(Core::ActionManager::command(Constants::ACTION_RUN_SELECTED_ID)->action());
+ m_runFile = new QToolButton(m_treeView);
+ m_runFile->setDefaultAction(Core::ActionManager::command(Constants::ACTION_RUN_FILE_ID)->action());
+
m_stopTestRun = new QToolButton(m_treeView);
m_stopTestRun->setIcon(Utils::Icons::STOP_SMALL_TOOLBAR.icon());
m_stopTestRun->setToolTip(tr("Stop Test Run"));
@@ -248,8 +251,8 @@ QWidget *TestResultsPane::outputWidget(QWidget *parent)
QList<QWidget *> TestResultsPane::toolBarWidgets() const
{
- return {m_expandCollapse, m_runAll, m_runSelected, m_stopTestRun, m_outputToggleButton,
- m_filterButton};
+ return {m_expandCollapse, m_runAll, m_runSelected, m_runFile, m_stopTestRun,
+ m_outputToggleButton, m_filterButton};
}
QString TestResultsPane::displayName() const
diff --git a/src/plugins/autotest/testresultspane.h b/src/plugins/autotest/testresultspane.h
index 7156cd1c85..285b5baf0f 100644
--- a/src/plugins/autotest/testresultspane.h
+++ b/src/plugins/autotest/testresultspane.h
@@ -132,6 +132,7 @@ private:
QToolButton *m_expandCollapse;
QToolButton *m_runAll;
QToolButton *m_runSelected;
+ QToolButton *m_runFile;
QToolButton *m_stopTestRun;
QToolButton *m_filterButton;
QToolButton *m_outputToggleButton;
diff --git a/src/plugins/autotest/testtreeitem.cpp b/src/plugins/autotest/testtreeitem.cpp
index 3d07c8076d..c136ed30ab 100644
--- a/src/plugins/autotest/testtreeitem.cpp
+++ b/src/plugins/autotest/testtreeitem.cpp
@@ -259,6 +259,11 @@ QList<TestConfiguration *> TestTreeItem::getSelectedTestConfigurations() const
return QList<TestConfiguration *>();
}
+QList<TestConfiguration *> TestTreeItem::getTestConfigurationsForFile(const Utils::FileName &) const
+{
+ return QList<TestConfiguration *>();
+}
+
bool TestTreeItem::lessThan(const TestTreeItem *other, SortMode mode) const
{
const QString &lhs = data(0, Qt::DisplayRole).toString();
diff --git a/src/plugins/autotest/testtreeitem.h b/src/plugins/autotest/testtreeitem.h
index 0180c88fef..dbb82f486a 100644
--- a/src/plugins/autotest/testtreeitem.h
+++ b/src/plugins/autotest/testtreeitem.h
@@ -42,6 +42,7 @@ namespace {
}
namespace CppTools { class CppModelManager; }
+namespace Utils { class FileName; }
namespace Autotest {
namespace Internal {
@@ -113,6 +114,7 @@ public:
TestConfiguration *asConfiguration(TestRunMode mode) const;
virtual QList<TestConfiguration *> getAllTestConfigurations() const;
virtual QList<TestConfiguration *> getSelectedTestConfigurations() const;
+ virtual QList<TestConfiguration *> getTestConfigurationsForFile(const Utils::FileName &fileName) const;
virtual bool lessThan(const TestTreeItem *other, SortMode mode) const;
virtual TestTreeItem *find(const TestParseResult *result) = 0;
virtual TestTreeItem *findChild(const TestTreeItem *other) = 0;
diff --git a/src/plugins/autotest/testtreemodel.cpp b/src/plugins/autotest/testtreemodel.cpp
index ef7a30c4c9..48e3224032 100644
--- a/src/plugins/autotest/testtreemodel.cpp
+++ b/src/plugins/autotest/testtreemodel.cpp
@@ -158,6 +158,14 @@ QList<TestConfiguration *> TestTreeModel::getSelectedTests() const
return result;
}
+QList<TestConfiguration *> TestTreeModel::getTestsForFile(const Utils::FileName &fileName) const
+{
+ QList<TestConfiguration *> result;
+ for (Utils::TreeItem *frameworkRoot : *rootItem())
+ result.append(static_cast<TestTreeItem *>(frameworkRoot)->getTestConfigurationsForFile(fileName));
+ return result;
+}
+
QList<TestTreeItem *> TestTreeModel::testItemsByName(TestTreeItem *root, const QString &testName)
{
QList<TestTreeItem *> result;
diff --git a/src/plugins/autotest/testtreemodel.h b/src/plugins/autotest/testtreemodel.h
index b9f4d5ea13..78974e67bd 100644
--- a/src/plugins/autotest/testtreemodel.h
+++ b/src/plugins/autotest/testtreemodel.h
@@ -54,6 +54,7 @@ public:
bool hasTests() const;
QList<TestConfiguration *> getAllTestCases() const;
QList<TestConfiguration *> getSelectedTests() const;
+ QList<TestConfiguration *> getTestsForFile(const Utils::FileName &fileName) const;
QList<TestTreeItem *> testItemsByName(const QString &testName);
void syncTestFrameworks();
void rebuild(const QList<Core::Id> &frameworkIds);