qteamcitylogger.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/testlib/qteamcitylogger.cpp
Source codeSwitch to Preprocessed file
LineSourceCount
1/****************************************************************************-
2**-
3** Copyright (C) 2016 Borgar Ovsthus-
4** Contact: https://www.qt.io/licensing/-
5**-
6** This file is part of the QtTest module of the Qt Toolkit.-
7**-
8** $QT_BEGIN_LICENSE:LGPL$-
9** Commercial License Usage-
10** Licensees holding valid commercial Qt licenses may use this file in-
11** accordance with the commercial license agreement provided with the-
12** Software or, alternatively, in accordance with the terms contained in-
13** a written agreement between you and The Qt Company. For licensing terms-
14** and conditions see https://www.qt.io/terms-conditions. For further-
15** information use the contact form at https://www.qt.io/contact-us.-
16**-
17** GNU Lesser General Public License Usage-
18** Alternatively, this file may be used under the terms of the GNU Lesser-
19** General Public License version 3 as published by the Free Software-
20** Foundation and appearing in the file LICENSE.LGPL3 included in the-
21** packaging of this file. Please review the following information to-
22** ensure the GNU Lesser General Public License version 3 requirements-
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.-
24**-
25** GNU General Public License Usage-
26** Alternatively, this file may be used under the terms of the GNU-
27** General Public License version 2.0 or (at your option) the GNU General-
28** Public license version 3 or any later version approved by the KDE Free-
29** Qt Foundation. The licenses are as published by the Free Software-
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3-
31** included in the packaging of this file. Please review the following-
32** information to ensure the GNU General Public License requirements will-
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and-
34** https://www.gnu.org/licenses/gpl-3.0.html.-
35**-
36** $QT_END_LICENSE$-
37**-
38****************************************************************************/-
39-
40#include <QtTest/private/qtestresult_p.h>-
41#include <QtTest/qtestassert.h>-
42#include <QtTest/private/qtestlog_p.h>-
43#include <QtTest/private/qteamcitylogger_p.h>-
44#include <QtCore/qbytearray.h>-
45#include <stdarg.h>-
46#include <stdio.h>-
47#include <stdlib.h>-
48#include <string.h>-
49-
50QT_BEGIN_NAMESPACE-
51-
52namespace QTest {-
53-
54 static const char *incidentType2String(QAbstractTestLogger::IncidentTypes type)-
55 {-
56 switch (type) {-
57 case QAbstractTestLogger::Pass:
never executed: case QAbstractTestLogger::Pass:
0
58 return "PASS";
never executed: return "PASS";
0
59 case QAbstractTestLogger::XFail:
executed 75 times by 1 test: case QAbstractTestLogger::XFail:
Executed by:
  • tst_selftests - unknown status
75
60 return "XFAIL";
executed 75 times by 1 test: return "XFAIL";
Executed by:
  • tst_selftests - unknown status
75
61 case QAbstractTestLogger::Fail:
never executed: case QAbstractTestLogger::Fail:
0
62 return "FAIL!";
never executed: return "FAIL!";
0
63 case QAbstractTestLogger::XPass:
never executed: case QAbstractTestLogger::XPass:
0
64 return "XPASS";
never executed: return "XPASS";
0
65 case QAbstractTestLogger::BlacklistedPass:
never executed: case QAbstractTestLogger::BlacklistedPass:
0
66 return "BPASS";
never executed: return "BPASS";
0
67 case QAbstractTestLogger::BlacklistedFail:
never executed: case QAbstractTestLogger::BlacklistedFail:
0
68 return "BFAIL";
never executed: return "BFAIL";
0
69 }-
70 return "??????";
never executed: return "??????";
0
71 }-
72-
73 static const char *messageType2String(QAbstractTestLogger::MessageTypes type)-
74 {-
75 switch (type) {-
76 case QAbstractTestLogger::Skip:
never executed: case QAbstractTestLogger::Skip:
0
77 return "SKIP";
never executed: return "SKIP";
0
78 case QAbstractTestLogger::Warn:
executed 10 times by 1 test: case QAbstractTestLogger::Warn:
Executed by:
  • tst_selftests - unknown status
10
79 return "WARNING";
executed 10 times by 1 test: return "WARNING";
Executed by:
  • tst_selftests - unknown status
10
80 case QAbstractTestLogger::QWarning:
executed 10020 times by 1 test: case QAbstractTestLogger::QWarning:
Executed by:
  • tst_selftests - unknown status
10020
81 return "QWARN";
executed 10020 times by 1 test: return "QWARN";
Executed by:
  • tst_selftests - unknown status
10020
82 case QAbstractTestLogger::QDebug:
executed 448 times by 1 test: case QAbstractTestLogger::QDebug:
Executed by:
  • tst_selftests - unknown status
448
83 return "QDEBUG";
executed 448 times by 1 test: return "QDEBUG";
Executed by:
  • tst_selftests - unknown status
448
84 case QAbstractTestLogger::QInfo:
executed 10 times by 1 test: case QAbstractTestLogger::QInfo:
Executed by:
  • tst_selftests - unknown status
10
85 return "QINFO";
executed 10 times by 1 test: return "QINFO";
Executed by:
  • tst_selftests - unknown status
10
86 case QAbstractTestLogger::QSystem:
executed 5 times by 1 test: case QAbstractTestLogger::QSystem:
Executed by:
  • tst_selftests - unknown status
5
87 return "QSYSTEM";
executed 5 times by 1 test: return "QSYSTEM";
Executed by:
  • tst_selftests - unknown status
5
88 case QAbstractTestLogger::QFatal:
executed 10 times by 1 test: case QAbstractTestLogger::QFatal:
Executed by:
  • tst_selftests - unknown status
10
89 return "QFATAL";
executed 10 times by 1 test: return "QFATAL";
Executed by:
  • tst_selftests - unknown status
10
90 case QAbstractTestLogger::Info:
executed 155 times by 1 test: case QAbstractTestLogger::Info:
Executed by:
  • tst_selftests - unknown status
155
91 return "INFO";
executed 155 times by 1 test: return "INFO";
Executed by:
  • tst_selftests - unknown status
155
92 }-
93 return "??????";
never executed: return "??????";
0
94 }-
95}-
96-
97QTeamCityLogger::QTeamCityLogger(const char *filename)-
98 : QAbstractTestLogger(filename)-
99{-
100}
executed 146 times by 1 test: end of block
Executed by:
  • tst_selftests - unknown status
