diff options
author | Christian Stenger <christian.stenger@qt.io> | 2017-10-25 14:31:57 +0200 |
---|---|---|
committer | Christian Stenger <christian.stenger@qt.io> | 2017-11-28 09:40:47 +0000 |
commit | e412a800b0871c7f5b5eef4ac952ddbb523cb924 (patch) | |
tree | 16017688eea1d1c41132f99500c2c06aa5da5230 /src | |
parent | eaf4b674617ce08e81359abf0045c40627538fa9 (diff) | |
download | qt-creator-e412a800b0871c7f5b5eef4ac952ddbb523cb924.tar.gz |
AutoTest: Limit search for test tree items to respective root
If searching for a test tree item matching a QtTestResult
we can safely limit searching to the subtree holding
QtTests or QuickTests.
Additionally store information whether it is a Quick or
pure Qt test into the result to limit it to a single root.
Change-Id: I240e778448d99434d188d90a110dfa4f1934c950
Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/autotest/qtest/qttestconfiguration.cpp | 11 | ||||
-rw-r--r-- | src/plugins/autotest/qtest/qttestconstants.h | 9 | ||||
-rw-r--r-- | src/plugins/autotest/qtest/qttestoutputreader.cpp | 7 | ||||
-rw-r--r-- | src/plugins/autotest/qtest/qttestoutputreader.h | 4 | ||||
-rw-r--r-- | src/plugins/autotest/qtest/qttestresult.cpp | 33 | ||||
-rw-r--r-- | src/plugins/autotest/qtest/qttestresult.h | 7 | ||||
-rw-r--r-- | src/plugins/autotest/quick/quicktestconfiguration.cpp | 11 | ||||
-rw-r--r-- | src/plugins/autotest/quick/quicktestframework.cpp | 2 | ||||
-rw-r--r-- | src/plugins/autotest/quick/quicktestframework.h | 8 |
9 files changed, 66 insertions, 26 deletions
diff --git a/src/plugins/autotest/qtest/qttestconfiguration.cpp b/src/plugins/autotest/qtest/qttestconfiguration.cpp index 46a6a3d99f..976e14aee2 100644 --- a/src/plugins/autotest/qtest/qttestconfiguration.cpp +++ b/src/plugins/autotest/qtest/qttestconfiguration.cpp @@ -45,10 +45,13 @@ TestOutputReader *QtTestConfiguration::outputReader(const QFutureInterface<TestR if (qtSettings.isNull()) return nullptr; - if (qtSettings->useXMLOutput) - return new QtTestOutputReader(fi, app, buildDirectory(), projectFile(), QtTestOutputReader::XML); - else - return new QtTestOutputReader(fi, app, buildDirectory(), projectFile(), QtTestOutputReader::PlainText); + if (qtSettings->useXMLOutput) { + return new QtTestOutputReader(fi, app, buildDirectory(), projectFile(), + QtTestOutputReader::XML, TestType::QtTest); + } else { + return new QtTestOutputReader(fi, app, buildDirectory(), projectFile(), + QtTestOutputReader::PlainText, TestType::QtTest); + } } QStringList QtTestConfiguration::argumentsForTestRunner(QStringList *omitted) const diff --git a/src/plugins/autotest/qtest/qttestconstants.h b/src/plugins/autotest/qtest/qttestconstants.h index ee944b279f..7bd602a505 100644 --- a/src/plugins/autotest/qtest/qttestconstants.h +++ b/src/plugins/autotest/qtest/qttestconstants.h @@ -37,4 +37,13 @@ const unsigned FRAMEWORK_PRIORITY = 1; } // namespace Constants } // namespace QtTest + +namespace Internal { +enum class TestType +{ + QtTest, + QuickTest +}; + +} // namespace Internal } // namespace Autotest diff --git a/src/plugins/autotest/qtest/qttestoutputreader.cpp b/src/plugins/autotest/qtest/qttestoutputreader.cpp index dcbcc1215c..b14b2d80fd 100644 --- a/src/plugins/autotest/qtest/qttestoutputreader.cpp +++ b/src/plugins/autotest/qtest/qttestoutputreader.cpp @@ -131,11 +131,12 @@ static QString constructSourceFilePath(const QString &path, const QString &fileP QtTestOutputReader::QtTestOutputReader(const QFutureInterface<TestResultPtr> &futureInterface, QProcess *testApplication, const QString &buildDirectory, - const QString &projectFile, OutputMode mode) + const QString &projectFile, OutputMode mode, TestType type) : TestOutputReader(futureInterface, testApplication, buildDirectory) , m_executable(testApplication ? testApplication->program() : QString()) , m_projectFile(projectFile) , m_mode(mode) + , m_testType(type) { } @@ -417,7 +418,7 @@ void QtTestOutputReader::processSummaryFinishOutput() QtTestResult *QtTestOutputReader::createDefaultResult() const { - QtTestResult *result = new QtTestResult(m_executable, m_projectFile, m_className); + QtTestResult *result = new QtTestResult(m_executable, m_projectFile, m_testType, m_className); result->setFunctionName(m_testCase); result->setDataTag(m_dataTag); return result; @@ -444,7 +445,7 @@ void QtTestOutputReader::sendCompleteInformation() void QtTestOutputReader::sendMessageCurrentTest() { - TestResultPtr testResult = TestResultPtr(new QtTestResult(m_projectFile)); + TestResultPtr testResult = TestResultPtr(new QtTestResult(m_projectFile, m_testType)); testResult->setResult(Result::MessageCurrentTest); testResult->setDescription(tr("Entering test function %1::%2").arg(m_className, m_testCase)); reportResult(testResult); diff --git a/src/plugins/autotest/qtest/qttestoutputreader.h b/src/plugins/autotest/qtest/qttestoutputreader.h index f5aafc467d..dd767b4370 100644 --- a/src/plugins/autotest/qtest/qttestoutputreader.h +++ b/src/plugins/autotest/qtest/qttestoutputreader.h @@ -25,6 +25,7 @@ #pragma once +#include "qttestconstants.h" #include "../testoutputreader.h" #include <QCoreApplication> @@ -48,7 +49,7 @@ public: QtTestOutputReader(const QFutureInterface<TestResultPtr> &futureInterface, QProcess *testApplication, const QString &buildDirectory, - const QString &projectFile, OutputMode mode); + const QString &projectFile, OutputMode mode, TestType type); protected: void processOutput(const QByteArray &outputLine) override; @@ -91,6 +92,7 @@ private: QString m_duration; QXmlStreamReader m_xmlReader; OutputMode m_mode = XML; + TestType m_testType = TestType::QtTest; }; diff --git a/src/plugins/autotest/qtest/qttestresult.cpp b/src/plugins/autotest/qtest/qttestresult.cpp index 64d29f08fa..39e62faa3d 100644 --- a/src/plugins/autotest/qtest/qttestresult.cpp +++ b/src/plugins/autotest/qtest/qttestresult.cpp @@ -24,21 +24,24 @@ ****************************************************************************/ #include "qttestresult.h" -#include "../testtreemodel.h" +#include "../testframeworkmanager.h" +#include "../testtreeitem.h" +#include "../quick/quicktestframework.h" // FIXME BAD! - but avoids declaring QuickTestResult +#include <coreplugin/id.h> #include <utils/qtcassert.h> namespace Autotest { namespace Internal { -QtTestResult::QtTestResult(const QString &projectFile, const QString &className) - : TestResult(className), m_projectFile(projectFile) +QtTestResult::QtTestResult(const QString &projectFile, TestType type, const QString &className) + : TestResult(className), m_projectFile(projectFile), m_type(type) { } -QtTestResult::QtTestResult(const QString &executable, const QString &projectFile, +QtTestResult::QtTestResult(const QString &executable, const QString &projectFile, TestType type, const QString &className) - : TestResult(executable, className), m_projectFile(projectFile) + : TestResult(executable, className), m_projectFile(projectFile), m_type(type) { } @@ -116,7 +119,8 @@ TestResult *QtTestResult::createIntermediateResultFor(const TestResult *other) { QTC_ASSERT(other, return nullptr); const QtTestResult *qtOther = static_cast<const QtTestResult *>(other); - QtTestResult *intermediate = new QtTestResult(qtOther->executable(), qtOther->m_projectFile, qtOther->name()); + QtTestResult *intermediate = new QtTestResult(qtOther->executable(), qtOther->m_projectFile, + m_type, qtOther->name()); intermediate->m_function = qtOther->m_function; intermediate->m_dataTag = qtOther->m_dataTag; // intermediates will be needed only for data tags @@ -131,9 +135,17 @@ TestResult *QtTestResult::createIntermediateResultFor(const TestResult *other) const TestTreeItem *QtTestResult::findTestTreeItem() const { - const auto item = TestTreeModel::instance()->findNonRootItem([this](const Utils::TreeItem *item) { + Core::Id id; + if (m_type == TestType::QtTest) + id = Core::Id(Constants::FRAMEWORK_PREFIX).withSuffix(QtTest::Constants::FRAMEWORK_NAME); + else + id = Core::Id(Constants::FRAMEWORK_PREFIX).withSuffix(QuickTest::Constants::FRAMEWORK_NAME); + const TestTreeItem *rootNode = TestFrameworkManager::instance()->rootNodeForTestFramework(id); + QTC_ASSERT(rootNode, return nullptr); + + const auto item = rootNode->findAnyChild([this](const Utils::TreeItem *item) { const TestTreeItem *treeItem = static_cast<const TestTreeItem *>(item); - return matches(treeItem); + return treeItem && matches(treeItem); }); return static_cast<const TestTreeItem *>(item); } @@ -187,10 +199,9 @@ bool QtTestResult::matchesTestFunction(const TestTreeItem *item) const { TestTreeItem *parentItem = item->parentItem(); TestTreeItem::Type type = item->type(); - if (m_function.contains("::")) { // Quick tests have slightly different layout // BAD/WRONG! + if (m_type == TestType::QuickTest) { // Quick tests have slightly different layout // BAD/WRONG! const QStringList tmp = m_function.split("::"); - QTC_ASSERT(tmp.size() == 2, return false); - return item->name() == tmp.last() && parentItem->name() == tmp.first(); + return tmp.size() == 2 && item->name() == tmp.last() && parentItem->name() == tmp.first(); } if (type == TestTreeItem::TestDataTag) { TestTreeItem *grandParentItem = parentItem->parentItem(); diff --git a/src/plugins/autotest/qtest/qttestresult.h b/src/plugins/autotest/qtest/qttestresult.h index f26de9a621..04b4e00d20 100644 --- a/src/plugins/autotest/qtest/qttestresult.h +++ b/src/plugins/autotest/qtest/qttestresult.h @@ -26,6 +26,7 @@ #pragma once #include "../testresult.h" +#include "qttestconstants.h" namespace Autotest { namespace Internal { @@ -33,8 +34,9 @@ namespace Internal { class QtTestResult : public TestResult { public: - explicit QtTestResult(const QString &projectFile, const QString &className = QString()); - QtTestResult(const QString &executable, const QString &projectFile, const QString &className); + QtTestResult(const QString &projectFile, TestType type, const QString &className = QString()); + QtTestResult(const QString &executable, const QString &projectFile, TestType type, + const QString &className); const QString outputString(bool selected) const override; void setFunctionName(const QString &functionName) { m_function = functionName; } @@ -56,6 +58,7 @@ private: QString m_function; QString m_dataTag; QString m_projectFile; + TestType m_type; }; } // namespace Internal diff --git a/src/plugins/autotest/quick/quicktestconfiguration.cpp b/src/plugins/autotest/quick/quicktestconfiguration.cpp index 6875207bf7..43bfe560b6 100644 --- a/src/plugins/autotest/quick/quicktestconfiguration.cpp +++ b/src/plugins/autotest/quick/quicktestconfiguration.cpp @@ -49,10 +49,13 @@ TestOutputReader *QuickTestConfiguration::outputReader(const QFutureInterface<Te auto qtSettings = qSharedPointerCast<QtTestSettings>(manager->settingsForTestFramework(id)); if (qtSettings.isNull()) return nullptr; - if (qtSettings->useXMLOutput) - return new QtTestOutputReader(fi, app, buildDirectory(), projectFile(), QtTestOutputReader::XML); - else - return new QtTestOutputReader(fi, app, buildDirectory(), projectFile(), QtTestOutputReader::PlainText); + if (qtSettings->useXMLOutput) { + return new QtTestOutputReader(fi, app, buildDirectory(), projectFile(), + QtTestOutputReader::XML, TestType::QuickTest); + } else { + return new QtTestOutputReader(fi, app, buildDirectory(), projectFile(), + QtTestOutputReader::PlainText, TestType::QuickTest); + } } QStringList QuickTestConfiguration::argumentsForTestRunner(QStringList *omitted) const diff --git a/src/plugins/autotest/quick/quicktestframework.cpp b/src/plugins/autotest/quick/quicktestframework.cpp index ef5423bb6f..81642ae6fd 100644 --- a/src/plugins/autotest/quick/quicktestframework.cpp +++ b/src/plugins/autotest/quick/quicktestframework.cpp @@ -43,7 +43,7 @@ TestTreeItem *QuickTestFramework::createRootNode() const const char *QuickTestFramework::name() const { - return "QtQuickTest"; + return QuickTest::Constants::FRAMEWORK_NAME; } unsigned QuickTestFramework::priority() const diff --git a/src/plugins/autotest/quick/quicktestframework.h b/src/plugins/autotest/quick/quicktestframework.h index 5ee66141e4..80befb53d1 100644 --- a/src/plugins/autotest/quick/quicktestframework.h +++ b/src/plugins/autotest/quick/quicktestframework.h @@ -28,6 +28,14 @@ #include "../itestframework.h" namespace Autotest { +namespace QuickTest { +namespace Constants { + +const char FRAMEWORK_NAME[] = "QtQuickTest"; + +} // namespace Constants +} // namespace QuickTest + namespace Internal { class QuickTestFramework : public ITestFramework |