8#if defined(QT_USE_APPLE_UNIFIED_LOGGING)
10using namespace QTestPrivate;
13
14
15
16
17
18
20bool QAppleTestLogger::debugLoggingEnabled()
25 return os_log_type_enabled(OS_LOG_DEFAULT, OS_LOG_TYPE_DEBUG);
28QAppleTestLogger::QAppleTestLogger()
29 : QAbstractTestLogger(
nullptr)
33static QAppleLogActivity testFunctionActivity;
35void QAppleTestLogger::enterTestFunction(
const char *function)
40 testFunctionActivity = QT_APPLE_LOG_ACTIVITY(
"Running test function").enter();
42 QTestCharBuffer testIdentifier;
43 QTestPrivate::generateTestIdentifier(&testIdentifier);
44 QString identifier = QString::fromLatin1(testIdentifier.data());
45 QMessageLogContext context(
nullptr, 0,
nullptr,
"qt.test.enter");
46 QString message = identifier;
48 AppleUnifiedLogger::messageHandler(QtDebugMsg, context, message, identifier);
51void QAppleTestLogger::leaveTestFunction()
53 testFunctionActivity.leave();
58 QtMsgType messageType = QtFatalMsg;
59 const char *categorySuffix =
nullptr;
61 void generateCategory(QTestCharBuffer *category)
64 QTest::qt_asprintf(category,
"qt.test.%s", categorySuffix);
66 QTest::qt_asprintf(category,
"qt.test");
71void QAppleTestLogger::addIncident(IncidentTypes type,
const char *description,
72 const char *file,
int line)
74 MessageData messageData = [=]() {
76 case QAbstractTestLogger::Skip:
77 return MessageData{QtInfoMsg,
"skip"};
78 case QAbstractTestLogger::Pass:
79 return MessageData{QtInfoMsg,
"pass"};
80 case QAbstractTestLogger::XFail:
81 return MessageData{QtInfoMsg,
"xfail"};
82 case QAbstractTestLogger::Fail:
83 return MessageData{QtCriticalMsg,
"fail"};
84 case QAbstractTestLogger::XPass:
85 return MessageData{QtInfoMsg,
"xpass"};
86 case QAbstractTestLogger::BlacklistedPass:
87 return MessageData{QtWarningMsg,
"bpass"};
88 case QAbstractTestLogger::BlacklistedFail:
89 return MessageData{QtInfoMsg,
"bfail"};
90 case QAbstractTestLogger::BlacklistedXPass:
91 return MessageData{QtWarningMsg,
"bxpass"};
92 case QAbstractTestLogger::BlacklistedXFail:
93 return MessageData{QtInfoMsg,
"bxfail"};
98 QTestCharBuffer category;
99 messageData.generateCategory(&category);
101 QMessageLogContext context(file, line,
nullptr, category.data());
103 QString message = testIdentifier();
104 if (qstrlen(description))
105 message += u'\n' % QString::fromLatin1(description);
109 if (context.line && context.file) {
110 QTestCharBuffer line;
111 QTest::qt_asprintf(&line,
"\n [Loc: %s:%d]", context.file, context.line);
112 message += QLatin1String(line.data());
115 AppleUnifiedLogger::messageHandler(messageData.messageType, context, message, subsystem());
118void QAppleTestLogger::addMessage(QtMsgType type,
const QMessageLogContext &context,
const QString &message)
120 AppleUnifiedLogger::messageHandler(type, context, message);
123void QAppleTestLogger::addMessage(MessageTypes type,
const QString &message,
const char *file,
int line)
125 MessageData messageData = [=]() {
127 case QAbstractTestLogger::Warn:
128 case QAbstractTestLogger::QWarning:
129 return MessageData{QtWarningMsg,
nullptr};
130 case QAbstractTestLogger::QDebug:
131 return MessageData{QtDebugMsg,
nullptr};
132 case QAbstractTestLogger::QCritical:
133 return MessageData{QtWarningMsg,
"critical"};
134 case QAbstractTestLogger::QFatal:
135 return MessageData{QtFatalMsg,
nullptr};
136 case QAbstractTestLogger::Info:
137 case QAbstractTestLogger::QInfo:
138 return MessageData{QtInfoMsg,
nullptr};
143 QTestCharBuffer category;
144 messageData.generateCategory(&category);
146 QMessageLogContext context(file, line,
nullptr, category.data());
148 AppleUnifiedLogger::messageHandler(messageData.messageType, context, message, subsystem());
151QString QAppleTestLogger::subsystem()
const
153 QTestCharBuffer buffer;
158 generateTestIdentifier(&buffer, TestObject | TestFunction);
159 return QString::fromLatin1(buffer.data());
162QString QAppleTestLogger::testIdentifier()
const
164 QTestCharBuffer buffer;
165 generateTestIdentifier(&buffer);
166 return QString::fromLatin1(buffer.data());