146
101-
102QTeamCityLogger::~QTeamCityLogger()-
103{-
104}-
105-
106void QTeamCityLogger::startLogging()-
107{-
108 QAbstractTestLogger::startLogging();-
109-
110 QString testSuiteName = tcEscapedString(QString::fromUtf8(QTestResult::currentTestObjectName()));-
111-
112 QString str = QString(QLatin1String("##teamcity[testSuiteStarted name='%1']\n")).arg(testSuiteName);-
113 outputString(qPrintable(str));-
114}
executed 146 times by 1 test: end of block
Executed by:
  • tst_selftests - unknown status
146
115-
116void QTeamCityLogger::stopLogging()-
117{-
118 QString testSuiteName = tcEscapedString(QString::fromUtf8(QTestResult::currentTestObjectName()));-
119-
120 QString str = QString(QLatin1String("##teamcity[testSuiteFinished name='%1']\n")).arg(testSuiteName);-
121 outputString(qPrintable(str));-
122-
123 QAbstractTestLogger::stopLogging();-
124}
executed 146 times by 1 test: end of block
Executed by:
  • tst_selftests - unknown status
146
125-
126void QTeamCityLogger::enterTestFunction(const char * /*function*/)-
127{-
128 // don't print anything-
129}-
130-
131void QTeamCityLogger::leaveTestFunction()-
132{-
133 // don't print anything-
134}-
135-
136void QTeamCityLogger::addIncident(IncidentTypes type, const char *description,-
137 const char *file, int line)-
138{-
139 // suppress PASS and XFAIL in silent mode-
140 if ((type == QAbstractTestLogger::Pass || type == QAbstractTestLogger::XFail) && QTestLog::verboseLevel() < 0)
type == QAbstr...stLogger::PassDescription
TRUEevaluated 887 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
FALSEevaluated 611 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
type == QAbstr...tLogger::XFailDescription
TRUEevaluated 75 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
FALSEevaluated 536 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
QTestLog::verboseLevel() < 0Description
TRUEnever evaluated
FALSEevaluated 962 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
0-962
141 return;
never executed: return;
0
142-
143 QString buf;-
144-
145 QString tmpFuncName = escapedTestFuncName();-
146-
147 if (tmpFuncName != currTestFuncName) {
tmpFuncName !=...rrTestFuncNameDescription
TRUEevaluated 1418 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
FALSEevaluated 80 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
80-1418
148 buf = QString(QLatin1String("##teamcity[testStarted name='%1']\n")).arg(tmpFuncName);-
149 outputString(qPrintable(buf));-
150 }
executed 1418 times by 1 test: end of block
Executed by:
  • tst_selftests - unknown status
1418
151-
152 currTestFuncName = tmpFuncName;-
153-
154 if (type == QAbstractTestLogger::XFail) {
type == QAbstr...tLogger::XFailDescription
TRUEevaluated 75 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
FALSEevaluated 1423 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
75-1423
155 addPendingMessage(QTest::incidentType2String(type), QString::fromUtf8(description), file, line);-
156 return;
executed 75 times by 1 test: return;
Executed by:
  • tst_selftests - unknown status
75
157 }-
158-
159 QString detailedText = QString::fromUtf8(description);-
160 detailedText = tcEscapedString(detailedText);-
161-
162 // Test failed-
163 if ((type == QAbstractTestLogger::Fail) || (type == QAbstractTestLogger::XPass)) {
(type == QAbst...tLogger::Fail)Description
TRUEevaluated 516 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
FALSEevaluated 907 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
(type == QAbst...Logger::XPass)Description
TRUEevaluated 20 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
FALSEevaluated 887 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
20-907
164 QString messageText(QLatin1String("Failure!"));-
165-
166 if (file)
fileDescription
TRUEevaluated 502 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
FALSEevaluated 34 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
34-502
167 messageText += QString(QLatin1String(" |[Loc: %1(%2)|]")).arg(QString::fromUtf8(file)).arg(line);
executed 502 times by 1 test: messageText += QString(QLatin1String(" |[Loc: %1(%2)|]")).arg(QString::fromUtf8(file)).arg(line);
Executed by:
  • tst_selftests - unknown status
502
168-
169 buf = QString(QLatin1String("##teamcity[testFailed name='%1' message='%2' details='%3']\n"))-
170 .arg(tmpFuncName)-
171 .arg(messageText)-
172 .arg(detailedText);-
173-
174 outputString(qPrintable(buf));-
175 }
executed 536 times by 1 test: end of block
Executed by:
  • tst_selftests - unknown status
536
176-
177 if (!pendingMessages.isEmpty()) {
!pendingMessages.isEmpty()Description
TRUEevaluated 378 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
FALSEevaluated 1045 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
378-1045
178 buf = QString(QLatin1String("##teamcity[testStdOut name='%1' out='%2']\n"))-
179 .arg(tmpFuncName)-
180 .arg(pendingMessages);-
181-
182 outputString(qPrintable(buf));-
183-
184 pendingMessages.clear();-
185 }
executed 378 times by 1 test: end of block
Executed by:
  • tst_selftests - unknown status
378
186-
187 buf = QString(QLatin1String("##teamcity[testFinished name='%1']\n")).arg(tmpFuncName);-
188 outputString(qPrintable(buf));-
189}
executed 1423 times by 1 test: end of block
Executed by:
  • tst_selftests - unknown status
