forked from qt-creator/qt-creator
Add summary to results pane
This commit is contained in:
committed by
Christian Stenger
parent
8e4181c3af
commit
9394a43128
@@ -108,6 +108,8 @@ void TestResultModel::addTestResult(const TestResult &testResult)
|
|||||||
{
|
{
|
||||||
beginInsertRows(QModelIndex(), m_testResults.size(), m_testResults.size());
|
beginInsertRows(QModelIndex(), m_testResults.size(), m_testResults.size());
|
||||||
m_testResults.append(testResult);
|
m_testResults.append(testResult);
|
||||||
|
int count = m_testResultCount.value(testResult.result(), 0);
|
||||||
|
m_testResultCount.insert(testResult.result(), ++count);
|
||||||
endInsertRows();
|
endInsertRows();
|
||||||
m_availableResultTypes.insert(testResult.result());
|
m_availableResultTypes.insert(testResult.result());
|
||||||
}
|
}
|
||||||
@@ -118,6 +120,7 @@ void TestResultModel::clearTestResults()
|
|||||||
return;
|
return;
|
||||||
beginRemoveRows(QModelIndex(), 0, m_testResults.size() - 1);
|
beginRemoveRows(QModelIndex(), 0, m_testResults.size() - 1);
|
||||||
m_testResults.clear();
|
m_testResults.clear();
|
||||||
|
m_testResultCount.clear();
|
||||||
m_lastMaxWidthIndex = 0;
|
m_lastMaxWidthIndex = 0;
|
||||||
m_maxWidthOfFileName = 0;
|
m_maxWidthOfFileName = 0;
|
||||||
m_widthOfLineNumber = 0;
|
m_widthOfLineNumber = 0;
|
||||||
@@ -165,6 +168,11 @@ int TestResultModel::maxWidthOfLineNumber(const QFont &font)
|
|||||||
return m_widthOfLineNumber;
|
return m_widthOfLineNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int TestResultModel::resultTypeCount(ResultType type)
|
||||||
|
{
|
||||||
|
return m_testResultCount.value(type, 0);
|
||||||
|
}
|
||||||
|
|
||||||
/********************************** Filter Model **********************************/
|
/********************************** Filter Model **********************************/
|
||||||
|
|
||||||
TestResultFilterModel::TestResultFilterModel(TestResultModel *sourceModel, QObject *parent)
|
TestResultFilterModel::TestResultFilterModel(TestResultModel *sourceModel, QObject *parent)
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ public:
|
|||||||
void enableAllResultTypes();
|
void enableAllResultTypes();
|
||||||
void toggleTestResultType(ResultType type);
|
void toggleTestResultType(ResultType type);
|
||||||
bool hasResultType(ResultType type) { return m_availableResultTypes.contains(type); }
|
bool hasResultType(ResultType type) { return m_availableResultTypes.contains(type); }
|
||||||
|
int resultTypeCount(ResultType type);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
@@ -60,6 +61,7 @@ public slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QList<TestResult> m_testResults;
|
QList<TestResult> m_testResults;
|
||||||
|
QMap<ResultType, int> m_testResultCount;
|
||||||
int m_widthOfLineNumber;
|
int m_widthOfLineNumber;
|
||||||
int m_maxWidthOfFileName;
|
int m_maxWidthOfFileName;
|
||||||
int m_lastMaxWidthIndex;
|
int m_lastMaxWidthIndex;
|
||||||
|
|||||||
@@ -28,9 +28,12 @@
|
|||||||
#include <texteditor/texteditor.h>
|
#include <texteditor/texteditor.h>
|
||||||
|
|
||||||
#include <utils/itemviews.h>
|
#include <utils/itemviews.h>
|
||||||
|
#include <utils/theme/theme.h>
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QHBoxLayout>
|
||||||
#include <QToolButton>
|
#include <QToolButton>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
namespace Autotest {
|
namespace Autotest {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -39,7 +42,31 @@ TestResultsPane::TestResultsPane(QObject *parent) :
|
|||||||
Core::IOutputPane(parent),
|
Core::IOutputPane(parent),
|
||||||
m_context(new Core::IContext(this))
|
m_context(new Core::IContext(this))
|
||||||
{
|
{
|
||||||
m_listView = new Utils::ListView;
|
m_outputWidget = new QWidget;
|
||||||
|
QVBoxLayout *outputLayout = new QVBoxLayout;
|
||||||
|
outputLayout->setMargin(0);
|
||||||
|
outputLayout->setSpacing(0);
|
||||||
|
m_outputWidget->setLayout(outputLayout);
|
||||||
|
|
||||||
|
QPalette pal;
|
||||||
|
pal.setColor(QPalette::Window,
|
||||||
|
Utils::creatorTheme()->color(Utils::Theme::SearchResultWidgetBackgroundColor));
|
||||||
|
pal.setColor(QPalette::WindowText,
|
||||||
|
Utils::creatorTheme()->color(Utils::Theme::SearchResultWidgetTextColor));
|
||||||
|
m_summaryWidget = new QFrame;
|
||||||
|
m_summaryWidget->setPalette(pal);
|
||||||
|
m_summaryWidget->setAutoFillBackground(true);
|
||||||
|
QHBoxLayout *layout = new QHBoxLayout;
|
||||||
|
layout->setMargin(6);
|
||||||
|
m_summaryWidget->setLayout(layout);
|
||||||
|
m_summaryLabel = new QLabel;
|
||||||
|
m_summaryLabel->setPalette(pal);
|
||||||
|
layout->addWidget(m_summaryLabel);
|
||||||
|
m_summaryWidget->setVisible(false);
|
||||||
|
|
||||||
|
outputLayout->addWidget(m_summaryWidget);
|
||||||
|
|
||||||
|
m_listView = new Utils::ListView(m_outputWidget);
|
||||||
m_model = new TestResultModel(this);
|
m_model = new TestResultModel(this);
|
||||||
m_filterModel = new TestResultFilterModel(m_model, this);
|
m_filterModel = new TestResultFilterModel(m_model, this);
|
||||||
m_filterModel->setDynamicSortFilter(true);
|
m_filterModel->setDynamicSortFilter(true);
|
||||||
@@ -47,6 +74,8 @@ TestResultsPane::TestResultsPane(QObject *parent) :
|
|||||||
TestResultDelegate *trd = new TestResultDelegate(this);
|
TestResultDelegate *trd = new TestResultDelegate(this);
|
||||||
m_listView->setItemDelegate(trd);
|
m_listView->setItemDelegate(trd);
|
||||||
|
|
||||||
|
outputLayout->addWidget(m_listView);
|
||||||
|
|
||||||
createToolButtons();
|
createToolButtons();
|
||||||
|
|
||||||
connect(m_listView, &Utils::ListView::activated, this, &TestResultsPane::onItemActivated);
|
connect(m_listView, &Utils::ListView::activated, this, &TestResultsPane::onItemActivated);
|
||||||
@@ -117,12 +146,12 @@ void TestResultsPane::addTestResult(const TestResult &result)
|
|||||||
|
|
||||||
QWidget *TestResultsPane::outputWidget(QWidget *parent)
|
QWidget *TestResultsPane::outputWidget(QWidget *parent)
|
||||||
{
|
{
|
||||||
if (m_listView) {
|
if (m_outputWidget) {
|
||||||
m_listView->setParent(parent);
|
m_outputWidget->setParent(parent);
|
||||||
} else {
|
} else {
|
||||||
m_listView = new Utils::ListView(parent);
|
qDebug() << "This should not happen...";
|
||||||
}
|
}
|
||||||
return m_listView;
|
return m_outputWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QWidget *> TestResultsPane::toolBarWidgets() const
|
QList<QWidget *> TestResultsPane::toolBarWidgets() const
|
||||||
@@ -144,6 +173,7 @@ void TestResultsPane::clearContents()
|
|||||||
{
|
{
|
||||||
m_filterModel->clearTestResults();
|
m_filterModel->clearTestResults();
|
||||||
navigateStateChanged();
|
navigateStateChanged();
|
||||||
|
m_summaryWidget->setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestResultsPane::visibilityChanged(bool)
|
void TestResultsPane::visibilityChanged(bool)
|
||||||
@@ -242,14 +272,14 @@ void TestResultsPane::onRunSelectedTriggered()
|
|||||||
void TestResultsPane::initializeFilterMenu()
|
void TestResultsPane::initializeFilterMenu()
|
||||||
{
|
{
|
||||||
QMap<ResultType, QString> textAndType;
|
QMap<ResultType, QString> textAndType;
|
||||||
textAndType.insert(ResultType::PASS, QLatin1String("Pass"));
|
textAndType.insert(ResultType::PASS, tr("Pass"));
|
||||||
textAndType.insert(ResultType::FAIL, QLatin1String("Fail"));
|
textAndType.insert(ResultType::FAIL, tr("Fail"));
|
||||||
textAndType.insert(ResultType::EXPECTED_FAIL, QLatin1String("Expected Fail"));
|
textAndType.insert(ResultType::EXPECTED_FAIL, tr("Expected Fail"));
|
||||||
textAndType.insert(ResultType::UNEXPECTED_PASS, QLatin1String("Unexpected Pass"));
|
textAndType.insert(ResultType::UNEXPECTED_PASS, tr("Unexpected Pass"));
|
||||||
textAndType.insert(ResultType::SKIP, QLatin1String("Skip"));
|
textAndType.insert(ResultType::SKIP, tr("Skip"));
|
||||||
textAndType.insert(ResultType::MESSAGE_DEBUG, QLatin1String("Debug Messages"));
|
textAndType.insert(ResultType::MESSAGE_DEBUG, tr("Debug Messages"));
|
||||||
textAndType.insert(ResultType::MESSAGE_WARN, QLatin1String("Warning Messages"));
|
textAndType.insert(ResultType::MESSAGE_WARN, tr("Warning Messages"));
|
||||||
textAndType.insert(ResultType::MESSAGE_INTERNAL, QLatin1String("Internal Messages"));
|
textAndType.insert(ResultType::MESSAGE_INTERNAL, tr("Internal Messages"));
|
||||||
foreach (ResultType result, textAndType.keys()) {
|
foreach (ResultType result, textAndType.keys()) {
|
||||||
QAction *action = new QAction(m_filterMenu);
|
QAction *action = new QAction(m_filterMenu);
|
||||||
action->setText(textAndType.value(result));
|
action->setText(textAndType.value(result));
|
||||||
@@ -260,6 +290,23 @@ void TestResultsPane::initializeFilterMenu()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TestResultsPane::updateSummaryLabel()
|
||||||
|
{
|
||||||
|
QString labelText = QString::fromLatin1("<p><b>Test Summary:</b> %1 %2, %3 %4")
|
||||||
|
.arg(QString::number(m_model->resultTypeCount(ResultType::PASS)), tr("passes"),
|
||||||
|
QString::number(m_model->resultTypeCount(ResultType::FAIL)), tr("fails"));
|
||||||
|
int count = m_model->resultTypeCount(ResultType::UNEXPECTED_PASS);
|
||||||
|
if (count)
|
||||||
|
labelText.append(QString::fromLatin1(", %1 %2")
|
||||||
|
.arg(QString::number(count), tr("unexpected passes")));
|
||||||
|
count = m_model->resultTypeCount(ResultType::EXPECTED_FAIL);
|
||||||
|
if (count)
|
||||||
|
labelText.append(QString::fromLatin1(", %1 %2")
|
||||||
|
.arg(QString::number(count), tr("expected fails")));
|
||||||
|
labelText.append(QLatin1String(".</p>"));
|
||||||
|
m_summaryLabel->setText(labelText);
|
||||||
|
}
|
||||||
|
|
||||||
void TestResultsPane::updateFilterMenu()
|
void TestResultsPane::updateFilterMenu()
|
||||||
{
|
{
|
||||||
foreach (QAction *action, m_filterMenu->actions()) {
|
foreach (QAction *action, m_filterMenu->actions()) {
|
||||||
@@ -279,6 +326,7 @@ void TestResultsPane::onTestRunStarted()
|
|||||||
m_stopTestRun->setEnabled(true);
|
m_stopTestRun->setEnabled(true);
|
||||||
m_runAll->setEnabled(false);
|
m_runAll->setEnabled(false);
|
||||||
m_runSelected->setEnabled(false);
|
m_runSelected->setEnabled(false);
|
||||||
|
m_summaryWidget->setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestResultsPane::onTestRunFinished()
|
void TestResultsPane::onTestRunFinished()
|
||||||
@@ -286,6 +334,8 @@ void TestResultsPane::onTestRunFinished()
|
|||||||
m_stopTestRun->setEnabled(false);
|
m_stopTestRun->setEnabled(false);
|
||||||
m_runAll->setEnabled(true);
|
m_runAll->setEnabled(true);
|
||||||
m_runSelected->setEnabled(true);
|
m_runSelected->setEnabled(true);
|
||||||
|
updateSummaryLabel();
|
||||||
|
m_summaryWidget->setVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestResultsPane::onTestTreeModelChanged()
|
void TestResultsPane::onTestTreeModelChanged()
|
||||||
|
|||||||
@@ -23,6 +23,8 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QAction;
|
class QAction;
|
||||||
|
class QFrame;
|
||||||
|
class QLabel;
|
||||||
class QModelIndex;
|
class QModelIndex;
|
||||||
class QMenu;
|
class QMenu;
|
||||||
class QToolButton;
|
class QToolButton;
|
||||||
@@ -82,11 +84,15 @@ private slots:
|
|||||||
private:
|
private:
|
||||||
explicit TestResultsPane(QObject *parent = 0);
|
explicit TestResultsPane(QObject *parent = 0);
|
||||||
void initializeFilterMenu();
|
void initializeFilterMenu();
|
||||||
|
void updateSummaryLabel();
|
||||||
void createToolButtons();
|
void createToolButtons();
|
||||||
void onTestRunStarted();
|
void onTestRunStarted();
|
||||||
void onTestRunFinished();
|
void onTestRunFinished();
|
||||||
void onTestTreeModelChanged();
|
void onTestTreeModelChanged();
|
||||||
|
|
||||||
|
QWidget *m_outputWidget;
|
||||||
|
QFrame *m_summaryWidget;
|
||||||
|
QLabel *m_summaryLabel;
|
||||||
Utils::ListView *m_listView;
|
Utils::ListView *m_listView;
|
||||||
TestResultModel *m_model;
|
TestResultModel *m_model;
|
||||||
TestResultFilterModel *m_filterModel;
|
TestResultFilterModel *m_filterModel;
|
||||||
|
|||||||
Reference in New Issue
Block a user