forked from qt-creator/qt-creator
Broke withd05c5b7d07. The id is used to identify the application running a test or a global message like some warnings or the information regarding the current running test. Fixes its usage and its display inside the results pane. In the amended patch the assumption that if the m_id is empty it corresponds to nullptr TestResultPtr was apparently wrong. This patch fixes it so that the default c'tor of TestResult always creates an invalid result, so that it corresponds now to nullptr TestResultPtr. Amendsd05c5b7d07Change-Id: I9949aec3fc2b7354de149433b7127933f2d9bf21 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Christian Stenger <christian.stenger@qt.io>
124 lines
3.8 KiB
C++
124 lines
3.8 KiB
C++
// Copyright (C) 2016 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
|
|
|
#pragma once
|
|
|
|
#include "autotestconstants.h"
|
|
|
|
#include <utils/filepath.h>
|
|
|
|
#include <QColor>
|
|
|
|
#include <optional>
|
|
|
|
namespace Autotest {
|
|
|
|
class ITestTreeItem;
|
|
|
|
enum class ResultType {
|
|
// result types (have icon, color, short text)
|
|
Pass, FIRST_TYPE = Pass,
|
|
Fail,
|
|
ExpectedFail,
|
|
UnexpectedPass,
|
|
Skip,
|
|
BlacklistedPass,
|
|
BlacklistedFail,
|
|
BlacklistedXPass,
|
|
BlacklistedXFail,
|
|
|
|
// special (message) types (have icon, color, short text)
|
|
Benchmark,
|
|
MessageDebug,
|
|
MessageInfo,
|
|
MessageWarn,
|
|
MessageFatal,
|
|
MessageSystem,
|
|
MessageError,
|
|
|
|
// special message - get's icon (but no color/short text) from parent
|
|
MessageLocation,
|
|
// anything below is an internal message (or a pure message without icon)
|
|
MessageInternal, INTERNAL_MESSAGES_BEGIN = MessageInternal,
|
|
// start item (get icon/short text depending on children)
|
|
TestStart,
|
|
// usually no icon/short text - more or less an indicator (and can contain test duration)
|
|
TestEnd,
|
|
// special global (temporary) message
|
|
MessageCurrentTest, INTERNAL_MESSAGES_END = MessageCurrentTest,
|
|
|
|
Application, // special.. not to be used outside of testresultmodel
|
|
Invalid, // indicator for unknown result items
|
|
LAST_TYPE = Invalid
|
|
};
|
|
|
|
inline auto qHash(const ResultType &result)
|
|
{
|
|
return QT_PREPEND_NAMESPACE(qHash(int(result)));
|
|
}
|
|
|
|
class TestResult;
|
|
|
|
struct ResultHooks
|
|
{
|
|
using OutputStringHook = std::function<QString(const TestResult &, bool)>;
|
|
using FindTestItemHook = std::function<ITestTreeItem *(const TestResult &)>;
|
|
using DirectParentHook = std::function<bool(const TestResult &, const TestResult &, bool *)>;
|
|
using IntermediateHook = std::function<bool(const TestResult &, const TestResult &)>;
|
|
using CreateResultHook = std::function<TestResult(const TestResult &)>;
|
|
QVariant extraData;
|
|
OutputStringHook outputString = {};
|
|
FindTestItemHook findTestItem = {};
|
|
DirectParentHook directParent = {};
|
|
IntermediateHook intermediate = {};
|
|
CreateResultHook createResult = {};
|
|
};
|
|
|
|
class TestResult
|
|
{
|
|
public:
|
|
TestResult() = default;
|
|
TestResult(const QString &id, const QString &name, const ResultHooks &hooks = {});
|
|
virtual ~TestResult() {}
|
|
|
|
bool isValid() const;
|
|
const QString outputString(bool selected) const;
|
|
const ITestTreeItem *findTestTreeItem() const;
|
|
|
|
QString id() const { return m_id.value_or(QString()); }
|
|
QString name() const { return m_name; }
|
|
ResultType result() const { return m_result; }
|
|
QString description() const { return m_description; }
|
|
Utils::FilePath fileName() const { return m_file; }
|
|
int line() const { return m_line; }
|
|
QVariant extraData() const { return m_hooks.extraData; }
|
|
|
|
void setDescription(const QString &description) { m_description = description; }
|
|
void setFileName(const Utils::FilePath &fileName) { m_file = fileName; }
|
|
void setLine(int line) { m_line = line; }
|
|
void setResult(ResultType type) { m_result = type; }
|
|
|
|
static ResultType resultFromString(const QString &resultString);
|
|
static ResultType toResultType(int rt);
|
|
static QString resultToString(const ResultType type);
|
|
static QColor colorForType(const ResultType type);
|
|
|
|
bool isDirectParentOf(const TestResult &other, bool *needsIntermediate) const;
|
|
bool isIntermediateFor(const TestResult &other) const;
|
|
TestResult intermediateResult() const;
|
|
|
|
private:
|
|
std::optional<QString> m_id = {};
|
|
QString m_name;
|
|
ResultType m_result = ResultType::Invalid; // the real result..
|
|
QString m_description;
|
|
Utils::FilePath m_file;
|
|
int m_line = 0;
|
|
ResultHooks m_hooks = {};
|
|
};
|
|
|
|
} // namespace Autotest
|
|
|
|
Q_DECLARE_METATYPE(Autotest::TestResult)
|
|
Q_DECLARE_METATYPE(Autotest::ResultType)
|