summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBorgar Ovsthus <borgar.ovsthus@fmcti.com>2016-01-06 18:20:29 +0100
committerBorgar √ėvsthus <borgar.ovsthus@fmcti.com>2016-01-23 18:30:58 +0000
commitfbd6acedac8e1f4ee624cb713055fcad1ceabf96 (patch)
tree37ab3e2e7ec82f5cd641c8ddfc38566b17b7fa72
parent9eda09f511246720a8c4eff2bbb52bbfacc36f48 (diff)
Add TeamCity logging feature to testlib
This allows TeamCity to parse realtime test-results instead of using post-build XML Report Processing. This does not support logging of benchmarks. [ChangeLog][QTest] Added a new logging mode that allow test-results to be parsed on-the-fly when using Jetbrains TeamCity as CI-server. This mode is enabled by using the -teamcity option on the command-line. Change-Id: Ie730beb643043eb0f448f99abe6c0b5ac48aaf03 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r--src/testlib/doc/src/qttestlib-manual.qdoc6
-rw-r--r--src/testlib/qteamcitylogger.cpp292
-rw-r--r--src/testlib/qteamcitylogger_p.h90
-rw-r--r--src/testlib/qtestcase.cpp8
-rw-r--r--src/testlib/qtestlog.cpp4
-rw-r--r--src/testlib/qtestlog_p.h2
-rw-r--r--src/testlib/testlib.pro1
-rw-r--r--tests/auto/testlib/selftests/expected_assert.teamcity10
-rw-r--r--tests/auto/testlib/selftests/expected_badxml.teamcity50
-rw-r--r--tests/auto/testlib/selftests/expected_cmptest.teamcity105
-rw-r--r--tests/auto/testlib/selftests/expected_commandlinedata.teamcity24
-rw-r--r--tests/auto/testlib/selftests/expected_counting.teamcity68
-rw-r--r--tests/auto/testlib/selftests/expected_datatable.teamcity83
-rw-r--r--tests/auto/testlib/selftests/expected_datetime.teamcity19
-rw-r--r--tests/auto/testlib/selftests/expected_exceptionthrow.teamcity7
-rw-r--r--tests/auto/testlib/selftests/expected_expectfail.teamcity65
-rw-r--r--tests/auto/testlib/selftests/expected_failcleanup.teamcity9
-rw-r--r--tests/auto/testlib/selftests/expected_failinit.teamcity7
-rw-r--r--tests/auto/testlib/selftests/expected_failinitdata.teamcity5
-rw-r--r--tests/auto/testlib/selftests/expected_fetchbogus.teamcity8
-rw-r--r--tests/auto/testlib/selftests/expected_findtestdata.teamcity9
-rw-r--r--tests/auto/testlib/selftests/expected_globaldata.teamcity32
-rw-r--r--tests/auto/testlib/selftests/expected_longstring.teamcity9
-rw-r--r--tests/auto/testlib/selftests/expected_maxwarnings.teamcity9
-rw-r--r--tests/auto/testlib/selftests/expected_silent.teamcity12
-rw-r--r--tests/auto/testlib/selftests/expected_singleskip.teamcity7
-rw-r--r--tests/auto/testlib/selftests/expected_skip.teamcity12
-rw-r--r--tests/auto/testlib/selftests/expected_skipcleanup.teamcity7
-rw-r--r--tests/auto/testlib/selftests/expected_skipinit.teamcity5
-rw-r--r--tests/auto/testlib/selftests/expected_skipinitdata.teamcity3
-rw-r--r--tests/auto/testlib/selftests/expected_sleep.teamcity8
-rw-r--r--tests/auto/testlib/selftests/expected_strcmp.teamcity24
-rw-r--r--tests/auto/testlib/selftests/expected_subtest.teamcity31
-rw-r--r--tests/auto/testlib/selftests/expected_verbose1.teamcity68
-rw-r--r--tests/auto/testlib/selftests/expected_verbose2.teamcity80
-rw-r--r--tests/auto/testlib/selftests/expected_verifyexceptionthrown.teamcity30
-rw-r--r--tests/auto/testlib/selftests/expected_warnings.teamcity25
-rw-r--r--tests/auto/testlib/selftests/expected_xunit.teamcity26
-rw-r--r--tests/auto/testlib/selftests/selftests.qrc33
-rw-r--r--tests/auto/testlib/selftests/tst_selftests.cpp31
40 files changed, 1318 insertions, 6 deletions
diff --git a/src/testlib/doc/src/qttestlib-manual.qdoc b/src/testlib/doc/src/qttestlib-manual.qdoc
index 00ad84b78b..3b9d0f3d80 100644
--- a/src/testlib/doc/src/qttestlib-manual.qdoc
+++ b/src/testlib/doc/src/qttestlib-manual.qdoc
@@ -190,6 +190,8 @@
\li \c -csv \br
Outputs results as comma-separated values (CSV). This mode is only suitable for
benchmarks, since it suppresses normal pass/fail messages.
+ \li \c -teamcity \br
+ Outputs results in TeamCity format.
\endlist
The first version of the \c -o option may be repeated in order to log
@@ -197,8 +199,8 @@
option can log test results to standard output.
If the first version of the \c -o option is used, neither the second version
- of the \c -o option nor the \c -txt, \c -xml, \c -lightxml or \c -xunitxml
- options should be used.
+ of the \c -o option nor the \c -txt, \c -xml, \c -lightxml, \c -teamcity
+ or \c -xunitxml options should be used.
If neither version of the \c -o option is used, test results will be logged to
standard output. If no format option is used, test results will be logged in
diff --git a/src/testlib/qteamcitylogger.cpp b/src/testlib/qteamcitylogger.cpp
new file mode 100644
index 0000000000..4773ea937f
--- /dev/null
+++ b/src/testlib/qteamcitylogger.cpp
@@ -0,0 +1,292 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 Borgar Ovsthus
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtTest module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/private/qtestresult_p.h>
+#include <QtTest/qtestassert.h>
+#include <QtTest/private/qtestlog_p.h>
+#include <QtTest/private/qteamcitylogger_p.h>
+#include <QtCore/qbytearray.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace QTest {
+
+ static const char *incidentType2String(QAbstractTestLogger::IncidentTypes type)
+ {
+ switch (type) {
+ case QAbstractTestLogger::Pass:
+ return "PASS";
+ case QAbstractTestLogger::XFail:
+ return "XFAIL";
+ case QAbstractTestLogger::Fail:
+ return "FAIL!";
+ case QAbstractTestLogger::XPass:
+ return "XPASS";
+ case QAbstractTestLogger::BlacklistedPass:
+ return "BPASS";
+ case QAbstractTestLogger::BlacklistedFail:
+ return "BFAIL";
+ }
+ return "??????";
+ }
+
+ static const char *messageType2String(QAbstractTestLogger::MessageTypes type)
+ {
+ switch (type) {
+ case QAbstractTestLogger::Skip:
+ return "SKIP";
+ case QAbstractTestLogger::Warn:
+ return "WARNING";
+ case QAbstractTestLogger::QWarning:
+ return "QWARN";
+ case QAbstractTestLogger::QDebug:
+ return "QDEBUG";
+ case QAbstractTestLogger::QInfo:
+ return "QINFO";
+ case QAbstractTestLogger::QSystem:
+ return "QSYSTEM";
+ case QAbstractTestLogger::QFatal:
+ return "QFATAL";
+ case QAbstractTestLogger::Info:
+ return "INFO";
+ }
+ return "??????";
+ }
+}
+
+QTeamCityLogger::QTeamCityLogger(const char *filename)
+ : QAbstractTestLogger(filename)
+{
+}
+
+QTeamCityLogger::~QTeamCityLogger()
+{
+}
+
+void QTeamCityLogger::startLogging()
+{
+ QAbstractTestLogger::startLogging();
+
+ QString testSuiteName = tcEscapedString(QString::fromUtf8(QTestResult::currentTestObjectName()));
+
+ QString str = QString(QLatin1String("##teamcity[testSuiteStarted name='%1']\n")).arg(testSuiteName);
+ outputString(qPrintable(str));
+}
+
+void QTeamCityLogger::stopLogging()
+{
+ QString testSuiteName = tcEscapedString(QString::fromUtf8(QTestResult::currentTestObjectName()));
+
+ QString str = QString(QLatin1String("##teamcity[testSuiteFinished name='%1']\n")).arg(testSuiteName);
+ outputString(qPrintable(str));
+
+ QAbstractTestLogger::stopLogging();
+}
+
+void QTeamCityLogger::enterTestFunction(const char * /*function*/)
+{
+ // don't print anything
+}
+
+void QTeamCityLogger::leaveTestFunction()
+{
+ // don't print anything
+}
+
+void QTeamCityLogger::addIncident(IncidentTypes type, const char *description,
+ const char *file, int line)
+{
+ // suppress PASS and XFAIL in silent mode
+ if ((type == QAbstractTestLogger::Pass || type == QAbstractTestLogger::XFail) && QTestLog::verboseLevel() < 0)
+ return;
+
+ QString buf;
+
+ QString tmpFuncName = escapedTestFuncName();
+
+ if (tmpFuncName != currTestFuncName) {
+ buf = QString(QLatin1String("##teamcity[testStarted name='%1']\n")).arg(tmpFuncName);
+ outputString(qPrintable(buf));
+ }
+
+ currTestFuncName = tmpFuncName;
+
+ if (type == QAbstractTestLogger::XFail) {
+ addPendingMessage(QTest::incidentType2String(type), QString::fromUtf8(description), file, line);
+ return;
+ }
+
+ QString detailedText = QString::fromUtf8(description);
+ detailedText = tcEscapedString(detailedText);
+
+ // Test failed
+ if ((type == QAbstractTestLogger::Fail) || (type == QAbstractTestLogger::XPass)) {
+ QString messageText(QLatin1String("Failure!"));
+
+ if (file)
+ messageText += QString(QLatin1String(" |[Loc: %1(%2)|]")).arg(QString::fromUtf8(file)).arg(line);
+
+ buf = QString(QLatin1String("##teamcity[testFailed name='%1' message='%2' details='%3']\n"))
+ .arg(tmpFuncName)
+ .arg(messageText)
+ .arg(detailedText);
+
+ outputString(qPrintable(buf));
+ }
+
+ if (!pendingMessages.isEmpty()) {
+ buf = QString(QLatin1String("##teamcity[testStdOut name='%1' out='%2']\n"))
+ .arg(tmpFuncName)
+ .arg(pendingMessages);
+
+ outputString(qPrintable(buf));
+
+ pendingMessages.clear();
+ }
+
+ buf = QString(QLatin1String("##teamcity[testFinished name='%1']\n")).arg(tmpFuncName);
+ outputString(qPrintable(buf));
+}
+
+void QTeamCityLogger::addBenchmarkResult(const QBenchmarkResult &)
+{
+ // don't print anything
+}
+
+void QTeamCityLogger::addMessage(MessageTypes type, const QString &message,
+ const char *file, int line)
+{
+ // suppress non-fatal messages in silent mode
+ if (type != QAbstractTestLogger::QFatal && QTestLog::verboseLevel() < 0)
+ return;
+
+ QString escapedMessage = tcEscapedString(message);
+
+ QString buf;
+
+ if (type == QAbstractTestLogger::Skip) {
+ if (file)
+ escapedMessage.append(QString(QLatin1String(" |[Loc: %1(%2)|]")).arg(QString::fromUtf8(file)).arg(line));
+
+ buf = QString(QLatin1String("##teamcity[testIgnored name='%1' message='%2']\n"))
+ .arg(escapedTestFuncName())
+ .arg(escapedMessage);
+
+ outputString(qPrintable(buf));
+ }
+ else {
+ addPendingMessage(QTest::messageType2String(type), escapedMessage, file, line);
+ }
+}
+
+QString QTeamCityLogger::tcEscapedString(const QString &str) const
+{
+ QString formattedString;
+
+ for (int i = 0; i < str.length(); i++) {
+ QChar ch = str.at(i);
+
+ switch (ch.toLatin1()) {
+ case '\n':
+ formattedString.append(QLatin1Literal("|n"));
+ break;
+ case '\r':
+ formattedString.append(QLatin1Literal("|r"));
+ break;
+ case '|':
+ formattedString.append(QLatin1Literal("||"));
+ break;
+ case '[':
+ formattedString.append(QLatin1Literal("|["));
+ break;
+ case ']':
+ formattedString.append(QLatin1Literal("|]"));
+ break;
+ case '\'':
+ formattedString.append(QLatin1Literal("|'"));
+ break;
+ default:
+ formattedString.append(ch);
+ }
+ }
+
+ return qMove(formattedString).simplified();
+}
+
+QString QTeamCityLogger::escapedTestFuncName() const
+{
+ const char *fn = QTestResult::currentTestFunction() ? QTestResult::currentTestFunction()
+ : "UnknownTestFunc";
+ const char *tag = QTestResult::currentDataTag() ? QTestResult::currentDataTag() : "";
+
+ QString str = QString(QLatin1String("%1(%2)")).arg(QString::fromUtf8(fn)).arg(QString::fromUtf8(tag));
+ str = tcEscapedString(str);
+
+ return str;
+}
+
+void QTeamCityLogger::addPendingMessage(const char *type, const QString &msg, const char *file, int line)
+{
+ QString pendMessage;
+
+ if (!pendingMessages.isEmpty())
+ pendMessage += QLatin1String("|n");
+
+ if (file) {
+ pendMessage += QString(QLatin1String("%1 |[Loc: %2(%3)|]: %4"))
+ .arg(QString::fromUtf8(type))
+ .arg(QString::fromUtf8(file))
+ .arg(line)
+ .arg(msg);
+
+ }
+ else {
+ pendMessage += QString(QLatin1String("%1: %2"))
+ .arg(QString::fromUtf8(type))
+ .arg(msg);
+ }
+
+ pendingMessages.append(pendMessage);
+}
+
+QT_END_NAMESPACE
diff --git a/src/testlib/qteamcitylogger_p.h b/src/testlib/qteamcitylogger_p.h
new file mode 100644
index 0000000000..b8fad3ae34
--- /dev/null
+++ b/src/testlib/qteamcitylogger_p.h
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 Borgar Ovsthus
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtTest module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QTEAMCITYLOGGER_P_H
+#define QTEAMCITYLOGGER_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtTest/private/qabstracttestlogger_p.h>
+
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class QTeamCityLogger : public QAbstractTestLogger
+{
+public:
+ QTeamCityLogger(const char *filename);
+ ~QTeamCityLogger();
+
+ void startLogging();
+ void stopLogging();
+
+ void enterTestFunction(const char *function);
+ void leaveTestFunction();
+
+ void addIncident(IncidentTypes type, const char *description,
+ const char *file = 0, int line = 0);
+ void addBenchmarkResult(const QBenchmarkResult &result);
+
+ void addMessage(MessageTypes type, const QString &message,
+ const char *file = 0, int line = 0);
+
+private:
+ QString currTestFuncName;
+ QString pendingMessages;
+
+ QString tcEscapedString(const QString &str) const;
+ QString escapedTestFuncName() const;
+ void addPendingMessage(const char *type, const QString &msg, const char *file, int line);
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp
index 0aec8a44b8..d71b64428d 100644
--- a/src/testlib/qtestcase.cpp
+++ b/src/testlib/qtestcase.cpp
@@ -404,6 +404,7 @@ Q_TESTLIB_EXPORT void qtest_qParseArgs(int argc, char *argv[], bool qml)
" xunitxml : XML XUnit document\n"
" xml : XML document\n"
" lightxml : A stream of XML tags\n"
+ " teamcity : TeamCity format\n"
"\n"
" *** Multiple loggers can be specified, but at most one can log to stdout.\n"
"\n"
@@ -414,6 +415,7 @@ Q_TESTLIB_EXPORT void qtest_qParseArgs(int argc, char *argv[], bool qml)
" -xunitxml : Output results as XML XUnit document\n"
" -xml : Output results as XML document\n"
" -lightxml : Output results as stream of XML tags\n"
+ " -teamcity : Output results in TeamCity format\n"
"\n"
" *** If no output file is specified, stdout is assumed.\n"
" *** If no output format is specified, -txt is assumed.\n"
@@ -499,6 +501,8 @@ Q_TESTLIB_EXPORT void qtest_qParseArgs(int argc, char *argv[], bool qml)
logFormat = QTestLog::XML;
} else if (strcmp(argv[i], "-lightxml") == 0) {
logFormat = QTestLog::LightXML;
+ } else if (strcmp(argv[i], "-teamcity") == 0) {
+ logFormat = QTestLog::TeamCity;
} else if (strcmp(argv[i], "-silent") == 0) {
QTestLog::setVerboseLevel(-1);
} else if (strcmp(argv[i], "-v1") == 0) {
@@ -531,8 +535,10 @@ Q_TESTLIB_EXPORT void qtest_qParseArgs(int argc, char *argv[], bool qml)
logFormat = QTestLog::XML;
else if (strcmp(format, "xunitxml") == 0)
logFormat = QTestLog::XunitXML;
+ else if (strcmp(format, "teamcity") == 0)
+ logFormat = QTestLog::TeamCity;
else {
- fprintf(stderr, "output format must be one of txt, csv, lightxml, xml or xunitxml\n");
+ fprintf(stderr, "output format must be one of txt, csv, lightxml, xml, teamcity or xunitxml\n");
exit(1);
}
if (strcmp(filename, "-") == 0 && QTestLog::loggerUsingStdout()) {
diff --git a/src/testlib/qtestlog.cpp b/src/testlib/qtestlog.cpp
index ab370786bd..5bbf2c6458 100644
--- a/src/testlib/qtestlog.cpp
+++ b/src/testlib/qtestlog.cpp
@@ -46,6 +46,7 @@
#include <QtTest/private/qcsvbenchmarklogger_p.h>
#include <QtTest/private/qxunittestlogger_p.h>
#include <QtTest/private/qxmltestlogger_p.h>
+#include <QtTest/private/qteamcitylogger_p.h>
#if defined(HAVE_XCTEST)
#include <QtTest/private/qxctestlogger_p.h>
#endif
@@ -500,6 +501,9 @@ void QTestLog::addLogger(LogMode mode, const char *filename)
case QTestLog::XunitXML:
logger = new QXunitTestLogger(filename);
break;
+ case QTestLog::TeamCity:
+ logger = new QTeamCityLogger(filename);
+ break;
#if defined(HAVE_XCTEST)
case QTestLog::XCTest:
logger = new QXcodeTestLogger;
diff --git a/src/testlib/qtestlog_p.h b/src/testlib/qtestlog_p.h
index 9bdbd736a9..f72c047c35 100644
--- a/src/testlib/qtestlog_p.h
+++ b/src/testlib/qtestlog_p.h
@@ -62,7 +62,7 @@ class Q_TESTLIB_EXPORT QTestLog
{
public:
enum LogMode {
- Plain = 0, XML, LightXML, XunitXML, CSV,
+ Plain = 0, XML, LightXML, XunitXML, CSV, TeamCity,
#if defined(HAVE_XCTEST)
XCTest
#endif
diff --git a/src/testlib/testlib.pro b/src/testlib/testlib.pro
index ff4379f85d..0faa1c7d30 100644
--- a/src/testlib/testlib.pro
+++ b/src/testlib/testlib.pro
@@ -54,6 +54,7 @@ SOURCES = qtestcase.cpp \
qbenchmarkperfevents.cpp \
qbenchmarkmetric.cpp \
qcsvbenchmarklogger.cpp \
+ qteamcitylogger.cpp \
qtestelement.cpp \
qtestelementattribute.cpp \
qtestmouse.cpp \
diff --git a/tests/auto/testlib/selftests/expected_assert.teamcity b/tests/auto/testlib/selftests/expected_assert.teamcity
new file mode 100644
index 0000000000..ca792bf36f
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_assert.teamcity
@@ -0,0 +1,10 @@
+##teamcity[testSuiteStarted name='tst_Assert']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='testNumber1()']
+##teamcity[testFinished name='testNumber1()']
+##teamcity[testStarted name='testNumber2()']
+##teamcity[testFailed name='testNumber2()' message='Failure! |[Loc: Unknown file(0)|]' details='Received a fatal error.']
+##teamcity[testStdOut name='testNumber2()' out='QFATAL: ASSERT: "false" in file tst_assert.cpp, line 58']
+##teamcity[testFinished name='testNumber2()']
+##teamcity[testSuiteFinished name='tst_Assert']
diff --git a/tests/auto/testlib/selftests/expected_badxml.teamcity b/tests/auto/testlib/selftests/expected_badxml.teamcity
new file mode 100644
index 0000000000..7dd77d56ca
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_badxml.teamcity
@@ -0,0 +1,50 @@
+##teamcity[testSuiteStarted name='tst_BadXml']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='badDataTag(fail end cdata |]|]> text |]|]> more text)']
+##teamcity[testFailed name='badDataTag(fail end cdata |]|]> text |]|]> more text)' message='Failure! |[Loc: tst_badxml.cpp(106)|]' details='a failure']
+##teamcity[testStdOut name='badDataTag(fail end cdata |]|]> text |]|]> more text)' out='QDEBUG: a message']
+##teamcity[testFinished name='badDataTag(fail end cdata |]|]> text |]|]> more text)']
+##teamcity[testStarted name='badDataTag(pass end cdata |]|]> text |]|]> more text)']
+##teamcity[testStdOut name='badDataTag(pass end cdata |]|]> text |]|]> more text)' out='QDEBUG: a message']
+##teamcity[testFinished name='badDataTag(pass end cdata |]|]> text |]|]> more text)']
+##teamcity[testStarted name='badDataTag(fail quotes " text" more text)']
+##teamcity[testFailed name='badDataTag(fail quotes " text" more text)' message='Failure! |[Loc: tst_badxml.cpp(106)|]' details='a failure']
+##teamcity[testStdOut name='badDataTag(fail quotes " text" more text)' out='QDEBUG: a message']
+##teamcity[testFinished name='badDataTag(fail quotes " text" more text)']
+##teamcity[testStarted name='badDataTag(pass quotes " text" more text)']
+##teamcity[testStdOut name='badDataTag(pass quotes " text" more text)' out='QDEBUG: a message']
+##teamcity[testFinished name='badDataTag(pass quotes " text" more text)']
+##teamcity[testStarted name='badDataTag(fail xml close > open < tags < text)']
+##teamcity[testFailed name='badDataTag(fail xml close > open < tags < text)' message='Failure! |[Loc: tst_badxml.cpp(106)|]' details='a failure']
+##teamcity[testStdOut name='badDataTag(fail xml close > open < tags < text)' out='QDEBUG: a message']
+##teamcity[testFinished name='badDataTag(fail xml close > open < tags < text)']
+##teamcity[testStarted name='badDataTag(pass xml close > open < tags < text)']
+##teamcity[testStdOut name='badDataTag(pass xml close > open < tags < text)' out='QDEBUG: a message']
+##teamcity[testFinished name='badDataTag(pass xml close > open < tags < text)']
+##teamcity[testStarted name='badDataTag(fail all > " mixed |]|]> up > " in < the |]|]> hopes < of triggering "< |]|]> bugs)']
+##teamcity[testFailed name='badDataTag(fail all > " mixed |]|]> up > " in < the |]|]> hopes < of triggering "< |]|]> bugs)' message='Failure! |[Loc: tst_badxml.cpp(106)|]' details='a failure']
+##teamcity[testStdOut name='badDataTag(fail all > " mixed |]|]> up > " in < the |]|]> hopes < of triggering "< |]|]> bugs)' out='QDEBUG: a message']
+##teamcity[testFinished name='badDataTag(fail all > " mixed |]|]> up > " in < the |]|]> hopes < of triggering "< |]|]> bugs)']
+##teamcity[testStarted name='badDataTag(pass all > " mixed |]|]> up > " in < the |]|]> hopes < of triggering "< |]|]> bugs)']
+##teamcity[testStdOut name='badDataTag(pass all > " mixed |]|]> up > " in < the |]|]> hopes < of triggering "< |]|]> bugs)' out='QDEBUG: a message']
+##teamcity[testFinished name='badDataTag(pass all > " mixed |]|]> up > " in < the |]|]> hopes < of triggering "< |]|]> bugs)']
+##teamcity[testStarted name='badMessage(string 0)']
+##teamcity[testStdOut name='badMessage(string 0)' out='QDEBUG: end cdata |]|]> text |]|]> more text']
+##teamcity[testFinished name='badMessage(string 0)']
+##teamcity[testStarted name='badMessage(string 1)']
+##teamcity[testStdOut name='badMessage(string 1)' out='QDEBUG: quotes " text" more text']
+##teamcity[testFinished name='badMessage(string 1)']
+##teamcity[testStarted name='badMessage(string 2)']
+##teamcity[testStdOut name='badMessage(string 2)' out='QDEBUG: xml close > open < tags < text']
+##teamcity[testFinished name='badMessage(string 2)']
+##teamcity[testStarted name='badMessage(string 3)']
+##teamcity[testStdOut name='badMessage(string 3)' out='QDEBUG: all > " mixed |]|]> up > " in < the |]|]> hopes < of triggering "< |]|]> bugs']
+##teamcity[testFinished name='badMessage(string 3)']
+##teamcity[testStarted name='failWithNoFile()']
+##teamcity[testFailed name='failWithNoFile()' message='Failure!' details='failure message']
+##teamcity[testFinished name='failWithNoFile()']
+##teamcity[testIgnored name='encoding()' message='Skipped for text due to unpredictable console encoding. |[Loc: tst_badxml.cpp(131)|]']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_BadXml']
diff --git a/tests/auto/testlib/selftests/expected_cmptest.teamcity b/tests/auto/testlib/selftests/expected_cmptest.teamcity
new file mode 100644
index 0000000000..4d3491403c
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_cmptest.teamcity
@@ -0,0 +1,105 @@
+##teamcity[testSuiteStarted name='tst_Cmptest']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='compare_unregistered_enums()']
+##teamcity[testFailed name='compare_unregistered_enums()' message='Failure! |[Loc: tst_cmptest.cpp(159)|]' details='Compared values are not the same']
+##teamcity[testFinished name='compare_unregistered_enums()']
+##teamcity[testStarted name='compare_registered_enums()']
+##teamcity[testFailed name='compare_registered_enums()' message='Failure! |[Loc: tst_cmptest.cpp(165)|]' details='Compared values are not the same|n Actual (Qt::ArrowCursor): ArrowCursor|n Expected (Qt::BusyCursor) : BusyCursor']
+##teamcity[testFinished name='compare_registered_enums()']
+##teamcity[testStarted name='compare_class_enums()']
+##teamcity[testFailed name='compare_class_enums()' message='Failure! |[Loc: tst_cmptest.cpp(171)|]' details='Compared values are not the same|n Actual (MyClassEnum::MyClassEnumValue1): MyClassEnumValue1|n Expected (MyClassEnum::MyClassEnumValue2): MyClassEnumValue2']
+##teamcity[testFinished name='compare_class_enums()']
+##teamcity[testStarted name='compare_boolfuncs()']
+##teamcity[testFinished name='compare_boolfuncs()']
+##teamcity[testStarted name='compare_pointerfuncs()']
+##teamcity[testFinished name='compare_pointerfuncs()']
+##teamcity[testStarted name='compare_tostring(int, string)']
+##teamcity[testFailed name='compare_tostring(int, string)' message='Failure! |[Loc: tst_cmptest.cpp(242)|]' details='Compared values are not the same|n Actual (actual) : QVariant(int,123)|n Expected (expected): QVariant(QString,hi)']
+##teamcity[testFinished name='compare_tostring(int, string)']
+##teamcity[testStarted name='compare_tostring(both invalid)']
+##teamcity[testFinished name='compare_tostring(both invalid)']
+##teamcity[testStarted name='compare_tostring(null hash, invalid)']
+##teamcity[testFailed name='compare_tostring(null hash, invalid)' message='Failure! |[Loc: tst_cmptest.cpp(242)|]' details='Compared values are not the same|n Actual (actual) : QVariant(QVariantHash)|n Expected (expected): QVariant()']
+##teamcity[testFinished name='compare_tostring(null hash, invalid)']
+##teamcity[testStarted name='compare_tostring(string, null user type)']
+##teamcity[testFailed name='compare_tostring(string, null user type)' message='Failure! |[Loc: tst_cmptest.cpp(242)|]' details='Compared values are not the same|n Actual (actual) : QVariant(QString,A simple string)|n Expected (expected): QVariant(PhonyClass)']
+##teamcity[testFinished name='compare_tostring(string, null user type)']
+##teamcity[testStarted name='compare_tostring(both non-null user type)']
+##teamcity[testFailed name='compare_tostring(both non-null user type)' message='Failure! |[Loc: tst_cmptest.cpp(242)|]' details='Compared values are not the same|n Actual (actual) : QVariant(PhonyClass,<value not representable as string>)|n Expected (expected): QVariant(PhonyClass,<value not representable as string>)']
+##teamcity[testFinished name='compare_tostring(both non-null user type)']
+##teamcity[testStarted name='compareQStringLists(empty lists)']
+##teamcity[testFinished name='compareQStringLists(empty lists)']
+##teamcity[testStarted name='compareQStringLists(equal lists)']
+##teamcity[testFinished name='compareQStringLists(equal lists)']
+##teamcity[testStarted name='compareQStringLists(last item different)']
+##teamcity[testFailed name='compareQStringLists(last item different)' message='Failure! |[Loc: tst_cmptest.cpp(336)|]' details='Compared lists differ at index 2.|n Actual (opA): "string3"|n Expected (opB): "DIFFERS"']
+##teamcity[testFinished name='compareQStringLists(last item different)']
+##teamcity[testStarted name='compareQStringLists(second-last item different)']
+##teamcity[testFailed name='compareQStringLists(second-last item different)' message='Failure! |[Loc: tst_cmptest.cpp(336)|]' details='Compared lists differ at index 2.|n Actual (opA): "string3"|n Expected (opB): "DIFFERS"']
+##teamcity[testFinished name='compareQStringLists(second-last item different)']
+##teamcity[testStarted name='compareQStringLists(prefix)']
+##teamcity[testFailed name='compareQStringLists(prefix)' message='Failure! |[Loc: tst_cmptest.cpp(336)|]' details='Compared lists have different sizes.|n Actual (opA) size: 2|n Expected (opB) size: 1']
+##teamcity[testFinished name='compareQStringLists(prefix)']
+##teamcity[testStarted name='compareQStringLists(short list second)']
+##teamcity[testFailed name='compareQStringLists(short list second)' message='Failure! |[Loc: tst_cmptest.cpp(336)|]' details='Compared lists have different sizes.|n Actual (opA) size: 12|n Expected (opB) size: 1']
+##teamcity[testFinished name='compareQStringLists(short list second)']
+##teamcity[testStarted name='compareQStringLists(short list first)']
+##teamcity[testFailed name='compareQStringLists(short list first)' message='Failure! |[Loc: tst_cmptest.cpp(336)|]' details='Compared lists have different sizes.|n Actual (opA) size: 1|n Expected (opB) size: 12']
+##teamcity[testFinished name='compareQStringLists(short list first)']
+##teamcity[testStarted name='compareQListInt()']
+##teamcity[testFailed name='compareQListInt()' message='Failure! |[Loc: tst_cmptest.cpp(343)|]' details='Compared lists differ at index 2.|n Actual (int1): 3|n Expected (int2): 4']
+##teamcity[testFinished name='compareQListInt()']
+##teamcity[testStarted name='compareQListDouble()']
+##teamcity[testFailed name='compareQListDouble()' message='Failure! |[Loc: tst_cmptest.cpp(350)|]' details='Compared lists differ at index 0.|n Actual (double1): 1.5|n Expected (double2): 1']
+##teamcity[testFinished name='compareQListDouble()']
+##teamcity[testStarted name='compareQPixmaps(both null)']
+##teamcity[testFinished name='compareQPixmaps(both null)']
+##teamcity[testStarted name='compareQPixmaps(one null)']
+##teamcity[testFailed name='compareQPixmaps(one null)' message='Failure! |[Loc: tst_cmptest.cpp(376)|]' details='Compared QPixmaps differ.|n Actual (opA).isNull(): 1|n Expected (opB).isNull(): 0']
+##teamcity[testFinished name='compareQPixmaps(one null)']
+##teamcity[testStarted name='compareQPixmaps(other null)']
+##teamcity[testFailed name='compareQPixmaps(other null)' message='Failure! |[Loc: tst_cmptest.cpp(376)|]' details='Compared QPixmaps differ.|n Actual (opA).isNull(): 0|n Expected (opB).isNull(): 1']
+##teamcity[testFinished name='compareQPixmaps(other null)']
+##teamcity[testStarted name='compareQPixmaps(equal)']
+##teamcity[testFinished name='compareQPixmaps(equal)']
+##teamcity[testStarted name='compareQPixmaps(different size)']
+##teamcity[testFailed name='compareQPixmaps(different size)' message='Failure! |[Loc: tst_cmptest.cpp(376)|]' details='Compared QPixmaps differ in size.|n Actual (opA): 11x20|n Expected (opB): 20x20']
+##teamcity[testFinished name='compareQPixmaps(different size)']
+##teamcity[testStarted name='compareQPixmaps(different pixels)']
+##teamcity[testFailed name='compareQPixmaps(different pixels)' message='Failure! |[Loc: tst_cmptest.cpp(376)|]' details='Compared values are not the same']
+##teamcity[testFinished name='compareQPixmaps(different pixels)']
+##teamcity[testStarted name='compareQImages(both null)']
+##teamcity[testFinished name='compareQImages(both null)']
+##teamcity[testStarted name='compareQImages(one null)']
+##teamcity[testFailed name='compareQImages(one null)' message='Failure! |[Loc: tst_cmptest.cpp(403)|]' details='Compared QImages differ.|n Actual (opA).isNull(): 1|n Expected (opB).isNull(): 0']
+##teamcity[testFinished name='compareQImages(one null)']
+##teamcity[testStarted name='compareQImages(other null)']
+##teamcity[testFailed name='compareQImages(other null)' message='Failure! |[Loc: tst_cmptest.cpp(403)|]' details='Compared QImages differ.|n Actual (opA).isNull(): 0|n Expected (opB).isNull(): 1']
+##teamcity[testFinished name='compareQImages(other null)']
+##teamcity[testStarted name='compareQImages(equal)']
+##teamcity[testFinished name='compareQImages(equal)']
+##teamcity[testStarted name='compareQImages(different size)']
+##teamcity[testFailed name='compareQImages(different size)' message='Failure! |[Loc: tst_cmptest.cpp(403)|]' details='Compared QImages differ in size.|n Actual (opA): 11x20|n Expected (opB): 20x20']
+##teamcity[testFinished name='compareQImages(different size)']
+##teamcity[testStarted name='compareQImages(different format)']
+##teamcity[testFailed name='compareQImages(different format)' message='Failure! |[Loc: tst_cmptest.cpp(403)|]' details='Compared QImages differ in format.|n Actual (opA): 6|n Expected (opB): 3']
+##teamcity[testFinished name='compareQImages(different format)']
+##teamcity[testStarted name='compareQImages(different pixels)']
+##teamcity[testFailed name='compareQImages(different pixels)' message='Failure! |[Loc: tst_cmptest.cpp(403)|]' details='Compared values are not the same']
+##teamcity[testFinished name='compareQImages(different pixels)']
+##teamcity[testStarted name='verify()']
+##teamcity[testFailed name='verify()' message='Failure! |[Loc: tst_cmptest.cpp(415)|]' details='|'opaqueFunc() < 2|' returned FALSE. ()']
+##teamcity[testFinished name='verify()']
+##teamcity[testStarted name='verify2()']
+##teamcity[testFailed name='verify2()' message='Failure! |[Loc: tst_cmptest.cpp(421)|]' details='|'opaqueFunc() < 2|' returned FALSE. (42)']
+##teamcity[testFinished name='verify2()']
+##teamcity[testStarted name='tryVerify()']
+##teamcity[testFailed name='tryVerify()' message='Failure! |[Loc: tst_cmptest.cpp(427)|]' details='|'opaqueFunc() < 2|' returned FALSE. ()']
+##teamcity[testFinished name='tryVerify()']
+##teamcity[testStarted name='tryVerify2()']
+##teamcity[testFailed name='tryVerify2()' message='Failure! |[Loc: tst_cmptest.cpp(433)|]' details='|'opaqueFunc() < 2|' returned FALSE. (42)']
+##teamcity[testFinished name='tryVerify2()']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_Cmptest']
diff --git a/tests/auto/testlib/selftests/expected_commandlinedata.teamcity b/tests/auto/testlib/selftests/expected_commandlinedata.teamcity
new file mode 100644
index 0000000000..2b8dfb2410
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_commandlinedata.teamcity
@@ -0,0 +1,24 @@
+##teamcity[testSuiteStarted name='tst_DataTable']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data1)']
+##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data1)' out='INFO |[Loc: tst_commandlinedata.cpp(57)|]: QVERIFY(test)']
+##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data1)']
+##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data2)']
+##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data2)' out='INFO |[Loc: tst_commandlinedata.cpp(57)|]: QVERIFY(test)']
+##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data2)']
+##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data3)']
+##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data3)' out='INFO |[Loc: tst_commandlinedata.cpp(57)|]: QVERIFY(test)']
+##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data3)']
+##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data4)']
+##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data4)' out='INFO |[Loc: tst_commandlinedata.cpp(57)|]: QVERIFY(test)']
+##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data4)']
+##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data5)']
+##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data5)' out='INFO |[Loc: tst_commandlinedata.cpp(57)|]: QVERIFY(test)']
+##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data5)']
+##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data1)']
+##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data1)' out='INFO |[Loc: tst_commandlinedata.cpp(57)|]: QVERIFY(test)']
+##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data1)']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_DataTable']
diff --git a/tests/auto/testlib/selftests/expected_counting.teamcity b/tests/auto/testlib/selftests/expected_counting.teamcity
new file mode 100644
index 0000000000..d3bb58dcee
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_counting.teamcity
@@ -0,0 +1,68 @@
+##teamcity[testSuiteStarted name='tst_Counting']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='testPassPass(row 1)']
+##teamcity[testFinished name='testPassPass(row 1)']
+##teamcity[testStarted name='testPassPass(row 2)']
+##teamcity[testFinished name='testPassPass(row 2)']
+##teamcity[testStarted name='testPassSkip(row 1)']
+##teamcity[testFinished name='testPassSkip(row 1)']
+##teamcity[testIgnored name='testPassSkip(row 2)' message='Skipping |[Loc: tst_counting.cpp(110)|]']
+##teamcity[testStarted name='testPassFail(row 1)']
+##teamcity[testFinished name='testPassFail(row 1)']
+##teamcity[testStarted name='testPassFail(row 2)']
+##teamcity[testFailed name='testPassFail(row 2)' message='Failure! |[Loc: tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testFinished name='testPassFail(row 2)']
+##teamcity[testIgnored name='testSkipPass(row 1)' message='Skipping |[Loc: tst_counting.cpp(110)|]']
+##teamcity[testStarted name='testSkipPass(row 2)']
+##teamcity[testFinished name='testSkipPass(row 2)']
+##teamcity[testIgnored name='testSkipSkip(row 1)' message='Skipping |[Loc: tst_counting.cpp(110)|]']
+##teamcity[testIgnored name='testSkipSkip(row 2)' message='Skipping |[Loc: tst_counting.cpp(110)|]']
+##teamcity[testIgnored name='testSkipFail(row 1)' message='Skipping |[Loc: tst_counting.cpp(110)|]']
+##teamcity[testStarted name='testSkipFail(row 2)']
+##teamcity[testFailed name='testSkipFail(row 2)' message='Failure! |[Loc: tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testFinished name='testSkipFail(row 2)']
+##teamcity[testStarted name='testFailPass(row 1)']
+##teamcity[testFailed name='testFailPass(row 1)' message='Failure! |[Loc: tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testFinished name='testFailPass(row 1)']
+##teamcity[testStarted name='testFailPass(row 2)']
+##teamcity[testFinished name='testFailPass(row 2)']
+##teamcity[testStarted name='testFailSkip(row 1)']
+##teamcity[testFailed name='testFailSkip(row 1)' message='Failure! |[Loc: tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testFinished name='testFailSkip(row 1)']
+##teamcity[testIgnored name='testFailSkip(row 2)' message='Skipping |[Loc: tst_counting.cpp(110)|]']
+##teamcity[testStarted name='testFailFail(row 1)']
+##teamcity[testFailed name='testFailFail(row 1)' message='Failure! |[Loc: tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testFinished name='testFailFail(row 1)']
+##teamcity[testStarted name='testFailFail(row 2)']
+##teamcity[testFailed name='testFailFail(row 2)' message='Failure! |[Loc: tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testFinished name='testFailFail(row 2)']
+##teamcity[testStarted name='testFailInInit(before)']
+##teamcity[testFinished name='testFailInInit(before)']
+##teamcity[testStarted name='testFailInInit(fail)']
+##teamcity[testFailed name='testFailInInit(fail)' message='Failure! |[Loc: tst_counting.cpp(226)|]' details='Fail in init()']
+##teamcity[testFinished name='testFailInInit(fail)']
+##teamcity[testStarted name='testFailInInit(after)']
+##teamcity[testFinished name='testFailInInit(after)']
+##teamcity[testStarted name='testFailInCleanup(before)']
+##teamcity[testFinished name='testFailInCleanup(before)']
+##teamcity[testStarted name='testFailInCleanup(fail)']
+##teamcity[testFailed name='testFailInCleanup(fail)' message='Failure! |[Loc: tst_counting.cpp(234)|]' details='Fail in cleanup()']
+##teamcity[testStdOut name='testFailInCleanup(fail)' out='QDEBUG: This test function should execute and then QFAIL in cleanup()']
+##teamcity[testFinished name='testFailInCleanup(fail)']
+##teamcity[testStarted name='testFailInCleanup(after)']
+##teamcity[testFinished name='testFailInCleanup(after)']
+##teamcity[testStarted name='testSkipInInit(before)']
+##teamcity[testFinished name='testSkipInInit(before)']
+##teamcity[testIgnored name='testSkipInInit(skip)' message='Skip in init() |[Loc: tst_counting.cpp(228)|]']
+##teamcity[testStarted name='testSkipInInit(after)']
+##teamcity[testFinished name='testSkipInInit(after)']
+##teamcity[testStarted name='testSkipInCleanup(before)']
+##teamcity[testFinished name='testSkipInCleanup(before)']
+##teamcity[testIgnored name='testSkipInCleanup(skip)' message='Skip in cleanup() |[Loc: tst_counting.cpp(236)|]']
+##teamcity[testStarted name='testSkipInCleanup(after)']
+##teamcity[testStdOut name='testSkipInCleanup(after)' out='QDEBUG: This test function should execute and then QSKIP in cleanup()']
+##teamcity[testFinished name='testSkipInCleanup(after)']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_Counting']
diff --git a/tests/auto/testlib/selftests/expected_datatable.teamcity b/tests/auto/testlib/selftests/expected_datatable.teamcity
new file mode 100644
index 0000000000..4f02add4e0
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_datatable.teamcity
@@ -0,0 +1,83 @@
+##teamcity[testSuiteStarted name='tst_DataTable']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='singleTestFunction1()']
+##teamcity[testFinished name='singleTestFunction1()']
+##teamcity[testStarted name='singleTestFunction2()']
+##teamcity[testFinished name='singleTestFunction2()']
+##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data 1)']
+##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data 1)']
+##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data 2)']
+##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data 2)']
+##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data 3)']
+##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data 3)']
+##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data 4)']
+##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data 4)']
+##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data 5)']
+##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data 5)']
+##teamcity[testStarted name='fiveTableFailures(fiveTableFailures_data 1)']
+##teamcity[testFailed name='fiveTableFailures(fiveTableFailures_data 1)' message='Failure! |[Loc: tst_datatable.cpp(83)|]' details='|'test|' returned FALSE. ()']
+##teamcity[testFinished name='fiveTableFailures(fiveTableFailures_data 1)']
+##teamcity[testStarted name='fiveTableFailures(fiveTableFailures_data 2)']
+##teamcity[testFailed name='fiveTableFailures(fiveTableFailures_data 2)' message='Failure! |[Loc: tst_datatable.cpp(83)|]' details='|'test|' returned FALSE. ()']
+##teamcity[testFinished name='fiveTableFailures(fiveTableFailures_data 2)']
+##teamcity[testStarted name='fiveTableFailures(fiveTableFailures_data 3)']
+##teamcity[testFailed name='fiveTableFailures(fiveTableFailures_data 3)' message='Failure! |[Loc: tst_datatable.cpp(83)|]' details='|'test|' returned FALSE. ()']
+##teamcity[testFinished name='fiveTableFailures(fiveTableFailures_data 3)']
+##teamcity[testStarted name='fiveTableFailures(fiveTableFailures_data 4)']
+##teamcity[testFailed name='fiveTableFailures(fiveTableFailures_data 4)' message='Failure! |[Loc: tst_datatable.cpp(83)|]' details='|'test|' returned FALSE. ()']
+##teamcity[testFinished name='fiveTableFailures(fiveTableFailures_data 4)']
+##teamcity[testStarted name='fiveTableFailures(fiveTableFailures_data 5)']
+##teamcity[testFailed name='fiveTableFailures(fiveTableFailures_data 5)' message='Failure! |[Loc: tst_datatable.cpp(83)|]' details='|'test|' returned FALSE. ()']
+##teamcity[testFinished name='fiveTableFailures(fiveTableFailures_data 5)']
+##teamcity[testStarted name='startsWithFailure(startsWithFailure_data 1)']
+##teamcity[testFailed name='startsWithFailure(startsWithFailure_data 1)' message='Failure! |[Loc: tst_datatable.cpp(83)|]' details='|'test|' returned FALSE. ()']
+##teamcity[testFinished name='startsWithFailure(startsWithFailure_data 1)']
+##teamcity[testStarted name='startsWithFailure(startsWithFailure_data 2)']
+##teamcity[testFinished name='startsWithFailure(startsWithFailure_data 2)']
+##teamcity[testStarted name='startsWithFailure(startsWithFailure_data 3)']
+##teamcity[testFinished name='startsWithFailure(startsWithFailure_data 3)']
+##teamcity[testStarted name='startsWithFailure(startsWithFailure_data 4)']
+##teamcity[testFinished name='startsWithFailure(startsWithFailure_data 4)']
+##teamcity[testStarted name='startsWithFailure(startsWithFailure_data 5)']
+##teamcity[testFinished name='startsWithFailure(startsWithFailure_data 5)']
+##teamcity[testStarted name='endsWithFailure(endsWithFailure 1)']
+##teamcity[testFinished name='endsWithFailure(endsWithFailure 1)']
+##teamcity[testStarted name='endsWithFailure(endsWithFailure 2)']
+##teamcity[testFinished name='endsWithFailure(endsWithFailure 2)']
+##teamcity[testStarted name='endsWithFailure(endsWithFailure 3)']
+##teamcity[testFinished name='endsWithFailure(endsWithFailure 3)']
+##teamcity[testStarted name='endsWithFailure(endsWithFailure 4)']
+##teamcity[testFinished name='endsWithFailure(endsWithFailure 4)']
+##teamcity[testStarted name='endsWithFailure(endsWithFailure 5)']
+##teamcity[testFailed name='endsWithFailure(endsWithFailure 5)' message='Failure! |[Loc: tst_datatable.cpp(83)|]' details='|'test|' returned FALSE. ()']
+##teamcity[testFinished name='endsWithFailure(endsWithFailure 5)']
+##teamcity[testStarted name='failureInMiddle(failureInMiddle_data 1)']
+##teamcity[testFinished name='failureInMiddle(failureInMiddle_data 1)']
+##teamcity[testStarted name='failureInMiddle(failureInMiddle_data 2)']
+##teamcity[testFinished name='failureInMiddle(failureInMiddle_data 2)']
+##teamcity[testStarted name='failureInMiddle(failureInMiddle_data 3)']
+##teamcity[testFailed name='failureInMiddle(failureInMiddle_data 3)' message='Failure! |[Loc: tst_datatable.cpp(83)|]' details='|'test|' returned FALSE. ()']
+##teamcity[testFinished name='failureInMiddle(failureInMiddle_data 3)']
+##teamcity[testStarted name='failureInMiddle(failureInMiddle_data 4)']
+##teamcity[testFinished name='failureInMiddle(failureInMiddle_data 4)']
+##teamcity[testStarted name='failureInMiddle(failureInMiddle_data 5)']
+##teamcity[testFinished name='failureInMiddle(failureInMiddle_data 5)']
+##teamcity[testStarted name='fiveIsolatedFailures(fiveIsolatedFailures_data 1)']
+##teamcity[testFailed name='fiveIsolatedFailures(fiveIsolatedFailures_data 1)' message='Failure! |[Loc: tst_datatable.cpp(165)|]' details='|'!test|' returned FALSE. ()']
+##teamcity[testFinished name='fiveIsolatedFailures(fiveIsolatedFailures_data 1)']
+##teamcity[testStarted name='fiveIsolatedFailures(fiveIsolatedFailures_data 2)']
+##teamcity[testFailed name='fiveIsolatedFailures(fiveIsolatedFailures_data 2)' message='Failure! |[Loc: tst_datatable.cpp(165)|]' details='|'!test|' returned FALSE. ()']
+##teamcity[testFinished name='fiveIsolatedFailures(fiveIsolatedFailures_data 2)']
+##teamcity[testStarted name='fiveIsolatedFailures(fiveIsolatedFailures_data 3)']
+##teamcity[testFailed name='fiveIsolatedFailures(fiveIsolatedFailures_data 3)' message='Failure! |[Loc: tst_datatable.cpp(165)|]' details='|'!test|' returned FALSE. ()']
+##teamcity[testFinished name='fiveIsolatedFailures(fiveIsolatedFailures_data 3)']
+##teamcity[testStarted name='fiveIsolatedFailures(fiveIsolatedFailures_data 4)']
+##teamcity[testFailed name='fiveIsolatedFailures(fiveIsolatedFailures_data 4)' message='Failure! |[Loc: tst_datatable.cpp(165)|]' details='|'!test|' returned FALSE. ()']
+##teamcity[testFinished name='fiveIsolatedFailures(fiveIsolatedFailures_data 4)']
+##teamcity[testStarted name='fiveIsolatedFailures(fiveIsolatedFailures_data 5)']
+##teamcity[testFailed name='fiveIsolatedFailures(fiveIsolatedFailures_data 5)' message='Failure! |[Loc: tst_datatable.cpp(165)|]' details='|'!test|' returned FALSE. ()']
+##teamcity[testFinished name='fiveIsolatedFailures(fiveIsolatedFailures_data 5)']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_DataTable']
diff --git a/tests/auto/testlib/selftests/expected_datetime.teamcity b/tests/auto/testlib/selftests/expected_datetime.teamcity
new file mode 100644
index 0000000000..4a4909b001
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_datetime.teamcity
@@ -0,0 +1,19 @@
+##teamcity[testSuiteStarted name='tst_DateTime']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='dateTime()']
+##teamcity[testFailed name='dateTime()' message='Failure! |[Loc: tst_datetime.cpp(57)|]' details='Compared values are not the same|n Actual (local): 2000/05/03 04:03:04.000|[UTC+00:02|]|n Expected (utc) : 2000/05/03 04:03:04.000|[UTC|]']
+##teamcity[testFinished name='dateTime()']
+##teamcity[testStarted name='qurl(empty urls)']
+##teamcity[testFinished name='qurl(empty urls)']
+##teamcity[testStarted name='qurl(empty rhs)']
+##teamcity[testFailed name='qurl(empty rhs)' message='Failure! |[Loc: tst_datetime.cpp(65)|]' details='Compared values are not the same|n Actual (operandA): http://example.com|n Expected (operandB): Invalid URL:']
+##teamcity[testFinished name='qurl(empty rhs)']
+##teamcity[testStarted name='qurl(empty lhs)']
+##teamcity[testFailed name='qurl(empty lhs)' message='Failure! |[Loc: tst_datetime.cpp(65)|]' details='Compared values are not the same|n Actual (operandA): Invalid URL: |n Expected (operandB): http://example.com']
+##teamcity[testFinished name='qurl(empty lhs)']
+##teamcity[testStarted name='qurl(same urls)']
+##teamcity[testFinished name='qurl(same urls)']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_DateTime']
diff --git a/tests/auto/testlib/selftests/expected_exceptionthrow.teamcity b/tests/auto/testlib/selftests/expected_exceptionthrow.teamcity
new file mode 100644
index 0000000000..87dff56581
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_exceptionthrow.teamcity
@@ -0,0 +1,7 @@
+##teamcity[testSuiteStarted name='tst_Exception']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='throwException()']
+##teamcity[testFailed name='throwException()' message='Failure! |[Loc: qtestcase.cpp(1707)|]' details='Caught unhandled exception']
+##teamcity[testFinished name='throwException()']
+##teamcity[testSuiteFinished name='tst_Exception']
diff --git a/tests/auto/testlib/selftests/expected_expectfail.teamcity b/tests/auto/testlib/selftests/expected_expectfail.teamcity
new file mode 100644
index 0000000000..e54c93d62c
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_expectfail.teamcity
@@ -0,0 +1,65 @@
+##teamcity[testSuiteStarted name='tst_ExpectFail']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='xfailAndContinue()']
+##teamcity[testStdOut name='xfailAndContinue()' out='QDEBUG: begin|nXFAIL |[Loc: tst_expectfail.cpp(70)|]: This should xfail|nQDEBUG: after']
+##teamcity[testFinished name='xfailAndContinue()']
+##teamcity[testStarted name='xfailAndAbort()']
+##teamcity[testStdOut name='xfailAndAbort()' out='QDEBUG: begin|nXFAIL |[Loc: tst_expectfail.cpp(78)|]: This should xfail']
+##teamcity[testFinished name='xfailAndAbort()']
+##teamcity[testStarted name='xfailTwice()']
+##teamcity[testFailed name='xfailTwice()' message='Failure! |[Loc: tst_expectfail.cpp(88)|]' details='Already expecting a fail']
+##teamcity[testFinished name='xfailTwice()']
+##teamcity[testStarted name='xfailWithQString()']
+##teamcity[testStdOut name='xfailWithQString()' out='XFAIL |[Loc: tst_expectfail.cpp(97)|]: A string|nXFAIL |[Loc: tst_expectfail.cpp(102)|]: Bug 5 (The message)']
+##teamcity[testFinished name='xfailWithQString()']
+##teamcity[testStarted name='xfailDataDrivenWithQVerify(Pass 1)']
+##teamcity[testFinished name='xfailDataDrivenWithQVerify(Pass 1)']
+##teamcity[testStarted name='xfailDataDrivenWithQVerify(Pass 2)']
+##teamcity[testFinished name='xfailDataDrivenWithQVerify(Pass 2)']
+##teamcity[testStarted name='xfailDataDrivenWithQVerify(Abort)']
+##teamcity[testStdOut name='xfailDataDrivenWithQVerify(Abort)' out='XFAIL |[Loc: tst_expectfail.cpp(131)|]: This test should xfail']
+##teamcity[testFinished name='xfailDataDrivenWithQVerify(Abort)']
+##teamcity[testStarted name='xfailDataDrivenWithQVerify(Continue)']
+##teamcity[testStdOut name='xfailDataDrivenWithQVerify(Continue)' out='XFAIL |[Loc: tst_expectfail.cpp(131)|]: This test should xfail']
+##teamcity[testFinished name='xfailDataDrivenWithQVerify(Continue)']
+##teamcity[testStarted name='xfailDataDrivenWithQCompare(Pass 1)']
+##teamcity[testFinished name='xfailDataDrivenWithQCompare(Pass 1)']
+##teamcity[testStarted name='xfailDataDrivenWithQCompare(Pass 2)']
+##teamcity[testFinished name='xfailDataDrivenWithQCompare(Pass 2)']
+##teamcity[testStarted name='xfailDataDrivenWithQCompare(Abort)']
+##teamcity[testStdOut name='xfailDataDrivenWithQCompare(Abort)' out='XFAIL |[Loc: tst_expectfail.cpp(165)|]: This test should xfail']
+##teamcity[testFinished name='xfailDataDrivenWithQCompare(Abort)']
+##teamcity[testStarted name='xfailDataDrivenWithQCompare(Continue)']
+##teamcity[testStdOut name='xfailDataDrivenWithQCompare(Continue)' out='XFAIL |[Loc: tst_expectfail.cpp(165)|]: This test should xfail']
+##teamcity[testFinished name='xfailDataDrivenWithQCompare(Continue)']
+##teamcity[testStarted name='xfailOnWrongRow(right row)']
+##teamcity[testFinished name='xfailOnWrongRow(right row)']
+##teamcity[testStarted name='xfailOnAnyRow(first row)']
+##teamcity[testStdOut name='xfailOnAnyRow(first row)' out='XFAIL |[Loc: tst_expectfail.cpp(200)|]: This test should xfail']
+##teamcity[testFinished name='xfailOnAnyRow(first row)']
+##teamcity[testStarted name='xfailOnAnyRow(second row)']
+##teamcity[testStdOut name='xfailOnAnyRow(second row)' out='XFAIL |[Loc: tst_expectfail.cpp(200)|]: This test should xfail']
+##teamcity[testFinished name='xfailOnAnyRow(second row)']
+##teamcity[testStarted name='xfailWithoutVerify(first row)']
+##teamcity[testFailed name='xfailWithoutVerify(first row)' message='Failure!' details='QEXPECT_FAIL was called without any subsequent verification statements']
+##teamcity[testFinished name='xfailWithoutVerify(first row)']
+##teamcity[testStarted name='xfailWithoutVerify(second row)']
+##teamcity[testFailed name='xfailWithoutVerify(second row)' message='Failure!' details='QEXPECT_FAIL was called without any subsequent verification statements']
+##teamcity[testFinished name='xfailWithoutVerify(second row)']
+##teamcity[testStarted name='xpass()']
+##teamcity[testFailed name='xpass()' message='Failure! |[Loc: tst_expectfail.cpp(220)|]' details='|'true|' returned TRUE unexpectedly. ()']
+##teamcity[testFinished name='xpass()']
+##teamcity[testStarted name='xpassDataDrivenWithQVerify(XPass)']
+##teamcity[testFailed name='xpassDataDrivenWithQVerify(XPass)' message='Failure! |[Loc: tst_expectfail.cpp(242)|]' details='|'true|' returned TRUE unexpectedly. ()']
+##teamcity[testFinished name='xpassDataDrivenWithQVerify(XPass)']
+##teamcity[testStarted name='xpassDataDrivenWithQVerify(Pass)']
+##teamcity[testFinished name='xpassDataDrivenWithQVerify(Pass)']
+##teamcity[testStarted name='xpassDataDrivenWithQCompare(XPass)']
+##teamcity[testFailed name='xpassDataDrivenWithQCompare(XPass)' message='Failure! |[Loc: tst_expectfail.cpp(263)|]' details='QCOMPARE(1, 1) returned TRUE unexpectedly.']
+##teamcity[testFinished name='xpassDataDrivenWithQCompare(XPass)']
+##teamcity[testStarted name='xpassDataDrivenWithQCompare(Pass)']
+##teamcity[testFinished name='xpassDataDrivenWithQCompare(Pass)']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_ExpectFail']
diff --git a/tests/auto/testlib/selftests/expected_failcleanup.teamcity b/tests/auto/testlib/selftests/expected_failcleanup.teamcity
new file mode 100644
index 0000000000..b7f4997d65
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_failcleanup.teamcity
@@ -0,0 +1,9 @@
+##teamcity[testSuiteStarted name='tst_FailCleanup']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='aTestFunction()']
+##teamcity[testFinished name='aTestFunction()']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFailed name='cleanupTestCase()' message='Failure! |[Loc: tst_failcleanup.cpp(51)|]' details='|'false|' returned FALSE. (Fail inside cleanupTestCase)']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_FailCleanup']
diff --git a/tests/auto/testlib/selftests/expected_failinit.teamcity b/tests/auto/testlib/selftests/expected_failinit.teamcity
new file mode 100644
index 0000000000..8912d9281b
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_failinit.teamcity
@@ -0,0 +1,7 @@
+##teamcity[testSuiteStarted name='tst_FailInit']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFailed name='initTestCase()' message='Failure! |[Loc: tst_failinit.cpp(47)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_FailInit']
diff --git a/tests/auto/testlib/selftests/expected_failinitdata.teamcity b/tests/auto/testlib/selftests/expected_failinitdata.teamcity
new file mode 100644
index 0000000000..170b465d45
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_failinitdata.teamcity
@@ -0,0 +1,5 @@
+##teamcity[testSuiteStarted name='tst_FailInitData']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFailed name='initTestCase()' message='Failure! |[Loc: tst_failinitdata.cpp(48)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testSuiteFinished name='tst_FailInitData']
diff --git a/tests/auto/testlib/selftests/expected_fetchbogus.teamcity b/tests/auto/testlib/selftests/expected_fetchbogus.teamcity
new file mode 100644
index 0000000000..f6bb3222b2
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_fetchbogus.teamcity
@@ -0,0 +1,8 @@
+##teamcity[testSuiteStarted name='tst_FetchBogus']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='fetchBogus(foo)']
+##teamcity[testFailed name='fetchBogus(foo)' message='Failure! |[Loc: Unknown file(57)|]' details='Received a fatal error.']
+##teamcity[testStdOut name='fetchBogus(foo)' out='QFATAL: QFETCH: Requested testdata |'bubu|' not available, check your _data function.']
+##teamcity[testFinished name='fetchBogus(foo)']
+##teamcity[testSuiteFinished name='tst_FetchBogus']
diff --git a/tests/auto/testlib/selftests/expected_findtestdata.teamcity b/tests/auto/testlib/selftests/expected_findtestdata.teamcity
new file mode 100644
index 0000000000..f1afcff901
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_findtestdata.teamcity
@@ -0,0 +1,9 @@
+##teamcity[testSuiteStarted name='FindTestData']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='paths()']
+##teamcity[testStdOut name='paths()' out='WARNING |[Loc: findtestdata.cpp(146)|]: testdata testfile could not be located!']
+##teamcity[testFinished name='paths()']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='FindTestData']
diff --git a/tests/auto/testlib/selftests/expected_globaldata.teamcity b/tests/auto/testlib/selftests/expected_globaldata.teamcity
new file mode 100644
index 0000000000..4f07d9550c
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_globaldata.teamcity
@@ -0,0 +1,32 @@
+##teamcity[testSuiteStarted name='tst_globaldata']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testStdOut name='initTestCase()' out='QDEBUG: initTestCase initTestCase (null)']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='testGlobal(local 1)']
+##teamcity[testStdOut name='testGlobal(local 1)' out='QDEBUG: init testGlobal local 1|nQDEBUG: global: false|nQDEBUG: local: false|nQDEBUG: cleanup testGlobal local 1']
+##teamcity[testFinished name='testGlobal(local 1)']
+##teamcity[testStarted name='testGlobal(local 2)']
+##teamcity[testStdOut name='testGlobal(local 2)' out='QDEBUG: init testGlobal local 2|nQDEBUG: global: false|nQDEBUG: local: true|nQDEBUG: cleanup testGlobal local 2']
+##teamcity[testFinished name='testGlobal(local 2)']
+##teamcity[testStarted name='testGlobal(local 1)']
+##teamcity[testStdOut name='testGlobal(local 1)' out='QDEBUG: init testGlobal local 1|nQDEBUG: global: true|nQDEBUG: local: false|nQDEBUG: cleanup testGlobal local 1']
+##teamcity[testFinished name='testGlobal(local 1)']
+##teamcity[testStarted name='testGlobal(local 2)']
+##teamcity[testStdOut name='testGlobal(local 2)' out='QDEBUG: init testGlobal local 2|nQDEBUG: global: true|nQDEBUG: local: true|nQDEBUG: cleanup testGlobal local 2']
+##teamcity[testFinished name='testGlobal(local 2)']
+##teamcity[testIgnored name='skip()' message='skipping |[Loc: tst_globaldata.cpp(121)|]']
+##teamcity[testIgnored name='skipLocal(local 1)' message='skipping |[Loc: tst_globaldata.cpp(141)|]']
+##teamcity[testIgnored name='skipLocal(local 2)' message='skipping |[Loc: tst_globaldata.cpp(141)|]']
+##teamcity[testStarted name='skipSingle(local 1)']
+##teamcity[testStdOut name='skipSingle(local 1)' out='QDEBUG: init skipLocal local 1|nQDEBUG: cleanup skipLocal local 1|nQDEBUG: init skipLocal local 2|nQDEBUG: cleanup skipLocal local 2|nQDEBUG: init skipSingle local 1|nQDEBUG: global: false local: false|nQDEBUG: cleanup skipSingle local 1']
+##teamcity[testFinished name='skipSingle(local 1)']
+##teamcity[testStarted name='skipSingle(local 2)']
+##teamcity[testStdOut name='skipSingle(local 2)' out='QDEBUG: init skipSingle local 2|nQDEBUG: global: false local: true|nQDEBUG: cleanup skipSingle local 2']
+##teamcity[testFinished name='skipSingle(local 2)']
+##teamcity[testIgnored name='skipSingle(local 1)' message='skipping |[Loc: tst_globaldata.cpp(135)|]']
+##teamcity[testStdOut name='skipSingle(local 2)' out='QDEBUG: init skipSingle local 1|nQDEBUG: cleanup skipSingle local 1|nQDEBUG: init skipSingle local 2|nQDEBUG: global: true local: true|nQDEBUG: cleanup skipSingle local 2']
+##teamcity[testFinished name='skipSingle(local 2)']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testStdOut name='cleanupTestCase()' out='QDEBUG: cleanupTestCase cleanupTestCase (null)']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_globaldata']
diff --git a/tests/auto/testlib/selftests/expected_longstring.teamcity b/tests/auto/testlib/selftests/expected_longstring.teamcity
new file mode 100644
index 0000000000..4eb2837c8e
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_longstring.teamcity
@@ -0,0 +1,9 @@
+##teamcity[testSuiteStarted name='tst_LongString']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='failWithLongString()']
+##teamcity[testFailed name='failWithLongString()' message='Failure! |[Loc: tst_longstring.cpp(59)|]' details='Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui.|n|nEtiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia.|n|nNam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi.|n|nCurabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis.|n|nAenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.']
+##teamcity[testFinished name='failWithLongString()']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_LongString']
diff --git a/tests/auto/testlib/selftests/expected_maxwarnings.teamcity b/tests/auto/testlib/selftests/expected_maxwarnings.teamcity
new file mode 100644
index 0000000000..3aea752cf1
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_maxwarnings.teamcity
@@ -0,0 +1,9 @@
+##teamcity[testSuiteStarted name='MaxWarnings']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='warn()']
+##teamcity[testStdOut name='warn()' out='QWARN: 0|nQWARN: 1|nQWARN: 2|nQWARN: 3|nQWARN: 4|nQWARN: 5|nQWARN: 6|nQWARN: 7|nQWARN: 8|nQWARN: 9|nQWARN: 10|nQWARN: 11|nQWARN: 12|nQWARN: 13|nQWARN: 14|nQWARN: 15|nQWARN: 16|nQWARN: 17|nQWARN: 18|nQWARN: 19|nQWARN: 20|nQWARN: 21|nQWARN: 22|nQWARN: 23|nQWARN: 24|nQWARN: 25|nQWARN: 26|nQWARN: 27|nQWARN: 28|nQWARN: 29|nQWARN: 30|nQWARN: 31|nQWARN: 32|nQWARN: 33|nQWARN: 34|nQWARN: 35|nQWARN: 36|nQWARN: 37|nQWARN: 38|nQWARN: 39|nQWARN: 40|nQWARN: 41|nQWARN: 42|nQWARN: 43|nQWARN: 44|nQWARN: 45|nQWARN: 46|nQWARN: 47|nQWARN: 48|nQWARN: 49|nQWARN: 50|nQWARN: 51|nQWARN: 52|nQWARN: 53|nQWARN: 54|nQWARN: 55|nQWARN: 56|nQWARN: 57|nQWARN: 58|nQWARN: 59|nQWARN: 60|nQWARN: 61|nQWARN: 62|nQWARN: 63|nQWARN: 64|nQWARN: 65|nQWARN: 66|nQWARN: 67|nQWARN: 68|nQWARN: 69|nQWARN: 70|nQWARN: 71|nQWARN: 72|nQWARN: 73|nQWARN: 74|nQWARN: 75|nQWARN: 76|nQWARN: 77|nQWARN: 78|nQWARN: 79|nQWARN: 80|nQWARN: 81|nQWARN: 82|nQWARN: 83|nQWARN: 84|nQWARN: 85|nQWARN: 86|nQWARN: 87|nQWARN: 88|nQWARN: 89|nQWARN: 90|nQWARN: 91|nQWARN: 92|nQWARN: 93|nQWARN: 94|nQWARN: 95|nQWARN: 96|nQWARN: 97|nQWARN: 98|nQWARN: 99|nQWARN: 100|nQWARN: 101|nQWARN: 102|nQWARN: 103|nQWARN: 104|nQWARN: 105|nQWARN: 106|nQWARN: 107|nQWARN: 108|nQWARN: 109|nQWARN: 110|nQWARN: 111|nQWARN: 112|nQWARN: 113|nQWARN: 114|nQWARN: 115|nQWARN: 116|nQWARN: 117|nQWARN: 118|nQWARN: 119|nQWARN: 120|nQWARN: 121|nQWARN: 122|nQWARN: 123|nQWARN: 124|nQWARN: 125|nQWARN: 126|nQWARN: 127|nQWARN: 128|nQWARN: 129|nQWARN: 130|nQWARN: 131|nQWARN: 132|nQWARN: 133|nQWARN: 134|nQWARN: 135|nQWARN: 136|nQWARN: 137|nQWARN: 138|nQWARN: 139|nQWARN: 140|nQWARN: 141|nQWARN: 142|nQWARN: 143|nQWARN: 144|nQWARN: 145|nQWARN: 146|nQWARN: 147|nQWARN: 148|nQWARN: 149|nQWARN: 150|nQWARN: 151|nQWARN: 152|nQWARN: 153|nQWARN: 154|nQWARN: 155|nQWARN: 156|nQWARN: 157|nQWARN: 158|nQWARN: 159|nQWARN: 160|nQWARN: 161|nQWARN: 162|nQWARN: 163|nQWARN: 164|nQWARN: 165|nQWARN: 166|nQWARN: 167|nQWARN: 168|nQWARN: 169|nQWARN: 170|nQWARN: 171|nQWARN: 172|nQWARN: 173|nQWARN: 174|nQWARN: 175|nQWARN: 176|nQWARN: 177|nQWARN: 178|nQWARN: 179|nQWARN: 180|nQWARN: 181|nQWARN: 182|nQWARN: 183|nQWARN: 184|nQWARN: 185|nQWARN: 186|nQWARN: 187|nQWARN: 188|nQWARN: 189|nQWARN: 190|nQWARN: 191|nQWARN: 192|nQWARN: 193|nQWARN: 194|nQWARN: 195|nQWARN: 196|nQWARN: 197|nQWARN: 198|nQWARN: 199|nQWARN: 200|nQWARN: 201|nQWARN: 202|nQWARN: 203|nQWARN: 204|nQWARN: 205|nQWARN: 206|nQWARN: 207|nQWARN: 208|nQWARN: 209|nQWARN: 210|nQWARN: 211|nQWARN: 212|nQWARN: 213|nQWARN: 214|nQWARN: 215|nQWARN: 216|nQWARN: 217|nQWARN: 218|nQWARN: 219|nQWARN: 220|nQWARN: 221|nQWARN: 222|nQWARN: 223|nQWARN: 224|nQWARN: 225|nQWARN: 226|nQWARN: 227|nQWARN: 228|nQWARN: 229|nQWARN: 230|nQWARN: 231|nQWARN: 232|nQWARN: 233|nQWARN: 234|nQWARN: 235|nQWARN: 236|nQWARN: 237|nQWARN: 238|nQWARN: 239|nQWARN: 240|nQWARN: 241|nQWARN: 242|nQWARN: 243|nQWARN: 244|nQWARN: 245|nQWARN: 246|nQWARN: 247|nQWARN: 248|nQWARN: 249|nQWARN: 250|nQWARN: 251|nQWARN: 252|nQWARN: 253|nQWARN: 254|nQWARN: 255|nQWARN: 256|nQWARN: 257|nQWARN: 258|nQWARN: 259|nQWARN: 260|nQWARN: 261|nQWARN: 262|nQWARN: 263|nQWARN: 264|nQWARN: 265|nQWARN: 266|nQWARN: 267|nQWARN: 268|nQWARN: 269|nQWARN: 270|nQWARN: 271|nQWARN: 272|nQWARN: 273|nQWARN: 274|nQWARN: 275|nQWARN: 276|nQWARN: 277|nQWARN: 278|nQWARN: 279|nQWARN: 280|nQWARN: 281|nQWARN: 282|nQWARN: 283|nQWARN: 284|nQWARN: 285|nQWARN: 286|nQWARN: 287|nQWARN: 288|nQWARN: 289|nQWARN: 290|nQWARN: 291|nQWARN: 292|nQWARN: 293|nQWARN: 294|nQWARN: 295|nQWARN: 296|nQWARN: 297|nQWARN: 298|nQWARN: 299|nQWARN: 300|nQWARN: 301|nQWARN: 302|nQWARN: 303|nQWARN: 304|nQWARN: 305|nQWARN: 306|nQWARN: 307|nQWARN: 308|nQWARN: 309|nQWARN: 310|nQWARN: 311|nQWARN: 312|nQWARN: 313|nQWARN: 314|nQWARN: 315|nQWARN: 316|nQWARN: 317|nQWARN: 318|nQWARN: 319|nQWARN: 320|nQWARN: 321|nQWARN: 322|nQWARN: 323|nQWARN: 324|nQWARN: 325|nQWARN: 326|nQWARN: 327|nQWARN: 328|nQWARN: 329|nQWARN: 330|nQWARN: 331|nQWARN: 332|nQWARN: 333|nQWARN: 334|nQWARN: 335|nQWARN: 336|nQWARN: 337|nQWARN: 338|nQWARN: 339|nQWARN: 340|nQWARN: 341|nQWARN: 342|nQWARN: 343|nQWARN: 344|nQWARN: 345|nQWARN: 346|nQWARN: 347|nQWARN: 348|nQWARN: 349|nQWARN: 350|nQWARN: 351|nQWARN: 352|nQWARN: 353|nQWARN: 354|nQWARN: 355|nQWARN: 356|nQWARN: 357|nQWARN: 358|nQWARN: 359|nQWARN: 360|nQWARN: 361|nQWARN: 362|nQWARN: 363|nQWARN: 364|nQWARN: 365|nQWARN: 366|nQWARN: 367|nQWARN: 368|nQWARN: 369|nQWARN: 370|nQWARN: 371|nQWARN: 372|nQWARN: 373|nQWARN: 374|nQWARN: 375|nQWARN: 376|nQWARN: 377|nQWARN: 378|nQWARN: 379|nQWARN: 380|nQWARN: 381|nQWARN: 382|nQWARN: 383|nQWARN: 384|nQWARN: 385|nQWARN: 386|nQWARN: 387|nQWARN: 388|nQWARN: 389|nQWARN: 390|nQWARN: 391|nQWARN: 392|nQWARN: 393|nQWARN: 394|nQWARN: 395|nQWARN: 396|nQWARN: 397|nQWARN: 398|nQWARN: 399|nQWARN: 400|nQWARN: 401|nQWARN: 402|nQWARN: 403|nQWARN: 404|nQWARN: 405|nQWARN: 406|nQWARN: 407|nQWARN: 408|nQWARN: 409|nQWARN: 410|nQWARN: 411|nQWARN: 412|nQWARN: 413|nQWARN: 414|nQWARN: 415|nQWARN: 416|nQWARN: 417|nQWARN: 418|nQWARN: 419|nQWARN: 420|nQWARN: 421|nQWARN: 422|nQWARN: 423|nQWARN: 424|nQWARN: 425|nQWARN: 426|nQWARN: 427|nQWARN: 428|nQWARN: 429|nQWARN: 430|nQWARN: 431|nQWARN: 432|nQWARN: 433|nQWARN: 434|nQWARN: 435|nQWARN: 436|nQWARN: 437|nQWARN: 438|nQWARN: 439|nQWARN: 440|nQWARN: 441|nQWARN: 442|nQWARN: 443|nQWARN: 444|nQWARN: 445|nQWARN: 446|nQWARN: 447|nQWARN: 448|nQWARN: 449|nQWARN: 450|nQWARN: 451|nQWARN: 452|nQWARN: 453|nQWARN: 454|nQWARN: 455|nQWARN: 456|nQWARN: 457|nQWARN: 458|nQWARN: 459|nQWARN: 460|nQWARN: 461|nQWARN: 462|nQWARN: 463|nQWARN: 464|nQWARN: 465|nQWARN: 466|nQWARN: 467|nQWARN: 468|nQWARN: 469|nQWARN: 470|nQWARN: 471|nQWARN: 472|nQWARN: 473|nQWARN: 474|nQWARN: 475|nQWARN: 476|nQWARN: 477|nQWARN: 478|nQWARN: 479|nQWARN: 480|nQWARN: 481|nQWARN: 482|nQWARN: 483|nQWARN: 484|nQWARN: 485|nQWARN: 486|nQWARN: 487|nQWARN: 488|nQWARN: 489|nQWARN: 490|nQWARN: 491|nQWARN: 492|nQWARN: 493|nQWARN: 494|nQWARN: 495|nQWARN: 496|nQWARN: 497|nQWARN: 498|nQWARN: 499|nQWARN: 500|nQWARN: 501|nQWARN: 502|nQWARN: 503|nQWARN: 504|nQWARN: 505|nQWARN: 506|nQWARN: 507|nQWARN: 508|nQWARN: 509|nQWARN: 510|nQWARN: 511|nQWARN: 512|nQWARN: 513|nQWARN: 514|nQWARN: 515|nQWARN: 516|nQWARN: 517|nQWARN: 518|nQWARN: 519|nQWARN: 520|nQWARN: 521|nQWARN: 522|nQWARN: 523|nQWARN: 524|nQWARN: 525|nQWARN: 526|nQWARN: 527|nQWARN: 528|nQWARN: 529|nQWARN: 530|nQWARN: 531|nQWARN: 532|nQWARN: 533|nQWARN: 534|nQWARN: 535|nQWARN: 536|nQWARN: 537|nQWARN: 538|nQWARN: 539|nQWARN: 540|nQWARN: 541|nQWARN: 542|nQWARN: 543|nQWARN: 544|nQWARN: 545|nQWARN: 546|nQWARN: 547|nQWARN: 548|nQWARN: 549|nQWARN: 550|nQWARN: 551|nQWARN: 552|nQWARN: 553|nQWARN: 554|nQWARN: 555|nQWARN: 556|nQWARN: 557|nQWARN: 558|nQWARN: 559|nQWARN: 560|nQWARN: 561|nQWARN: 562|nQWARN: 563|nQWARN: 564|nQWARN: 565|nQWARN: 566|nQWARN: 567|nQWARN: 568|nQWARN: 569|nQWARN: 570|nQWARN: 571|nQWARN: 572|nQWARN: 573|nQWARN: 574|nQWARN: 575|nQWARN: 576|nQWARN: 577|nQWARN: 578|nQWARN: 579|nQWARN: 580|nQWARN: 581|nQWARN: 582|nQWARN: 583|nQWARN: 584|nQWARN: 585|nQWARN: 586|nQWARN: 587|nQWARN: 588|nQWARN: 589|nQWARN: 590|nQWARN: 591|nQWARN: 592|nQWARN: 593|nQWARN: 594|nQWARN: 595|nQWARN: 596|nQWARN: 597|nQWARN: 598|nQWARN: 599|nQWARN: 600|nQWARN: 601|nQWARN: 602|nQWARN: 603|nQWARN: 604|nQWARN: 605|nQWARN: 606|nQWARN: 607|nQWARN: 608|nQWARN: 609|nQWARN: 610|nQWARN: 611|nQWARN: 612|nQWARN: 613|nQWARN: 614|nQWARN: 615|nQWARN: 616|nQWARN: 617|nQWARN: 618|nQWARN: 619|nQWARN: 620|nQWARN: 621|nQWARN: 622|nQWARN: 623|nQWARN: 624|nQWARN: 625|nQWARN: 626|nQWARN: 627|nQWARN: 628|nQWARN: 629|nQWARN: 630|nQWARN: 631|nQWARN: 632|nQWARN: 633|nQWARN: 634|nQWARN: 635|nQWARN: 636|nQWARN: 637|nQWARN: 638|nQWARN: 639|nQWARN: 640|nQWARN: 641|nQWARN: 642|nQWARN: 643|nQWARN: 644|nQWARN: 645|nQWARN: 646|nQWARN: 647|nQWARN: 648|nQWARN: 649|nQWARN: 650|nQWARN: 651|nQWARN: 652|nQWARN: 653|nQWARN: 654|nQWARN: 655|nQWARN: 656|nQWARN: 657|nQWARN: 658|nQWARN: 659|nQWARN: 660|nQWARN: 661|nQWARN: 662|nQWARN: 663|nQWARN: 664|nQWARN: 665|nQWARN: 666|nQWARN: 667|nQWARN: 668|nQWARN: 669|nQWARN: 670|nQWARN: 671|nQWARN: 672|nQWARN: 673|nQWARN: 674|nQWARN: 675|nQWARN: 676|nQWARN: 677|nQWARN: 678|nQWARN: 679|nQWARN: 680|nQWARN: 681|nQWARN: 682|nQWARN: 683|nQWARN: 684|nQWARN: 685|nQWARN: 686|nQWARN: 687|nQWARN: 688|nQWARN: 689|nQWARN: 690|nQWARN: 691|nQWARN: 692|nQWARN: 693|nQWARN: 694|nQWARN: 695|nQWARN: 696|nQWARN: 697|nQWARN: 698|nQWARN: 699|nQWARN: 700|nQWARN: 701|nQWARN: 702|nQWARN: 703|nQWARN: 704|nQWARN: 705|nQWARN: 706|nQWARN: 707|nQWARN: 708|nQWARN: 709|nQWARN: 710|nQWARN: 711|nQWARN: 712|nQWARN: 713|nQWARN: 714|nQWARN: 715|nQWARN: 716|nQWARN: 717|nQWARN: 718|nQWARN: 719|nQWARN: 720|nQWARN: 721|nQWARN: 722|nQWARN: 723|nQWARN: 724|nQWARN: 725|nQWARN: 726|nQWARN: 727|nQWARN: 728|nQWARN: 729|nQWARN: 730|nQWARN: 731|nQWARN: 732|nQWARN: 733|nQWARN: 734|nQWARN: 735|nQWARN: 736|nQWARN: 737|nQWARN: 738|nQWARN: 739|nQWARN: 740|nQWARN: 741|nQWARN: 742|nQWARN: 743|nQWARN: 744|nQWARN: 745|nQWARN: 746|nQWARN: 747|nQWARN: 748|nQWARN: 749|nQWARN: 750|nQWARN: 751|nQWARN: 752|nQWARN: 753|nQWARN: 754|nQWARN: 755|nQWARN: 756|nQWARN: 757|nQWARN: 758|nQWARN: 759|nQWARN: 760|nQWARN: 761|nQWARN: 762|nQWARN: 763|nQWARN: 764|nQWARN: 765|nQWARN: 766|nQWARN: 767|nQWARN: 768|nQWARN: 769|nQWARN: 770|nQWARN: 771|nQWARN: 772|nQWARN: 773|nQWARN: 774|nQWARN: 775|nQWARN: 776|nQWARN: 777|nQWARN: 778|nQWARN: 779|nQWARN: 780|nQWARN: 781|nQWARN: 782|nQWARN: 783|nQWARN: 784|nQWARN: 785|nQWARN: 786|nQWARN: 787|nQWARN: 788|nQWARN: 789|nQWARN: 790|nQWARN: 791|nQWARN: 792|nQWARN: 793|nQWARN: 794|nQWARN: 795|nQWARN: 796|nQWARN: 797|nQWARN: 798|nQWARN: 799|nQWARN: 800|nQWARN: 801|nQWARN: 802|nQWARN: 803|nQWARN: 804|nQWARN: 805|nQWARN: 806|nQWARN: 807|nQWARN: 808|nQWARN: 809|nQWARN: 810|nQWARN: 811|nQWARN: 812|nQWARN: 813|nQWARN: 814|nQWARN: 815|nQWARN: 816|nQWARN: 817|nQWARN: 818|nQWARN: 819|nQWARN: 820|nQWARN: 821|nQWARN: 822|nQWARN: 823|nQWARN: 824|nQWARN: 825|nQWARN: 826|nQWARN: 827|nQWARN: 828|nQWARN: 829|nQWARN: 830|nQWARN: 831|nQWARN: 832|nQWARN: 833|nQWARN: 834|nQWARN: 835|nQWARN: 836|nQWARN: 837|nQWARN: 838|nQWARN: 839|nQWARN: 840|nQWARN: 841|nQWARN: 842|nQWARN: 843|nQWARN: 844|nQWARN: 845|nQWARN: 846|nQWARN: 847|nQWARN: 848|nQWARN: 849|nQWARN: 850|nQWARN: 851|nQWARN: 852|nQWARN: 853|nQWARN: 854|nQWARN: 855|nQWARN: 856|nQWARN: 857|nQWARN: 858|nQWARN: 859|nQWARN: 860|nQWARN: 861|nQWARN: 862|nQWARN: 863|nQWARN: 864|nQWARN: 865|nQWARN: 866|nQWARN: 867|nQWARN: 868|nQWARN: 869|nQWARN: 870|nQWARN: 871|nQWARN: 872|nQWARN: 873|nQWARN: 874|nQWARN: 875|nQWARN: 876|nQWARN: 877|nQWARN: 878|nQWARN: 879|nQWARN: 880|nQWARN: 881|nQWARN: 882|nQWARN: 883|nQWARN: 884|nQWARN: 885|nQWARN: 886|nQWARN: 887|nQWARN: 888|nQWARN: 889|nQWARN: 890|nQWARN: 891|nQWARN: 892|nQWARN: 893|nQWARN: 894|nQWARN: 895|nQWARN: 896|nQWARN: 897|nQWARN: 898|nQWARN: 899|nQWARN: 900|nQWARN: 901|nQWARN: 902|nQWARN: 903|nQWARN: 904|nQWARN: 905|nQWARN: 906|nQWARN: 907|nQWARN: 908|nQWARN: 909|nQWARN: 910|nQWARN: 911|nQWARN: 912|nQWARN: 913|nQWARN: 914|nQWARN: 915|nQWARN: 916|nQWARN: 917|nQWARN: 918|nQWARN: 919|nQWARN: 920|nQWARN: 921|nQWARN: 922|nQWARN: 923|nQWARN: 924|nQWARN: 925|nQWARN: 926|nQWARN: 927|nQWARN: 928|nQWARN: 929|nQWARN: 930|nQWARN: 931|nQWARN: 932|nQWARN: 933|nQWARN: 934|nQWARN: 935|nQWARN: 936|nQWARN: 937|nQWARN: 938|nQWARN: 939|nQWARN: 940|nQWARN: 941|nQWARN: 942|nQWARN: 943|nQWARN: 944|nQWARN: 945|nQWARN: 946|nQWARN: 947|nQWARN: 948|nQWARN: 949|nQWARN: 950|nQWARN: 951|nQWARN: 952|nQWARN: 953|nQWARN: 954|nQWARN: 955|nQWARN: 956|nQWARN: 957|nQWARN: 958|nQWARN: 959|nQWARN: 960|nQWARN: 961|nQWARN: 962|nQWARN: 963|nQWARN: 964|nQWARN: 965|nQWARN: 966|nQWARN: 967|nQWARN: 968|nQWARN: 969|nQWARN: 970|nQWARN: 971|nQWARN: 972|nQWARN: 973|nQWARN: 974|nQWARN: 975|nQWARN: 976|nQWARN: 977|nQWARN: 978|nQWARN: 979|nQWARN: 980|nQWARN: 981|nQWARN: 982|nQWARN: 983|nQWARN: 984|nQWARN: 985|nQWARN: 986|nQWARN: 987|nQWARN: 988|nQWARN: 989|nQWARN: 990|nQWARN: 991|nQWARN: 992|nQWARN: 993|nQWARN: 994|nQWARN: 995|nQWARN: 996|nQWARN: 997|nQWARN: 998|nQWARN: 999|nQWARN: 1000|nQWARN: 1001|nQWARN: 1002|nQWARN: 1003|nQWARN: 1004|nQWARN: 1005|nQWARN: 1006|nQWARN: 1007|nQWARN: 1008|nQWARN: 1009|nQWARN: 1010|nQWARN: 1011|nQWARN: 1012|nQWARN: 1013|nQWARN: 1014|nQWARN: 1015|nQWARN: 1016|nQWARN: 1017|nQWARN: 1018|nQWARN: 1019|nQWARN: 1020|nQWARN: 1021|nQWARN: 1022|nQWARN: 1023|nQWARN: 1024|nQWARN: 1025|nQWARN: 1026|nQWARN: 1027|nQWARN: 1028|nQWARN: 1029|nQWARN: 1030|nQWARN: 1031|nQWARN: 1032|nQWARN: 1033|nQWARN: 1034|nQWARN: 1035|nQWARN: 1036|nQWARN: 1037|nQWARN: 1038|nQWARN: 1039|nQWARN: 1040|nQWARN: 1041|nQWARN: 1042|nQWARN: 1043|nQWARN: 1044|nQWARN: 1045|nQWARN: 1046|nQWARN: 1047|nQWARN: 1048|nQWARN: 1049|nQWARN: 1050|nQWARN: 1051|nQWARN: 1052|nQWARN: 1053|nQWARN: 1054|nQWARN: 1055|nQWARN: 1056|nQWARN: 1057|nQWARN: 1058|nQWARN: 1059|nQWARN: 1060|nQWARN: 1061|nQWARN: 1062|nQWARN: 1063|nQWARN: 1064|nQWARN: 1065|nQWARN: 1066|nQWARN: 1067|nQWARN: 1068|nQWARN: 1069|nQWARN: 1070|nQWARN: 1071|nQWARN: 1072|nQWARN: 1073|nQWARN: 1074|nQWARN: 1075|nQWARN: 1076|nQWARN: 1077|nQWARN: 1078|nQWARN: 1079|nQWARN: 1080|nQWARN: 1081|nQWARN: 1082|nQWARN: 1083|nQWARN: 1084|nQWARN: 1085|nQWARN: 1086|nQWARN: 1087|nQWARN: 1088|nQWARN: 1089|nQWARN: 1090|nQWARN: 1091|nQWARN: 1092|nQWARN: 1093|nQWARN: 1094|nQWARN: 1095|nQWARN: 1096|nQWARN: 1097|nQWARN: 1098|nQWARN: 1099|nQWARN: 1100|nQWARN: 1101|nQWARN: 1102|nQWARN: 1103|nQWARN: 1104|nQWARN: 1105|nQWARN: 1106|nQWARN: 1107|nQWARN: 1108|nQWARN: 1109|nQWARN: 1110|nQWARN: 1111|nQWARN: 1112|nQWARN: 1113|nQWARN: 1114|nQWARN: 1115|nQWARN: 1116|nQWARN: 1117|nQWARN: 1118|nQWARN: 1119|nQWARN: 1120|nQWARN: 1121|nQWARN: 1122|nQWARN: 1123|nQWARN: 1124|nQWARN: 1125|nQWARN: 1126|nQWARN: 1127|nQWARN: 1128|nQWARN: 1129|nQWARN: 1130|nQWARN: 1131|nQWARN: 1132|nQWARN: 1133|nQWARN: 1134|nQWARN: 1135|nQWARN: 1136|nQWARN: 1137|nQWARN: 1138|nQWARN: 1139|nQWARN: 1140|nQWARN: 1141|nQWARN: 1142|nQWARN: 1143|nQWARN: 1144|nQWARN: 1145|nQWARN: 1146|nQWARN: 1147|nQWARN: 1148|nQWARN: 1149|nQWARN: 1150|nQWARN: 1151|nQWARN: 1152|nQWARN: 1153|nQWARN: 1154|nQWARN: 1155|nQWARN: 1156|nQWARN: 1157|nQWARN: 1158|nQWARN: 1159|nQWARN: 1160|nQWARN: 1161|nQWARN: 1162|nQWARN: 1163|nQWARN: 1164|nQWARN: 1165|nQWARN: 1166|nQWARN: 1167|nQWARN: 1168|nQWARN: 1169|nQWARN: 1170|nQWARN: 1171|nQWARN: 1172|nQWARN: 1173|nQWARN: 1174|nQWARN: 1175|nQWARN: 1176|nQWARN: 1177|nQWARN: 1178|nQWARN: 1179|nQWARN: 1180|nQWARN: 1181|nQWARN: 1182|nQWARN: 1183|nQWARN: 1184|nQWARN: 1185|nQWARN: 1186|nQWARN: 1187|nQWARN: 1188|nQWARN: 1189|nQWARN: 1190|nQWARN: 1191|nQWARN: 1192|nQWARN: 1193|nQWARN: 1194|nQWARN: 1195|nQWARN: 1196|nQWARN: 1197|nQWARN: 1198|nQWARN: 1199|nQWARN: 1200|nQWARN: 1201|nQWARN: 1202|nQWARN: 1203|nQWARN: 1204|nQWARN: 1205|nQWARN: 1206|nQWARN: 1207|nQWARN: 1208|nQWARN: 1209|nQWARN: 1210|nQWARN: 1211|nQWARN: 1212|nQWARN: 1213|nQWARN: 1214|nQWARN: 1215|nQWARN: 1216|nQWARN: 1217|nQWARN: 1218|nQWARN: 1219|nQWARN: 1220|nQWARN: 1221|nQWARN: 1222|nQWARN: 1223|nQWARN: 1224|nQWARN: 1225|nQWARN: 1226|nQWARN: 1227|nQWARN: 1228|nQWARN: 1229|nQWARN: 1230|nQWARN: 1231|nQWARN: 1232|nQWARN: 1233|nQWARN: 1234|nQWARN: 1235|nQWARN: 1236|nQWARN: 1237|nQWARN: 1238|nQWARN: 1239|nQWARN: 1240|nQWARN: 1241|nQWARN: 1242|nQWARN: 1243|nQWARN: 1244|nQWARN: 1245|nQWARN: 1246|nQWARN: 1247|nQWARN: 1248|nQWARN: 1249|nQWARN: 1250|nQWARN: 1251|nQWARN: 1252|nQWARN: 1253|nQWARN: 1254|nQWARN: 1255|nQWARN: 1256|nQWARN: 1257|nQWARN: 1258|nQWARN: 1259|nQWARN: 1260|nQWARN: 1261|nQWARN: 1262|nQWARN: 1263|nQWARN: 1264|nQWARN: 1265|nQWARN: 1266|nQWARN: 1267|nQWARN: 1268|nQWARN: 1269|nQWARN: 1270|nQWARN: 1271|nQWARN: 1272|nQWARN: 1273|nQWARN: 1274|nQWARN: 1275|nQWARN: 1276|nQWARN: 1277|nQWARN: 1278|nQWARN: 1279|nQWARN: 1280|nQWARN: 1281|nQWARN: 1282|nQWARN: 1283|nQWARN: 1284|nQWARN: 1285|nQWARN: 1286|nQWARN: 1287|nQWARN: 1288|nQWARN: 1289|nQWARN: 1290|nQWARN: 1291|nQWARN: 1292|nQWARN: 1293|nQWARN: 1294|nQWARN: 1295|nQWARN: 1296|nQWARN: 1297|nQWARN: 1298|nQWARN: 1299|nQWARN: 1300|nQWARN: 1301|nQWARN: 1302|nQWARN: 1303|nQWARN: 1304|nQWARN: 1305|nQWARN: 1306|nQWARN: 1307|nQWARN: 1308|nQWARN: 1309|nQWARN: 1310|nQWARN: 1311|nQWARN: 1312|nQWARN: 1313|nQWARN: 1314|nQWARN: 1315|nQWARN: 1316|nQWARN: 1317|nQWARN: 1318|nQWARN: 1319|nQWARN: 1320|nQWARN: 1321|nQWARN: 1322|nQWARN: 1323|nQWARN: 1324|nQWARN: 1325|nQWARN: 1326|nQWARN: 1327|nQWARN: 1328|nQWARN: 1329|nQWARN: 1330|nQWARN: 1331|nQWARN: 1332|nQWARN: 1333|nQWARN: 1334|nQWARN: 1335|nQWARN: 1336|nQWARN: 1337|nQWARN: 1338|nQWARN: 1339|nQWARN: 1340|nQWARN: 1341|nQWARN: 1342|nQWARN: 1343|nQWARN: 1344|nQWARN: 1345|nQWARN: 1346|nQWARN: 1347|nQWARN: 1348|nQWARN: 1349|nQWARN: 1350|nQWARN: 1351|nQWARN: 1352|nQWARN: 1353|nQWARN: 1354|nQWARN: 1355|nQWARN: 1356|nQWARN: 1357|nQWARN: 1358|nQWARN: 1359|nQWARN: 1360|nQWARN: 1361|nQWARN: 1362|nQWARN: 1363|nQWARN: 1364|nQWARN: 1365|nQWARN: 1366|nQWARN: 1367|nQWARN: 1368|nQWARN: 1369|nQWARN: 1370|nQWARN: 1371|nQWARN: 1372|nQWARN: 1373|nQWARN: 1374|nQWARN: 1375|nQWARN: 1376|nQWARN: 1377|nQWARN: 1378|nQWARN: 1379|nQWARN: 1380|nQWARN: 1381|nQWARN: 1382|nQWARN: 1383|nQWARN: 1384|nQWARN: 1385|nQWARN: 1386|nQWARN: 1387|nQWARN: 1388|nQWARN: 1389|nQWARN: 1390|nQWARN: 1391|nQWARN: 1392|nQWARN: 1393|nQWARN: 1394|nQWARN: 1395|nQWARN: 1396|nQWARN: 1397|nQWARN: 1398|nQWARN: 1399|nQWARN: 1400|nQWARN: 1401|nQWARN: 1402|nQWARN: 1403|nQWARN: 1404|nQWARN: 1405|nQWARN: 1406|nQWARN: 1407|nQWARN: 1408|nQWARN: 1409|nQWARN: 1410|nQWARN: 1411|nQWARN: 1412|nQWARN: 1413|nQWARN: 1414|nQWARN: 1415|nQWARN: 1416|nQWARN: 1417|nQWARN: 1418|nQWARN: 1419|nQWARN: 1420|nQWARN: 1421|nQWARN: 1422|nQWARN: 1423|nQWARN: 1424|nQWARN: 1425|nQWARN: 1426|nQWARN: 1427|nQWARN: 1428|nQWARN: 1429|nQWARN: 1430|nQWARN: 1431|nQWARN: 1432|nQWARN: 1433|nQWARN: 1434|nQWARN: 1435|nQWARN: 1436|nQWARN: 1437|nQWARN: 1438|nQWARN: 1439|nQWARN: 1440|nQWARN: 1441|nQWARN: 1442|nQWARN: 1443|nQWARN: 1444|nQWARN: 1445|nQWARN: 1446|nQWARN: 1447|nQWARN: 1448|nQWARN: 1449|nQWARN: 1450|nQWARN: 1451|nQWARN: 1452|nQWARN: 1453|nQWARN: 1454|nQWARN: 1455|nQWARN: 1456|nQWARN: 1457|nQWARN: 1458|nQWARN: 1459|nQWARN: 1460|nQWARN: 1461|nQWARN: 1462|nQWARN: 1463|nQWARN: 1464|nQWARN: 1465|nQWARN: 1466|nQWARN: 1467|nQWARN: 1468|nQWARN: 1469|nQWARN: 1470|nQWARN: 1471|nQWARN: 1472|nQWARN: 1473|nQWARN: 1474|nQWARN: 1475|nQWARN: 1476|nQWARN: 1477|nQWARN: 1478|nQWARN: 1479|nQWARN: 1480|nQWARN: 1481|nQWARN: 1482|nQWARN: 1483|nQWARN: 1484|nQWARN: 1485|nQWARN: 1486|nQWARN: 1487|nQWARN: 1488|nQWARN: 1489|nQWARN: 1490|nQWARN: 1491|nQWARN: 1492|nQWARN: 1493|nQWARN: 1494|nQWARN: 1495|nQWARN: 1496|nQWARN: 1497|nQWARN: 1498|nQWARN: 1499|nQWARN: 1500|nQWARN: 1501|nQWARN: 1502|nQWARN: 1503|nQWARN: 1504|nQWARN: 1505|nQWARN: 1506|nQWARN: 1507|nQWARN: 1508|nQWARN: 1509|nQWARN: 1510|nQWARN: 1511|nQWARN: 1512|nQWARN: 1513|nQWARN: 1514|nQWARN: 1515|nQWARN: 1516|nQWARN: 1517|nQWARN: 1518|nQWARN: 1519|nQWARN: 1520|nQWARN: 1521|nQWARN: 1522|nQWARN: 1523|nQWARN: 1524|nQWARN: 1525|nQWARN: 1526|nQWARN: 1527|nQWARN: 1528|nQWARN: 1529|nQWARN: 1530|nQWARN: 1531|nQWARN: 1532|nQWARN: 1533|nQWARN: 1534|nQWARN: 1535|nQWARN: 1536|nQWARN: 1537|nQWARN: 1538|nQWARN: 1539|nQWARN: 1540|nQWARN: 1541|nQWARN: 1542|nQWARN: 1543|nQWARN: 1544|nQWARN: 1545|nQWARN: 1546|nQWARN: 1547|nQWARN: 1548|nQWARN: 1549|nQWARN: 1550|nQWARN: 1551|nQWARN: 1552|nQWARN: 1553|nQWARN: 1554|nQWARN: 1555|nQWARN: 1556|nQWARN: 1557|nQWARN: 1558|nQWARN: 1559|nQWARN: 1560|nQWARN: 1561|nQWARN: 1562|nQWARN: 1563|nQWARN: 1564|nQWARN: 1565|nQWARN: 1566|nQWARN: 1567|nQWARN: 1568|nQWARN: 1569|nQWARN: 1570|nQWARN: 1571|nQWARN: 1572|nQWARN: 1573|nQWARN: 1574|nQWARN: 1575|nQWARN: 1576|nQWARN: 1577|nQWARN: 1578|nQWARN: 1579|nQWARN: 1580|nQWARN: 1581|nQWARN: 1582|nQWARN: 1583|nQWARN: 1584|nQWARN: 1585|nQWARN: 1586|nQWARN: 1587|nQWARN: 1588|nQWARN: 1589|nQWARN: 1590|nQWARN: 1591|nQWARN: 1592|nQWARN: 1593|nQWARN: 1594|nQWARN: 1595|nQWARN: 1596|nQWARN: 1597|nQWARN: 1598|nQWARN: 1599|nQWARN: 1600|nQWARN: 1601|nQWARN: 1602|nQWARN: 1603|nQWARN: 1604|nQWARN: 1605|nQWARN: 1606|nQWARN: 1607|nQWARN: 1608|nQWARN: 1609|nQWARN: 1610|nQWARN: 1611|nQWARN: 1612|nQWARN: 1613|nQWARN: 1614|nQWARN: 1615|nQWARN: 1616|nQWARN: 1617|nQWARN: 1618|nQWARN: 1619|nQWARN: 1620|nQWARN: 1621|nQWARN: 1622|nQWARN: 1623|nQWARN: 1624|nQWARN: 1625|nQWARN: 1626|nQWARN: 1627|nQWARN: 1628|nQWARN: 1629|nQWARN: 1630|nQWARN: 1631|nQWARN: 1632|nQWARN: 1633|nQWARN: 1634|nQWARN: 1635|nQWARN: 1636|nQWARN: 1637|nQWARN: 1638|nQWARN: 1639|nQWARN: 1640|nQWARN: 1641|nQWARN: 1642|nQWARN: 1643|nQWARN: 1644|nQWARN: 1645|nQWARN: 1646|nQWARN: 1647|nQWARN: 1648|nQWARN: 1649|nQWARN: 1650|nQWARN: 1651|nQWARN: 1652|nQWARN: 1653|nQWARN: 1654|nQWARN: 1655|nQWARN: 1656|nQWARN: 1657|nQWARN: 1658|nQWARN: 1659|nQWARN: 1660|nQWARN: 1661|nQWARN: 1662|nQWARN: 1663|nQWARN: 1664|nQWARN: 1665|nQWARN: 1666|nQWARN: 1667|nQWARN: 1668|nQWARN: 1669|nQWARN: 1670|nQWARN: 1671|nQWARN: 1672|nQWARN: 1673|nQWARN: 1674|nQWARN: 1675|nQWARN: 1676|nQWARN: 1677|nQWARN: 1678|nQWARN: 1679|nQWARN: 1680|nQWARN: 1681|nQWARN: 1682|nQWARN: 1683|nQWARN: 1684|nQWARN: 1685|nQWARN: 1686|nQWARN: 1687|nQWARN: 1688|nQWARN: 1689|nQWARN: 1690|nQWARN: 1691|nQWARN: 1692|nQWARN: 1693|nQWARN: 1694|nQWARN: 1695|nQWARN: 1696|nQWARN: 1697|nQWARN: 1698|nQWARN: 1699|nQWARN: 1700|nQWARN: 1701|nQWARN: 1702|nQWARN: 1703|nQWARN: 1704|nQWARN: 1705|nQWARN: 1706|nQWARN: 1707|nQWARN: 1708|nQWARN: 1709|nQWARN: 1710|nQWARN: 1711|nQWARN: 1712|nQWARN: 1713|nQWARN: 1714|nQWARN: 1715|nQWARN: 1716|nQWARN: 1717|nQWARN: 1718|nQWARN: 1719|nQWARN: 1720|nQWARN: 1721|nQWARN: 1722|nQWARN: 1723|nQWARN: 1724|nQWARN: 1725|nQWARN: 1726|nQWARN: 1727|nQWARN: 1728|nQWARN: 1729|nQWARN: 1730|nQWARN: 1731|nQWARN: 1732|nQWARN: 1733|nQWARN: 1734|nQWARN: 1735|nQWARN: 1736|nQWARN: 1737|nQWARN: 1738|nQWARN: 1739|nQWARN: 1740|nQWARN: 1741|nQWARN: 1742|nQWARN: 1743|nQWARN: 1744|nQWARN: 1745|nQWARN: 1746|nQWARN: 1747|nQWARN: 1748|nQWARN: 1749|nQWARN: 1750|nQWARN: 1751|nQWARN: 1752|nQWARN: 1753|nQWARN: 1754|nQWARN: 1755|nQWARN: 1756|nQWARN: 1757|nQWARN: 1758|nQWARN: 1759|nQWARN: 1760|nQWARN: 1761|nQWARN: 1762|nQWARN: 1763|nQWARN: 1764|nQWARN: 1765|nQWARN: 1766|nQWARN: 1767|nQWARN: 1768|nQWARN: 1769|nQWARN: 1770|nQWARN: 1771|nQWARN: 1772|nQWARN: 1773|nQWARN: 1774|nQWARN: 1775|nQWARN: 1776|nQWARN: 1777|nQWARN: 1778|nQWARN: 1779|nQWARN: 1780|nQWARN: 1781|nQWARN: 1782|nQWARN: 1783|nQWARN: 1784|nQWARN: 1785|nQWARN: 1786|nQWARN: 1787|nQWARN: 1788|nQWARN: 1789|nQWARN: 1790|nQWARN: 1791|nQWARN: 1792|nQWARN: 1793|nQWARN: 1794|nQWARN: 1795|nQWARN: 1796|nQWARN: 1797|nQWARN: 1798|nQWARN: 1799|nQWARN: 1800|nQWARN: 1801|nQWARN: 1802|nQWARN: 1803|nQWARN: 1804|nQWARN: 1805|nQWARN: 1806|nQWARN: 1807|nQWARN: 1808|nQWARN: 1809|nQWARN: 1810|nQWARN: 1811|nQWARN: 1812|nQWARN: 1813|nQWARN: 1814|nQWARN: 1815|nQWARN: 1816|nQWARN: 1817|nQWARN: 1818|nQWARN: 1819|nQWARN: 1820|nQWARN: 1821|nQWARN: 1822|nQWARN: 1823|nQWARN: 1824|nQWARN: 1825|nQWARN: 1826|nQWARN: 1827|nQWARN: 1828|nQWARN: 1829|nQWARN: 1830|nQWARN: 1831|nQWARN: 1832|nQWARN: 1833|nQWARN: 1834|nQWARN: 1835|nQWARN: 1836|nQWARN: 1837|nQWARN: 1838|nQWARN: 1839|nQWARN: 1840|nQWARN: 1841|nQWARN: 1842|nQWARN: 1843|nQWARN: 1844|nQWARN: 1845|nQWARN: 1846|nQWARN: 1847|nQWARN: 1848|nQWARN: 1849|nQWARN: 1850|nQWARN: 1851|nQWARN: 1852|nQWARN: 1853|nQWARN: 1854|nQWARN: 1855|nQWARN: 1856|nQWARN: 1857|nQWARN: 1858|nQWARN: 1859|nQWARN: 1860|nQWARN: 1861|nQWARN: 1862|nQWARN: 1863|nQWARN: 1864|nQWARN: 1865|nQWARN: 1866|nQWARN: 1867|nQWARN: 1868|nQWARN: 1869|nQWARN: 1870|nQWARN: 1871|nQWARN: 1872|nQWARN: 1873|nQWARN: 1874|nQWARN: 1875|nQWARN: 1876|nQWARN: 1877|nQWARN: 1878|nQWARN: 1879|nQWARN: 1880|nQWARN: 1881|nQWARN: 1882|nQWARN: 1883|nQWARN: 1884|nQWARN: 1885|nQWARN: 1886|nQWARN: 1887|nQWARN: 1888|nQWARN: 1889|nQWARN: 1890|nQWARN: 1891|nQWARN: 1892|nQWARN: 1893|nQWARN: 1894|nQWARN: 1895|nQWARN: 1896|nQWARN: 1897|nQWARN: 1898|nQWARN: 1899|nQWARN: 1900|nQWARN: 1901|nQWARN: 1902|nQWARN: 1903|nQWARN: 1904|nQWARN: 1905|nQWARN: 1906|nQWARN: 1907|nQWARN: 1908|nQWARN: 1909|nQWARN: 1910|nQWARN: 1911|nQWARN: 1912|nQWARN: 1913|nQWARN: 1914|nQWARN: 1915|nQWARN: 1916|nQWARN: 1917|nQWARN: 1918|nQWARN: 1919|nQWARN: 1920|nQWARN: 1921|nQWARN: 1922|nQWARN: 1923|nQWARN: 1924|nQWARN: 1925|nQWARN: 1926|nQWARN: 1927|nQWARN: 1928|nQWARN: 1929|nQWARN: 1930|nQWARN: 1931|nQWARN: 1932|nQWARN: 1933|nQWARN: 1934|nQWARN: 1935|nQWARN: 1936|nQWARN: 1937|nQWARN: 1938|nQWARN: 1939|nQWARN: 1940|nQWARN: 1941|nQWARN: 1942|nQWARN: 1943|nQWARN: 1944|nQWARN: 1945|nQWARN: 1946|nQWARN: 1947|nQWARN: 1948|nQWARN: 1949|nQWARN: 1950|nQWARN: 1951|nQWARN: 1952|nQWARN: 1953|nQWARN: 1954|nQWARN: 1955|nQWARN: 1956|nQWARN: 1957|nQWARN: 1958|nQWARN: 1959|nQWARN: 1960|nQWARN: 1961|nQWARN: 1962|nQWARN: 1963|nQWARN: 1964|nQWARN: 1965|nQWARN: 1966|nQWARN: 1967|nQWARN: 1968|nQWARN: 1969|nQWARN: 1970|nQWARN: 1971|nQWARN: 1972|nQWARN: 1973|nQWARN: 1974|nQWARN: 1975|nQWARN: 1976|nQWARN: 1977|nQWARN: 1978|nQWARN: 1979|nQWARN: 1980|nQWARN: 1981|nQWARN: 1982|nQWARN: 1983|nQWARN: 1984|nQWARN: 1985|nQWARN: 1986|nQWARN: 1987|nQWARN: 1988|nQWARN: 1989|nQWARN: 1990|nQWARN: 1991|nQWARN: 1992|nQWARN: 1993|nQWARN: 1994|nQWARN: 1995|nQWARN: 1996|nQWARN: 1997|nQWARN: 1998|nQWARN: 1999|nQWARN: 2000|nQSYSTEM: Maximum amount of warnings exceeded. Use -maxwarnings to override.']
+##teamcity[testFinished name='warn()']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='MaxWarnings']
diff --git a/tests/auto/testlib/selftests/expected_silent.teamcity b/tests/auto/testlib/selftests/expected_silent.teamcity
new file mode 100644
index 0000000000..32ebc56c19
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_silent.teamcity
@@ -0,0 +1,12 @@
+##teamcity[testSuiteStarted name='tst_Silent']
+##teamcity[testStarted name='fail()']
+##teamcity[testFailed name='fail()' message='Failure! |[Loc: tst_silent.cpp(65)|]' details='|'false|' returned FALSE. (This test should fail)']
+##teamcity[testFinished name='fail()']
+##teamcity[testStarted name='xpass()']
+##teamcity[testFailed name='xpass()' message='Failure! |[Loc: tst_silent.cpp(77)|]' details='|'true|' returned TRUE unexpectedly. (This test should XPASS)']
+##teamcity[testFinished name='xpass()']
+##teamcity[testStarted name='messages()']
+##teamcity[testFailed name='messages()' message='Failure! |[Loc: unknown file(0)|]' details='Received a fatal error.']
+##teamcity[testStdOut name='messages()' out='QFATAL: This is a fatal error message that should still appear in silent test output']
+##teamcity[testFinished name='messages()']
+##teamcity[testSuiteFinished name='tst_Silent']
diff --git a/tests/auto/testlib/selftests/expected_singleskip.teamcity b/tests/auto/testlib/selftests/expected_singleskip.teamcity
new file mode 100644
index 0000000000..41f1593a08
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_singleskip.teamcity
@@ -0,0 +1,7 @@
+##teamcity[testSuiteStarted name='tst_SingleSkip']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testIgnored name='myTest()' message='skipping test |[Loc: tst_singleskip.cpp(48)|]']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_SingleSkip']
diff --git a/tests/auto/testlib/selftests/expected_skip.teamcity b/tests/auto/testlib/selftests/expected_skip.teamcity
new file mode 100644
index 0000000000..f7d5e1b642
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_skip.teamcity
@@ -0,0 +1,12 @@
+##teamcity[testSuiteStarted name='tst_Skip']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testIgnored name='test()' message='skipping all |[Loc: tst_skip.cpp(60)|]']
+##teamcity[testIgnored name='emptytest()' message='skipping all |[Loc: tst_skip.cpp(70)|]']
+##teamcity[testIgnored name='singleSkip(local 1)' message='skipping one |[Loc: tst_skip.cpp(89)|]']
+##teamcity[testStarted name='singleSkip(local 2)']
+##teamcity[testStdOut name='singleSkip(local 2)' out='QDEBUG: this line should only be reached once (true)']
+##teamcity[testFinished name='singleSkip(local 2)']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_Skip']
diff --git a/tests/auto/testlib/selftests/expected_skipcleanup.teamcity b/tests/auto/testlib/selftests/expected_skipcleanup.teamcity
new file mode 100644
index 0000000000..f22155e9c2
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_skipcleanup.teamcity
@@ -0,0 +1,7 @@
+##teamcity[testSuiteStarted name='tst_SkipCleanup']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='aTestFunction()']
+##teamcity[testFinished name='aTestFunction()']
+##teamcity[testIgnored name='cleanupTestCase()' message='Skip inside cleanupTestCase. |[Loc: tst_skipcleanup.cpp(51)|]']
+##teamcity[testSuiteFinished name='tst_SkipCleanup']
diff --git a/tests/auto/testlib/selftests/expected_skipinit.teamcity b/tests/auto/testlib/selftests/expected_skipinit.teamcity
new file mode 100644
index 0000000000..f7a2703e89
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_skipinit.teamcity
@@ -0,0 +1,5 @@
+##teamcity[testSuiteStarted name='tst_SkipInit']
+##teamcity[testIgnored name='initTestCase()' message='Skip inside initTestCase. This should skip all tests in the class. |[Loc: tst_skipinit.cpp(47)|]']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_SkipInit']
diff --git a/tests/auto/testlib/selftests/expected_skipinitdata.teamcity b/tests/auto/testlib/selftests/expected_skipinitdata.teamcity
new file mode 100644
index 0000000000..02ac22017b
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_skipinitdata.teamcity
@@ -0,0 +1,3 @@
+##teamcity[testSuiteStarted name='tst_SkipInitData']
+##teamcity[testIgnored name='initTestCase()' message='Skip inside initTestCase_data. This should skip all tests in the class. |[Loc: tst_skipinitdata.cpp(48)|]']
+##teamcity[testSuiteFinished name='tst_SkipInitData']
diff --git a/tests/auto/testlib/selftests/expected_sleep.teamcity b/tests/auto/testlib/selftests/expected_sleep.teamcity
new file mode 100644
index 0000000000..9207edc4bf
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_sleep.teamcity
@@ -0,0 +1,8 @@
+##teamcity[testSuiteStarted name='tst_Sleep']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='sleep()']
+##teamcity[testFinished name='sleep()']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_Sleep']
diff --git a/tests/auto/testlib/selftests/expected_strcmp.teamcity b/tests/auto/testlib/selftests/expected_strcmp.teamcity
new file mode 100644
index 0000000000..5e9d0e274c
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_strcmp.teamcity
@@ -0,0 +1,24 @@
+##teamcity[testSuiteStarted name='tst_StrCmp']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='compareCharStars()']
+##teamcity[testFinished name='compareCharStars()']
+##teamcity[testStarted name='compareByteArray()']
+##teamcity[testFailed name='compareByteArray()' message='Failure! |[Loc: tst_strcmp.cpp(101)|]' details='Compared values are not the same|n Actual (a): "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"...|n Expected (b): "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"...']
+##teamcity[testStdOut name='compareByteArray()' out='XFAIL |[Loc: tst_strcmp.cpp(80)|]: Next test should fail|nXFAIL |[Loc: tst_strcmp.cpp(87)|]: Next test should fail|nXFAIL |[Loc: tst_strcmp.cpp(94)|]: Next test should fail']
+##teamcity[testFinished name='compareByteArray()']
+##teamcity[testStarted name='failByteArray()']
+##teamcity[testFailed name='failByteArray()' message='Failure! |[Loc: tst_strcmp.cpp(107)|]' details='Compared values are not the same|n Actual (QByteArray("abc")): "abc"|n Expected (QByteArray("cba")): "cba"']
+##teamcity[testFinished name='failByteArray()']
+##teamcity[testStarted name='failByteArrayNull()']
+##teamcity[testFailed name='failByteArrayNull()' message='Failure! |[Loc: tst_strcmp.cpp(113)|]' details='Compared values are not the same|n Actual (QByteArray("foo")): "foo"|n Expected (QByteArray()) : ""']
+##teamcity[testFinished name='failByteArrayNull()']
+##teamcity[testStarted name='failByteArrayEmpty()']
+##teamcity[testFailed name='failByteArrayEmpty()' message='Failure! |[Loc: tst_strcmp.cpp(118)|]' details='Compared values are not the same|n Actual (QByteArray("")) : ""|n Expected (QByteArray("foo")): "foo"']
+##teamcity[testFinished name='failByteArrayEmpty()']
+##teamcity[testStarted name='failByteArraySingleChars()']
+##teamcity[testFailed name='failByteArraySingleChars()' message='Failure! |[Loc: tst_strcmp.cpp(125)|]' details='Compared values are not the same|n Actual (QByteArray("6")): "6"|n Expected (QByteArray("7")): "7"']
+##teamcity[testFinished name='failByteArraySingleChars()']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_StrCmp']
diff --git a/tests/auto/testlib/selftests/expected_subtest.teamcity b/tests/auto/testlib/selftests/expected_subtest.teamcity
new file mode 100644
index 0000000000..f9ea60e552
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_subtest.teamcity
@@ -0,0 +1,31 @@
+##teamcity[testSuiteStarted name='tst_Subtest']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testStdOut name='initTestCase()' out='QDEBUG: initTestCase initTestCase (null)']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='test1()']
+##teamcity[testStdOut name='test1()' out='QDEBUG: init test1 (null)|nQDEBUG: test1 test1 (null)|nQDEBUG: cleanup test1 (null)']
+##teamcity[testFinished name='test1()']
+##teamcity[testStarted name='test2(data0)']
+##teamcity[testStdOut name='test2(data0)' out='QDEBUG: test2_data test2 (null)|nQDEBUG: test2_data end|nQDEBUG: init test2 data0|nQDEBUG: test2 test2 data0|nQDEBUG: test2 end|nQDEBUG: cleanup test2 data0']
+##teamcity[testFinished name='test2(data0)']
+##teamcity[testStarted name='test2(data1)']
+##teamcity[testStdOut name='test2(data1)' out='QDEBUG: init test2 data1|nQDEBUG: test2 test2 data1|nQDEBUG: test2 end|nQDEBUG: cleanup test2 data1']
+##teamcity[testFinished name='test2(data1)']
+##teamcity[testStarted name='test2(data2)']
+##teamcity[testStdOut name='test2(data2)' out='QDEBUG: init test2 data2|nQDEBUG: test2 test2 data2|nQDEBUG: test2 end|nQDEBUG: cleanup test2 data2']
+##teamcity[testFinished name='test2(data2)']
+##teamcity[testStarted name='test3(data0)']
+##teamcity[testStdOut name='test3(data0)' out='QDEBUG: test3_data test3 (null)|nQDEBUG: test3_data end|nQDEBUG: init test3 data0|nQDEBUG: test2 test3 data0|nQDEBUG: test2 end|nQDEBUG: cleanup test3 data0']
+##teamcity[testFinished name='test3(data0)']
+##teamcity[testStarted name='test3(data1)']
+##teamcity[testFailed name='test3(data1)' message='Failure! |[Loc: tst_subtest.cpp(146)|]' details='Compared values are not the same|n Actual (str) : "hello1"|n Expected (QString("hello0")): "hello0"']
+##teamcity[testStdOut name='test3(data1)' out='QDEBUG: init test3 data1|nQDEBUG: test2 test3 data1']
+##teamcity[testFinished name='test3(data1)']
+##teamcity[testStarted name='test3(data2)']
+##teamcity[testFailed name='test3(data2)' message='Failure! |[Loc: tst_subtest.cpp(146)|]' details='Compared values are not the same|n Actual (str) : "hello2"|n Expected (QString("hello0")): "hello0"']
+##teamcity[testStdOut name='test3(data2)' out='QDEBUG: cleanup test3 data1|nQDEBUG: init test3 data2|nQDEBUG: test2 test3 data2']
+##teamcity[testFinished name='test3(data2)']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testStdOut name='cleanupTestCase()' out='QDEBUG: cleanup test3 data2|nQDEBUG: cleanupTestCase cleanupTestCase (null)']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_Subtest']
diff --git a/tests/auto/testlib/selftests/expected_verbose1.teamcity b/tests/auto/testlib/selftests/expected_verbose1.teamcity
new file mode 100644
index 0000000000..3d7bd75393
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_verbose1.teamcity
@@ -0,0 +1,68 @@
+##teamcity[testSuiteStarted name='tst_Counting']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='testPassPass(row 1)']
+##teamcity[testFinished name='testPassPass(row 1)']
+##teamcity[testStarted name='testPassPass(row 2)']
+##teamcity[testFinished name='testPassPass(row 2)']
+##teamcity[testStarted name='testPassSkip(row 1)']
+##teamcity[testFinished name='testPassSkip(row 1)']
+##teamcity[testIgnored name='testPassSkip(row 2)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]']
+##teamcity[testStarted name='testPassFail(row 1)']
+##teamcity[testFinished name='testPassFail(row 1)']
+##teamcity[testStarted name='testPassFail(row 2)']
+##teamcity[testFailed name='testPassFail(row 2)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testFinished name='testPassFail(row 2)']
+##teamcity[testIgnored name='testSkipPass(row 1)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]']
+##teamcity[testStarted name='testSkipPass(row 2)']
+##teamcity[testFinished name='testSkipPass(row 2)']
+##teamcity[testIgnored name='testSkipSkip(row 1)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]']
+##teamcity[testIgnored name='testSkipSkip(row 2)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]']
+##teamcity[testIgnored name='testSkipFail(row 1)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]']
+##teamcity[testStarted name='testSkipFail(row 2)']
+##teamcity[testFailed name='testSkipFail(row 2)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testFinished name='testSkipFail(row 2)']
+##teamcity[testStarted name='testFailPass(row 1)']
+##teamcity[testFailed name='testFailPass(row 1)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testFinished name='testFailPass(row 1)']
+##teamcity[testStarted name='testFailPass(row 2)']
+##teamcity[testFinished name='testFailPass(row 2)']
+##teamcity[testStarted name='testFailSkip(row 1)']
+##teamcity[testFailed name='testFailSkip(row 1)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testFinished name='testFailSkip(row 1)']
+##teamcity[testIgnored name='testFailSkip(row 2)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]']
+##teamcity[testStarted name='testFailFail(row 1)']
+##teamcity[testFailed name='testFailFail(row 1)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testFinished name='testFailFail(row 1)']
+##teamcity[testStarted name='testFailFail(row 2)']
+##teamcity[testFailed name='testFailFail(row 2)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testFinished name='testFailFail(row 2)']
+##teamcity[testStarted name='testFailInInit(before)']
+##teamcity[testFinished name='testFailInInit(before)']
+##teamcity[testStarted name='testFailInInit(fail)']
+##teamcity[testFailed name='testFailInInit(fail)' message='Failure! |[Loc: ../counting/tst_counting.cpp(226)|]' details='Fail in init()']
+##teamcity[testFinished name='testFailInInit(fail)']
+##teamcity[testStarted name='testFailInInit(after)']
+##teamcity[testFinished name='testFailInInit(after)']
+##teamcity[testStarted name='testFailInCleanup(before)']
+##teamcity[testFinished name='testFailInCleanup(before)']
+##teamcity[testStarted name='testFailInCleanup(fail)']
+##teamcity[testFailed name='testFailInCleanup(fail)' message='Failure! |[Loc: ../counting/tst_counting.cpp(234)|]' details='Fail in cleanup()']
+##teamcity[testStdOut name='testFailInCleanup(fail)' out='QDEBUG: This test function should execute and then QFAIL in cleanup()']
+##teamcity[testFinished name='testFailInCleanup(fail)']
+##teamcity[testStarted name='testFailInCleanup(after)']
+##teamcity[testFinished name='testFailInCleanup(after)']
+##teamcity[testStarted name='testSkipInInit(before)']
+##teamcity[testFinished name='testSkipInInit(before)']
+##teamcity[testIgnored name='testSkipInInit(skip)' message='Skip in init() |[Loc: ../counting/tst_counting.cpp(228)|]']
+##teamcity[testStarted name='testSkipInInit(after)']
+##teamcity[testFinished name='testSkipInInit(after)']
+##teamcity[testStarted name='testSkipInCleanup(before)']
+##teamcity[testFinished name='testSkipInCleanup(before)']
+##teamcity[testIgnored name='testSkipInCleanup(skip)' message='Skip in cleanup() |[Loc: ../counting/tst_counting.cpp(236)|]']
+##teamcity[testStarted name='testSkipInCleanup(after)']
+##teamcity[testStdOut name='testSkipInCleanup(after)' out='QDEBUG: This test function should execute and then QSKIP in cleanup()']
+##teamcity[testFinished name='testSkipInCleanup(after)']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_Counting']
diff --git a/tests/auto/testlib/selftests/expected_verbose2.teamcity b/tests/auto/testlib/selftests/expected_verbose2.teamcity
new file mode 100644
index 0000000000..749cf384a4
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_verbose2.teamcity
@@ -0,0 +1,80 @@
+##teamcity[testSuiteStarted name='tst_Counting']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='testPassPass(row 1)']
+##teamcity[testStdOut name='testPassPass(row 1)' out='INFO |[Loc: ../counting/tst_counting.cpp(103)|]: QVERIFY(true)|nINFO |[Loc: ../counting/tst_counting.cpp(104)|]: QCOMPARE(2 + 1, 3)']
+##teamcity[testFinished name='testPassPass(row 1)']
+##teamcity[testStarted name='testPassPass(row 2)']
+##teamcity[testStdOut name='testPassPass(row 2)' out='INFO |[Loc: ../counting/tst_counting.cpp(103)|]: QVERIFY(true)|nINFO |[Loc: ../counting/tst_counting.cpp(104)|]: QCOMPARE(2 + 1, 3)']
+##teamcity[testFinished name='testPassPass(row 2)']
+##teamcity[testStarted name='testPassSkip(row 1)']
+##teamcity[testStdOut name='testPassSkip(row 1)' out='INFO |[Loc: ../counting/tst_counting.cpp(103)|]: QVERIFY(true)|nINFO |[Loc: ../counting/tst_counting.cpp(104)|]: QCOMPARE(2 + 1, 3)']
+##teamcity[testFinished name='testPassSkip(row 1)']
+##teamcity[testIgnored name='testPassSkip(row 2)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]']
+##teamcity[testStarted name='testPassFail(row 1)']
+##teamcity[testStdOut name='testPassFail(row 1)' out='INFO |[Loc: ../counting/tst_counting.cpp(103)|]: QVERIFY(true)|nINFO |[Loc: ../counting/tst_counting.cpp(104)|]: QCOMPARE(2 + 1, 3)']
+##teamcity[testFinished name='testPassFail(row 1)']
+##teamcity[testStarted name='testPassFail(row 2)']
+##teamcity[testFailed name='testPassFail(row 2)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testStdOut name='testPassFail(row 2)' out='INFO |[Loc: ../counting/tst_counting.cpp(107)|]: QVERIFY(false)']
+##teamcity[testFinished name='testPassFail(row 2)']
+##teamcity[testIgnored name='testSkipPass(row 1)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]']
+##teamcity[testStarted name='testSkipPass(row 2)']
+##teamcity[testStdOut name='testSkipPass(row 2)' out='INFO |[Loc: ../counting/tst_counting.cpp(103)|]: QVERIFY(true)|nINFO |[Loc: ../counting/tst_counting.cpp(104)|]: QCOMPARE(2 + 1, 3)']
+##teamcity[testFinished name='testSkipPass(row 2)']
+##teamcity[testIgnored name='testSkipSkip(row 1)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]']
+##teamcity[testIgnored name='testSkipSkip(row 2)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]']
+##teamcity[testIgnored name='testSkipFail(row 1)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]']
+##teamcity[testStarted name='testSkipFail(row 2)']
+##teamcity[testFailed name='testSkipFail(row 2)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testStdOut name='testSkipFail(row 2)' out='INFO |[Loc: ../counting/tst_counting.cpp(107)|]: QVERIFY(false)']
+##teamcity[testFinished name='testSkipFail(row 2)']
+##teamcity[testStarted name='testFailPass(row 1)']
+##teamcity[testFailed name='testFailPass(row 1)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testStdOut name='testFailPass(row 1)' out='INFO |[Loc: ../counting/tst_counting.cpp(107)|]: QVERIFY(false)']
+##teamcity[testFinished name='testFailPass(row 1)']
+##teamcity[testStarted name='testFailPass(row 2)']
+##teamcity[testStdOut name='testFailPass(row 2)' out='INFO |[Loc: ../counting/tst_counting.cpp(103)|]: QVERIFY(true)|nINFO |[Loc: ../counting/tst_counting.cpp(104)|]: QCOMPARE(2 + 1, 3)']
+##teamcity[testFinished name='testFailPass(row 2)']
+##teamcity[testStarted name='testFailSkip(row 1)']
+##teamcity[testFailed name='testFailSkip(row 1)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testStdOut name='testFailSkip(row 1)' out='INFO |[Loc: ../counting/tst_counting.cpp(107)|]: QVERIFY(false)']
+##teamcity[testFinished name='testFailSkip(row 1)']
+##teamcity[testIgnored name='testFailSkip(row 2)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]']
+##teamcity[testStarted name='testFailFail(row 1)']
+##teamcity[testFailed name='testFailFail(row 1)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testStdOut name='testFailFail(row 1)' out='INFO |[Loc: ../counting/tst_counting.cpp(107)|]: QVERIFY(false)']
+##teamcity[testFinished name='testFailFail(row 1)']
+##teamcity[testStarted name='testFailFail(row 2)']
+##teamcity[testFailed name='testFailFail(row 2)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()']
+##teamcity[testStdOut name='testFailFail(row 2)' out='INFO |[Loc: ../counting/tst_counting.cpp(107)|]: QVERIFY(false)']
+##teamcity[testFinished name='testFailFail(row 2)']
+##teamcity[testStarted name='testFailInInit(before)']
+##teamcity[testFinished name='testFailInInit(before)']
+##teamcity[testStarted name='testFailInInit(fail)']
+##teamcity[testFailed name='testFailInInit(fail)' message='Failure! |[Loc: ../counting/tst_counting.cpp(226)|]' details='Fail in init()']
+##teamcity[testFinished name='testFailInInit(fail)']
+##teamcity[testStarted name='testFailInInit(after)']
+##teamcity[testFinished name='testFailInInit(after)']
+##teamcity[testStarted name='testFailInCleanup(before)']
+##teamcity[testFinished name='testFailInCleanup(before)']
+##teamcity[testStarted name='testFailInCleanup(fail)']
+##teamcity[testFailed name='testFailInCleanup(fail)' message='Failure! |[Loc: ../counting/tst_counting.cpp(234)|]' details='Fail in cleanup()']
+##teamcity[testStdOut name='testFailInCleanup(fail)' out='QDEBUG: This test function should execute and then QFAIL in cleanup()']
+##teamcity[testFinished name='testFailInCleanup(fail)']
+##teamcity[testStarted name='testFailInCleanup(after)']
+##teamcity[testFinished name='testFailInCleanup(after)']
+##teamcity[testStarted name='testSkipInInit(before)']
+##teamcity[testFinished name='testSkipInInit(before)']
+##teamcity[testIgnored name='testSkipInInit(skip)' message='Skip in init() |[Loc: ../counting/tst_counting.cpp(228)|]']
+##teamcity[testStarted name='testSkipInInit(after)']
+##teamcity[testFinished name='testSkipInInit(after)']
+##teamcity[testStarted name='testSkipInCleanup(before)']
+##teamcity[testFinished name='testSkipInCleanup(before)']
+##teamcity[testIgnored name='testSkipInCleanup(skip)' message='Skip in cleanup() |[Loc: ../counting/tst_counting.cpp(236)|]']
+##teamcity[testStarted name='testSkipInCleanup(after)']
+##teamcity[testStdOut name='testSkipInCleanup(after)' out='QDEBUG: This test function should execute and then QSKIP in cleanup()']
+##teamcity[testFinished name='testSkipInCleanup(after)']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_Counting']
diff --git a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.teamcity b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.teamcity
new file mode 100644
index 0000000000..0d85be4468
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.teamcity
@@ -0,0 +1,30 @@
+##teamcity[testSuiteStarted name='tst_VerifyExceptionThrown']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='testCorrectStdTypes()']
+##teamcity[testFinished name='testCorrectStdTypes()']
+##teamcity[testStarted name='testCorrectStdExceptions()']
+##teamcity[testFinished name='testCorrectStdExceptions()']
+##teamcity[testStarted name='testCorrectMyExceptions()']
+##teamcity[testFinished name='testCorrectMyExceptions()']
+##teamcity[testStarted name='testFailInt()']
+##teamcity[testFailed name='testFailInt()' message='Failure! |[Loc: tst_verifyexceptionthrown.cpp(120)|]' details='Expected exception of type double to be thrown but unknown exception caught']
+##teamcity[testFinished name='testFailInt()']
+##teamcity[testStarted name='testFailStdString()']
+##teamcity[testFailed name='testFailStdString()' message='Failure! |[Loc: tst_verifyexceptionthrown.cpp(125)|]' details='Expected exception of type char* to be thrown but unknown exception caught']
+##teamcity[testFinished name='testFailStdString()']
+##teamcity[testStarted name='testFailStdRuntimeError()']
+##teamcity[testFailed name='testFailStdRuntimeError()' message='Failure! |[Loc: tst_verifyexceptionthrown.cpp(130)|]' details='Expected exception of type std::runtime_error to be thrown but std::exception caught with message: logic error']
+##teamcity[testFinished name='testFailStdRuntimeError()']
+##teamcity[testStarted name='testFailMyException()']
+##teamcity[testFailed name='testFailMyException()' message='Failure! |[Loc: tst_verifyexceptionthrown.cpp(135)|]' details='Expected exception of type MyBaseException to be thrown but std::exception caught with message: logic error']
+##teamcity[testFinished name='testFailMyException()']
+##teamcity[testStarted name='testFailMyDerivedException()']
+##teamcity[testFailed name='testFailMyDerivedException()' message='Failure! |[Loc: tst_verifyexceptionthrown.cpp(140)|]' details='Expected exception of type std::runtime_error to be thrown but std::exception caught with message: MyDerivedException']
+##teamcity[testFinished name='testFailMyDerivedException()']
+##teamcity[testStarted name='testFailNoException()']
+##teamcity[testFailed name='testFailNoException()' message='Failure! |[Loc: tst_verifyexceptionthrown.cpp(145)|]' details='Expected exception of type std::exception to be thrown but no exception caught']
+##teamcity[testFinished name='testFailNoException()']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_VerifyExceptionThrown']
diff --git a/tests/auto/testlib/selftests/expected_warnings.teamcity b/tests/auto/testlib/selftests/expected_warnings.teamcity
new file mode 100644
index 0000000000..f3809a52ca
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_warnings.teamcity
@@ -0,0 +1,25 @@
+##teamcity[testSuiteStarted name='tst_Warnings']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='testWarnings()']
+##teamcity[testStdOut name='testWarnings()' out='QWARN: Warning|nQWARN: Warning|nQDEBUG: Debug|nQDEBUG: Debug|nQINFO: Info|nQINFO: Info|nQDEBUG: Baba|nQDEBUG: Baba|nQDEBUG: Bubublabla|nQWARN: Babablabla']
+##teamcity[testFinished name='testWarnings()']
+##teamcity[testStarted name='testMissingWarnings()']
+##teamcity[testFailed name='testMissingWarnings()' message='Failure!' details='Not all expected messages were received']
+##teamcity[testStdOut name='testMissingWarnings()' out='INFO: Did not receive message: "Warning0"|nINFO: Did not receive message: "Warning1"']
+##teamcity[testFinished name='testMissingWarnings()']
+##teamcity[testStarted name='testMissingWarningsRegularExpression()']
+##teamcity[testFailed name='testMissingWarningsRegularExpression()' message='Failure!' details='Not all expected messages were received']
+##teamcity[testStdOut name='testMissingWarningsRegularExpression()' out='INFO: Did not receive any message matching: "Warning\s\d"']
+##teamcity[testFinished name='testMissingWarningsRegularExpression()']
+##teamcity[testStarted name='testMissingWarningsWithData(first row)']
+##teamcity[testFailed name='testMissingWarningsWithData(first row)' message='Failure!' details='Not all expected messages were received']
+##teamcity[testStdOut name='testMissingWarningsWithData(first row)' out='INFO: Did not receive message: "Warning0"|nINFO: Did not receive message: "Warning1"']
+##teamcity[testFinished name='testMissingWarningsWithData(first row)']
+##teamcity[testStarted name='testMissingWarningsWithData(second row)']
+##teamcity[testFailed name='testMissingWarningsWithData(second row)' message='Failure!' details='Not all expected messages were received']
+##teamcity[testStdOut name='testMissingWarningsWithData(second row)' out='INFO: Did not receive message: "Warning0"|nINFO: Did not receive message: "Warning1"']
+##teamcity[testFinished name='testMissingWarningsWithData(second row)']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_Warnings']
diff --git a/tests/auto/testlib/selftests/expected_xunit.teamcity b/tests/auto/testlib/selftests/expected_xunit.teamcity
new file mode 100644
index 0000000000..e381a081a8
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_xunit.teamcity
@@ -0,0 +1,26 @@
+##teamcity[testSuiteStarted name='tst_Xunit']
+##teamcity[testStarted name='initTestCase()']
+##teamcity[testFinished name='initTestCase()']
+##teamcity[testStarted name='testFunc1()']
+##teamcity[testStdOut name='testFunc1()' out='WARNING |[Loc: tst_xunit.cpp(59)|]: just a QWARN() !']
+##teamcity[testFinished name='testFunc1()']
+##teamcity[testStarted name='testFunc2()']
+##teamcity[testFailed name='testFunc2()' message='Failure! |[Loc: tst_xunit.cpp(66)|]' details='Compared values are not the same|n Actual (2): 2|n Expected (3): 3']
+##teamcity[testStdOut name='testFunc2()' out='QDEBUG: a qDebug() call with comment-ending stuff -->']
+##teamcity[testFinished name='testFunc2()']
+##teamcity[testIgnored name='testFunc3()' message='skipping this function! |[Loc: tst_xunit.cpp(71)|]']
+##teamcity[testStarted name='testFunc4()']
+##teamcity[testFailed name='testFunc4()' message='Failure! |[Loc: tst_xunit.cpp(76)|]' details='a forced failure!']
+##teamcity[testFinished name='testFunc4()']
+##teamcity[testStarted name='testFunc5()']
+##teamcity[testStdOut name='testFunc5()' out='XFAIL |[Loc: tst_xunit.cpp(90)|]: this failure is expected']
+##teamcity[testFinished name='testFunc5()']
+##teamcity[testStarted name='testFunc6()']
+##teamcity[testStdOut name='testFunc6()' out='XFAIL |[Loc: tst_xunit.cpp(96)|]: this failure is also expected']
+##teamcity[testFinished name='testFunc6()']
+##teamcity[testStarted name='testFunc7()']
+##teamcity[testFailed name='testFunc7()' message='Failure! |[Loc: tst_xunit.cpp(102)|]' details='|'true|' returned TRUE unexpectedly. ()']
+##teamcity[testFinished name='testFunc7()']
+##teamcity[testStarted name='cleanupTestCase()']
+##teamcity[testFinished name='cleanupTestCase()']
+##teamcity[testSuiteFinished name='tst_Xunit']
diff --git a/tests/auto/testlib/selftests/selftests.qrc b/tests/auto/testlib/selftests/selftests.qrc
index 715e255e76..3c3fef28d9 100644
--- a/tests/auto/testlib/selftests/selftests.qrc
+++ b/tests/auto/testlib/selftests/selftests.qrc
@@ -1,11 +1,13 @@
<RCC>
- <qresource prefix="/" >
+ <qresource prefix="/">
<file>expected_alive.txt</file>
<file>expected_assert.lightxml</file>
+ <file>expected_assert.teamcity</file>
<file>expected_assert.txt</file>
<file>expected_assert.xml</file>
<file>expected_assert.xunitxml</file>
<file>expected_badxml.lightxml</file>
+ <file>expected_badxml.teamcity</file>
<file>expected_badxml.txt</file>
<file>expected_badxml.xml</file>
<file>expected_badxml.xunitxml</file>
@@ -33,14 +35,17 @@
<file>expected_benchlibwalltime.xunitxml</file>
<file>expected_benchlibwalltime.csv</file>
<file>expected_cmptest.lightxml</file>
+ <file>expected_cmptest.teamcity</file>
<file>expected_cmptest.txt</file>
<file>expected_cmptest.xml</file>
<file>expected_cmptest.xunitxml</file>
<file>expected_commandlinedata.lightxml</file>
+ <file>expected_commandlinedata.teamcity</file>
<file>expected_commandlinedata.txt</file>
<file>expected_commandlinedata.xml</file>
<file>expected_commandlinedata.xunitxml</file>
<file>expected_counting.lightxml</file>
+ <file>expected_counting.teamcity</file>
<file>expected_counting.txt</file>
<file>expected_counting.xml</file>
<file>expected_counting.xunitxml</file>
@@ -48,52 +53,64 @@
<file>expected_crashes_2.txt</file>
<file>expected_crashes_3.txt</file>
<file>expected_datatable.lightxml</file>
+ <file>expected_datatable.teamcity</file>
<file>expected_datatable.txt</file>
<file>expected_datatable.xml</file>
<file>expected_datatable.xunitxml</file>
<file>expected_datetime.lightxml</file>
+ <file>expected_datetime.teamcity</file>
<file>expected_datetime.txt</file>
<file>expected_datetime.xml</file>
<file>expected_datetime.xunitxml</file>
<file>expected_differentexec.txt</file>
<file>expected_exceptionthrow.lightxml</file>
+ <file>expected_exceptionthrow.teamcity</file>
<file>expected_exceptionthrow.txt</file>
<file>expected_exceptionthrow.xml</file>
<file>expected_exceptionthrow.xunitxml</file>
<file>expected_expectfail.lightxml</file>
+ <file>expected_expectfail.teamcity</file>
<file>expected_expectfail.txt</file>
<file>expected_expectfail.xml</file>
<file>expected_expectfail.xunitxml</file>
<file>expected_failcleanup.lightxml</file>
+ <file>expected_failcleanup.teamcity</file>
<file>expected_failcleanup.txt</file>
<file>expected_failcleanup.xml</file>
<file>expected_failcleanup.xunitxml</file>
<file>expected_failinit.lightxml</file>
+ <file>expected_failinit.teamcity</file>
<file>expected_failinit.txt</file>
<file>expected_failinit.xml</file>
<file>expected_failinit.xunitxml</file>
<file>expected_failinitdata.lightxml</file>
+ <file>expected_failinitdata.teamcity</file>
<file>expected_failinitdata.txt</file>
<file>expected_failinitdata.xml</file>
<file>expected_failinitdata.xunitxml</file>
<file>expected_fetchbogus.lightxml</file>
+ <file>expected_fetchbogus.teamcity</file>
<file>expected_fetchbogus.txt</file>
<file>expected_fetchbogus.xml</file>
<file>expected_fetchbogus.xunitxml</file>
<file>expected_findtestdata.lightxml</file>
+ <file>expected_findtestdata.teamcity</file>
<file>expected_findtestdata.txt</file>
<file>expected_findtestdata.xml</file>
<file>expected_findtestdata.xunitxml</file>
<file>expected_float.txt</file>
<file>expected_globaldata.lightxml</file>
+ <file>expected_globaldata.teamcity</file>
<file>expected_globaldata.txt</file>
<file>expected_globaldata.xml</file>
<file>expected_globaldata.xunitxml</file>
<file>expected_longstring.lightxml</file>
+ <file>expected_longstring.teamcity</file>
<file>expected_longstring.txt</file>
<file>expected_longstring.xml</file>
<file>expected_longstring.xunitxml</file>
<file>expected_maxwarnings.lightxml</file>
+ <file>expected_maxwarnings.teamcity</file>
<file>expected_maxwarnings.txt</file>
<file>expected_maxwarnings.xml</file>
<file>expected_maxwarnings.xunitxml</file>
@@ -101,53 +118,67 @@
<file>expected_printdatatags.txt</file>
<file>expected_printdatatagswithglobaltags.txt</file>
<file>expected_qexecstringlist.txt</file>
+ <file>expected_silent.teamcity</file>
<file>expected_silent.txt</file>
<file>expected_singleskip.lightxml</file>
+ <file>expected_singleskip.teamcity</file>
<file>expected_singleskip.txt</file>
<file>expected_singleskip.xml</file>
<file>expected_singleskip.xunitxml</file>
<file>expected_skip.lightxml</file>
+ <file>expected_skip.teamcity</file>
<file>expected_skip.txt</file>
<file>expected_skip.xml</file>
<file>expected_skip.xunitxml</file>
<file>expected_skipcleanup.lightxml</file>
+ <file>expected_skipcleanup.teamcity</file>
<file>expected_skipcleanup.txt</file>
<file>expected_skipcleanup.xml</file>
<file>expected_skipcleanup.xunitxml</file>
<file>expected_skipinit.lightxml</file>
<file>expected_skipinit.txt</file>
+ <file>expected_skipinit.teamcity</file>
<file>expected_skipinit.xml</file>
<file>expected_skipinit.xunitxml</file>
<file>expected_skipinitdata.lightxml</file>
+ <file>expected_skipinitdata.teamcity</file>
<file>expected_skipinitdata.txt</file>
<file>expected_skipinitdata.xml</file>
<file>expected_skipinitdata.xunitxml</file>
+ <file>expected_sleep.teamcity</file>
<file>expected_sleep.txt</file>
<file>expected_strcmp.lightxml</file>
+ <file>expected_strcmp.teamcity</file>
<file>expected_strcmp.txt</file>
<file>expected_strcmp.xml</file>
<file>expected_strcmp.xunitxml</file>
<file>expected_subtest.lightxml</file>
<file>expected_subtest.txt</file>
+ <file>expected_subtest.teamcity</file>
<file>expected_subtest.xml</file>
<file>expected_subtest.xunitxml</file>
<file>expected_verbose1.lightxml</file>
+ <file>expected_verbose1.teamcity</file>
<file>expected_verbose1.txt</file>
<file>expected_verbose1.xml</file>
<file>expected_verbose1.xunitxml</file>
<file>expected_verbose2.lightxml</file>
+ <file>expected_verbose2.teamcity</file>
<file>expected_verbose2.txt</file>
<file>expected_verbose2.xml</file>
<file>expected_verbose2.xunitxml</file>
<file>expected_verifyexceptionthrown.lightxml</file>
+ <file>expected_verifyexceptionthrown.teamcity</file>
<file>expected_verifyexceptionthrown.txt</file>
<file>expected_verifyexceptionthrown.xml</file>
<file>expected_verifyexceptionthrown.xunitxml</file>
<file>expected_warnings.lightxml</file>
+ <file>expected_warnings.teamcity</file>
<file>expected_warnings.txt</file>
<file>expected_warnings.xml</file>
<file>expected_warnings.xunitxml</file>
<file>expected_xunit.lightxml</file>
+ <file>expected_xunit.teamcity</file>
<file>expected_xunit.txt</file>
<file>expected_xunit.xml</file>
<file>expected_xunit.xunitxml</file>
diff --git a/tests/auto/testlib/selftests/tst_selftests.cpp b/tests/auto/testlib/selftests/tst_selftests.cpp
index 3de4f771d5..94002ec75b 100644
--- a/tests/auto/testlib/selftests/tst_selftests.cpp
+++ b/tests/auto/testlib/selftests/tst_selftests.cpp
@@ -233,6 +233,14 @@ QList<LoggerSet> tst_Selftests::allLoggerSets() const
<< LoggerSet("old csv", // benchmarks only
QStringList() << "csv",
QStringList() << "-csv" << "-o" << logName("csv"))
+ << LoggerSet("old stdout teamcity",
+ QStringList() << "stdout teamcity",
+ QStringList() << "-teamcity"
+ )
+ << LoggerSet("old teamcity",
+ QStringList() << "teamcity",
+ QStringList() << "-teamcity" << "-o" << logName("teamcity")
+ )
// Test with new-style options for a single logger
<< LoggerSet("new stdout txt",
QStringList() << "stdout txt",
@@ -272,6 +280,14 @@ QList<LoggerSet> tst_Selftests::allLoggerSets() const
<< LoggerSet("new csv", // benchmarks only
QStringList() << "csv",
QStringList() << "-o" << logName("csv")+",csv")
+ << LoggerSet("new stdout teamcity",
+ QStringList() << "stdout teamcity",
+ QStringList() << "-o" << "-,teamcity"
+ )
+ << LoggerSet("new teamcity",
+ QStringList() << "teamcity",
+ QStringList() << "-o" << logName("teamcity")+",teamcity"
+ )
// Test with two loggers (don't test all 32 combinations, just a sample)
<< LoggerSet("stdout txt + txt",
QStringList() << "stdout txt" << "txt",
@@ -301,6 +317,7 @@ QList<LoggerSet> tst_Selftests::allLoggerSets() const
<< "-o" << logName("lightxml")+",lightxml"
<< "-o" << "-,txt"
<< "-o" << logName("xunitxml")+",xunitxml"
+ << "-o" << logName("teamcity")+",teamcity"
)
;
}
@@ -502,6 +519,9 @@ void tst_Selftests::runSubTest_data()
if (loggerSet.name.contains("csv") && !subtest.startsWith("benchlib"))
continue;
+ if (loggerSet.name.contains("teamcity") && subtest.startsWith("benchlib"))
+ continue; // Skip benchmark for TeamCity logger
+
const bool crashes = subtest == QLatin1String("assert") || subtest == QLatin1String("exceptionthrow")
|| subtest == QLatin1String("fetchbogus") || subtest == QLatin1String("crashedterminate")
|| subtest == QLatin1String("crashes") || subtest == QLatin1String("silent")
@@ -744,8 +764,17 @@ void tst_Selftests::doRunSubTest(QString const& subdir, QStringList const& logge
continue;
}
+ QByteArray expLine = exp.at(i);
+
+ // Special handling for ignoring _FILE_ and _LINE_ if logger is teamcity
+ if (logFormat(logger) == "teamcity") {
+ QRegularExpression teamcityLocRegExp("\\|\\[Loc: .*\\(\\d*\\)\\|\\]");
+ line = QString(line).replace(teamcityLocRegExp, "|[Loc: _FILE_(_LINE_)|]").toLatin1();
+ expLine = QString(expLine).replace(teamcityLocRegExp, "|[Loc: _FILE_(_LINE_)|]").toLatin1();
+ }
+
const QString output(QString::fromLatin1(line));
- const QString expected(QString::fromLatin1(exp.at(i)).replace("@INSERT_QT_VERSION_HERE@", QT_VERSION_STR));
+ const QString expected(QString::fromLatin1(expLine).replace("@INSERT_QT_VERSION_HERE@", QT_VERSION_STR));
if (subdir == "assert" && output.contains("ASSERT: ") && expected.contains("ASSERT: ") && output != expected)
// Q_ASSERT uses __FILE__, the exact contents of which are