1423
190-
191void QTeamCityLogger::addBenchmarkResult(const QBenchmarkResult &)-
192{-
193 // don't print anything-
194}-
195-
196void QTeamCityLogger::addMessage(MessageTypes type, const QString &message,-
197 const char *file, int line)-
198{-
199 // suppress non-fatal messages in silent mode-
200 if (type != QAbstractTestLogger::QFatal && QTestLog::verboseLevel() < 0)
type != QAbstr...Logger::QFatalDescription
TRUEevaluated 10833 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
FALSEevaluated 10 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
QTestLog::verboseLevel() < 0Description
TRUEnever evaluated
FALSEevaluated 10833 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
0-10833
201 return;
never executed: return;
0
202-
203 QString escapedMessage = tcEscapedString(message);-
204-
205 QString buf;-
206-
207 if (type == QAbstractTestLogger::Skip) {
type == QAbstr...stLogger::SkipDescription
TRUEevaluated 185 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
FALSEevaluated 10658 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
185-10658
208 if (file)
fileDescription
TRUEevaluated 185 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
FALSEnever evaluated
0-185
209 escapedMessage.append(QString(QLatin1String(" |[Loc: %1(%2)|]")).arg(QString::fromUtf8(file)).arg(line));
executed 185 times by 1 test: escapedMessage.append(QString(QLatin1String(" |[Loc: %1(%2)|]")).arg(QString::fromUtf8(file)).arg(line));
Executed by:
  • tst_selftests - unknown status
185
210-
211 buf = QString(QLatin1String("##teamcity[testIgnored name='%1' message='%2']\n"))-
212 .arg(escapedTestFuncName())-
213 .arg(escapedMessage);-
214-
215 outputString(qPrintable(buf));-
216 }
executed 185 times by 1 test: end of block
Executed by:
  • tst_selftests - unknown status
185
217 else {-
218 addPendingMessage(QTest::messageType2String(type), escapedMessage, file, line);-
219 }
executed 10658 times by 1 test: end of block
Executed by:
  • tst_selftests - unknown status
10658
220}-
221-
222QString QTeamCityLogger::tcEscapedString(const QString &str) const-
223{-
224 QString formattedString;-
225-
226 for (int i = 0; i < str.length(); i++) {
i < str.length()Description
TRUEevaluated 144034 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
FALSEevaluated 14241 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
14241-144034
227 QChar ch = str.at(i);-
228-
229 switch (ch.toLatin1()) {-
230 case '\n':
executed 380 times by 1 test: case '\n':
Executed by:
  • tst_selftests - unknown status
380
231 formattedString.append(QLatin1Literal("|n"));-
232 break;
executed 380 times by 1 test: break;
Executed by:
  • tst_selftests - unknown status
380
233 case '\r':
never executed: case '\r':
0
234 formattedString.append(QLatin1Literal("|r"));-
235 break;
never executed: break;
0
236 case '|':
never executed: case '|':
0
237 formattedString.append(QLatin1Literal("||"));-
238 break;
never executed: break;
0
239 case '[':
executed 10 times by 1 test: case '[':
Executed by:
  • tst_selftests - unknown status
10
240 formattedString.append(QLatin1Literal("|["));-
241 break;
executed 10 times by 1 test: break;
Executed by:
  • tst_selftests - unknown status
10
242 case ']':
executed 130 times by 1 test: case ']':
Executed by:
  • tst_selftests - unknown status
130
243 formattedString.append(QLatin1Literal("|]"));-
244 break;
executed 130 times by 1 test: break;
Executed by:
  • tst_selftests - unknown status
130
245 case '\'':
executed 420 times by 1 test: case '\'':
Executed by:
  • tst_selftests - unknown status
420
246 formattedString.append(QLatin1Literal("|'"));-
247 break;
executed 420 times by 1 test: break;
Executed by:
  • tst_selftests - unknown status
420
248 default:
executed 143094 times by 1 test: default:
Executed by:
  • tst_selftests - unknown status
143094
249 formattedString.append(ch);-
250 }
executed 143094 times by 1 test: end of block
Executed by:
  • tst_selftests - unknown status
143094
251 }-
252-
253 return qMove(formattedString).simplified();
executed 14241 times by 1 test: return std::move(formattedString).simplified();
Executed by:
  • tst_selftests - unknown status
14241
254}-
255-
256QString QTeamCityLogger::escapedTestFuncName() const-
257{-
258 const char *fn = QTestResult::currentTestFunction() ? QTestResult::currentTestFunction()
QTestResult::c...TestFunction()Description
TRUEevaluated 1683 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
FALSEnever evaluated
0-1683
259 : "UnknownTestFunc";-
260 const char *tag = QTestResult::currentDataTag() ? QTestResult::currentDataTag() : "";
QTestResult::currentDataTag()Description
TRUEevaluated 1070 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
FALSEevaluated 613 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
613-1070
261-
262 QString str = QString(QLatin1String("%1(%2)")).arg(QString::fromUtf8(fn)).arg(QString::fromUtf8(tag));-
263 str = tcEscapedString(str);-
264-
265 return str;
executed 1683 times by 1 test: return str;
Executed by:
  • tst_selftests - unknown status
1683
266}-
267-
268void QTeamCityLogger::addPendingMessage(const char *type, const QString &msg, const char *file, int line)-
269{-
270 QString pendMessage;-
271-
272 if (!pendingMessages.isEmpty())
!pendingMessages.isEmpty()Description
TRUEevaluated 10355 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
FALSEevaluated 378 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
378-10355
273 pendMessage += QLatin1String("|n");
executed 10355 times by 1 test: pendMessage += QLatin1String("|n");
Executed by:
  • tst_selftests - unknown status
10355
274-
275 if (file) {
fileDescription
TRUEevaluated 205 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
FALSEevaluated 10528 times by 1 test
Evaluated by:
  • tst_selftests - unknown status
205-10528
276 pendMessage += QString(QLatin1String("%1 |[Loc: %2(%3)|]: %4"))-
277 .arg(QString::fromUtf8(type))-
278 .arg(QString::fromUtf8(file))-
279 .arg(line)-
280 .arg(msg);-
281-
282 }
executed 205 times by 1 test: end of block
Executed by:
  • tst_selftests - unknown status
205
283 else {-
284 pendMessage += QString(QLatin1String("%1: %2"))-
285 .arg(QString::fromUtf8(type))-
286 .arg(msg);-
287 }
executed 10528 times by 1 test: end of block
Executed by:
  • tst_selftests - unknown status
10528
288-
289 pendingMessages.append(pendMessage);-
290}
executed 10733 times by 1 test: end of block
Executed by:
  • tst_selftests - unknown status
10733
291-
292QT_END_NAMESPACE-
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9