testlib: Pass on log message context to loggers
Change-Id: I1e0bb09d4f96b45f1e9757ea25ae3aba1ae42447 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
9395f35cb1
commit
2acfc48de5
@ -41,6 +41,7 @@
|
||||
#include <QtTest/qtestassert.h>
|
||||
|
||||
#include <QtCore/qbytearray.h>
|
||||
#include <QtCore/qstring.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@ -121,6 +122,29 @@ void QAbstractTestLogger::stopLogging()
|
||||
{
|
||||
}
|
||||
|
||||
void QAbstractTestLogger::addMessage(QtMsgType type, const QMessageLogContext &context,
|
||||
const QString &message)
|
||||
{
|
||||
QAbstractTestLogger::MessageTypes messageType = [=]() {
|
||||
switch (type) {
|
||||
case QtDebugMsg: return QAbstractTestLogger::QDebug;
|
||||
case QtInfoMsg: return QAbstractTestLogger::QInfo;
|
||||
case QtCriticalMsg: return QAbstractTestLogger::QSystem;
|
||||
case QtWarningMsg: return QAbstractTestLogger::QWarning;
|
||||
case QtFatalMsg: return QAbstractTestLogger::QFatal;
|
||||
}
|
||||
Q_UNREACHABLE();
|
||||
return QAbstractTestLogger::QFatal;
|
||||
}();
|
||||
|
||||
QString formattedMessage = qFormatLogMessage(type, context, message);
|
||||
|
||||
// Note that we explicitly ignore the file and line of the context here,
|
||||
// as that's what QTest::messageHandler used to do when calling the same
|
||||
// overload directly.
|
||||
addMessage(messageType, formattedMessage);
|
||||
}
|
||||
|
||||
namespace QTest
|
||||
{
|
||||
|
||||
|
@ -95,6 +95,9 @@ public:
|
||||
const char *file = 0, int line = 0) = 0;
|
||||
virtual void addBenchmarkResult(const QBenchmarkResult &result) = 0;
|
||||
|
||||
virtual void addMessage(QtMsgType, const QMessageLogContext &,
|
||||
const QString &);
|
||||
|
||||
virtual void addMessage(MessageTypes type, const QString &message,
|
||||
const char *file = 0, int line = 0) = 0;
|
||||
|
||||
|
@ -399,6 +399,11 @@ void QPlainTestLogger::addBenchmarkResult(const QBenchmarkResult &result)
|
||||
printBenchmarkResult(result);
|
||||
}
|
||||
|
||||
void QPlainTestLogger::addMessage(QtMsgType type, const QMessageLogContext &context, const QString &message)
|
||||
{
|
||||
QAbstractTestLogger::addMessage(type, context, message);
|
||||
}
|
||||
|
||||
void QPlainTestLogger::addMessage(MessageTypes type, const QString &message,
|
||||
const char *file, int line)
|
||||
{
|
||||
|
@ -71,6 +71,9 @@ public:
|
||||
const char *file = 0, int line = 0) override;
|
||||
void addBenchmarkResult(const QBenchmarkResult &result) override;
|
||||
|
||||
void addMessage(QtMsgType, const QMessageLogContext &,
|
||||
const QString &) override;
|
||||
|
||||
void addMessage(MessageTypes type, const QString &message,
|
||||
const char *file = 0, int line = 0) override;
|
||||
|
||||
|
@ -220,6 +220,12 @@ namespace QTest {
|
||||
FOREACH_LOGGER(logger->addBenchmarkResult(result));
|
||||
}
|
||||
|
||||
static void addMessage(QtMsgType type, const QMessageLogContext &context,
|
||||
const QString &message)
|
||||
{
|
||||
FOREACH_LOGGER(logger->addMessage(type, context, message));
|
||||
}
|
||||
|
||||
static void addMessage(QAbstractTestLogger::MessageTypes type, const QString &message,
|
||||
const char *file = 0, int line = 0)
|
||||
{
|
||||
@ -289,11 +295,10 @@ namespace QTest {
|
||||
QTEST_ASSERT(QTest::TestLoggers::loggerCount() != 0);
|
||||
}
|
||||
|
||||
if (handleIgnoredMessage(type, message))
|
||||
if (handleIgnoredMessage(type, message)) {
|
||||
// the message is expected, so just swallow it.
|
||||
return;
|
||||
|
||||
QString msg = qFormatLogMessage(type, context, message);
|
||||
}
|
||||
|
||||
if (type != QtFatalMsg) {
|
||||
if (counter.load() <= 0)
|
||||
@ -306,22 +311,10 @@ namespace QTest {
|
||||
}
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case QtDebugMsg:
|
||||
QTest::TestLoggers::addMessage(QAbstractTestLogger::QDebug, msg);
|
||||
break;
|
||||
case QtInfoMsg:
|
||||
QTest::TestLoggers::addMessage(QAbstractTestLogger::QInfo, msg);
|
||||
break;
|
||||
case QtCriticalMsg:
|
||||
QTest::TestLoggers::addMessage(QAbstractTestLogger::QSystem, msg);
|
||||
break;
|
||||
case QtWarningMsg:
|
||||
QTest::TestLoggers::addMessage(QAbstractTestLogger::QWarning, msg);
|
||||
break;
|
||||
case QtFatalMsg:
|
||||
QTest::TestLoggers::addMessage(QAbstractTestLogger::QFatal, msg);
|
||||
/* Right now, we're inside the custom message handler and we're
|
||||
QTest::TestLoggers::addMessage(type, context, message);
|
||||
|
||||
if (type == QtFatalMsg) {
|
||||
/* Right now, we're inside the custom message handler and we're
|
||||
* being qt_message_output in qglobal.cpp. After we return from
|
||||
* this function, it will proceed with calling exit() and abort()
|
||||
* and hence crash. Therefore, we call these logging functions such
|
||||
@ -329,7 +322,6 @@ namespace QTest {
|
||||
QTestResult::addFailure("Received a fatal error.", "Unknown file", 0);
|
||||
QTestLog::leaveTestFunction();
|
||||
QTestLog::stopLogging();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user