testlib: Pass on log message context to loggers

Change-Id: I1e0bb09d4f96b45f1e9757ea25ae3aba1ae42447
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Tor Arne Vestbø 2018-02-09 15:14:41 +01:00
parent 9395f35cb1
commit 2acfc48de5
5 changed files with 47 additions and 20 deletions

View File

@ -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
{

View File

@ -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;

View File

@ -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)
{

View File

@ -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;

View File

@ -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;
}
}
}