diff options
author | Liang Qi <liang.qi@qt.io> | 2019-02-08 09:28:00 +0100 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2019-02-08 12:31:02 +0100 |
commit | fbfacd33be482fa3cf0aa5cffaf7006d538a2f92 (patch) | |
tree | 92da72786b3740e37004623612c4fc1c9640d30f /src/testlib | |
parent | c1f4286a5cbc1794fe7be5bdbbd6a0bf29ef84d4 (diff) | |
parent | 74e04d6ace7aa949db97ae2e46c38a4dc0d4d36a (diff) |
Merge remote-tracking branch 'origin/5.12' into 5.13
Conflicts:
src/android/templates/AndroidManifest.xml
src/network/ssl/qsslsocket_mac.cpp
src/widgets/styles/qstylesheetstyle.cpp
tests/auto/corelib/kernel/qtimer/BLACKLIST
tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
tests/auto/testlib/selftests/expected_blacklisted.lightxml
tests/auto/testlib/selftests/expected_blacklisted.tap
tests/auto/testlib/selftests/expected_blacklisted.teamcity
tests/auto/testlib/selftests/expected_blacklisted.txt
tests/auto/testlib/selftests/expected_blacklisted.xml
tests/auto/testlib/selftests/expected_blacklisted.xunitxml
tests/auto/testlib/selftests/expected_float.tap
tests/auto/testlib/selftests/expected_float.teamcity
tests/auto/testlib/selftests/expected_float.txt
tests/auto/testlib/selftests/expected_float.xunitxml
Done-With: Christian Ehrlicher <ch.ehrlicher@gmx.de>
Done-With: Edward Welbourne <edward.welbourne@qt.io>
Done-With: Timur Pocheptsov <timur.pocheptsov@qt.io>
Change-Id: If93cc432a56ae3ac1b6533d0028e4dc497415a52
Diffstat (limited to 'src/testlib')
-rw-r--r-- | src/testlib/qabstracttestlogger_p.h | 4 | ||||
-rw-r--r-- | src/testlib/qappletestlogger.cpp | 4 | ||||
-rw-r--r-- | src/testlib/qplaintestlogger.cpp | 4 | ||||
-rw-r--r-- | src/testlib/qtaptestlogger.cpp | 17 | ||||
-rw-r--r-- | src/testlib/qteamcitylogger.cpp | 4 | ||||
-rw-r--r-- | src/testlib/qtestcase.cpp | 55 | ||||
-rw-r--r-- | src/testlib/qtestlog.cpp | 18 | ||||
-rw-r--r-- | src/testlib/qtestlog_p.h | 2 | ||||
-rw-r--r-- | src/testlib/qtestresult.cpp | 13 | ||||
-rw-r--r-- | src/testlib/qxmltestlogger.cpp | 4 | ||||
-rw-r--r-- | src/testlib/qxunittestlogger.cpp | 13 |
11 files changed, 125 insertions, 13 deletions
diff --git a/src/testlib/qabstracttestlogger_p.h b/src/testlib/qabstracttestlogger_p.h index 018361b81e..a64e7ea96f 100644 --- a/src/testlib/qabstracttestlogger_p.h +++ b/src/testlib/qabstracttestlogger_p.h @@ -69,7 +69,9 @@ public: Fail, XPass, BlacklistedPass, - BlacklistedFail + BlacklistedFail, + BlacklistedXPass, + BlacklistedXFail }; enum MessageTypes { diff --git a/src/testlib/qappletestlogger.cpp b/src/testlib/qappletestlogger.cpp index 2c1005ad80..8e75da88f8 100644 --- a/src/testlib/qappletestlogger.cpp +++ b/src/testlib/qappletestlogger.cpp @@ -101,6 +101,10 @@ static IncidentClassification incidentTypeToClassification(QAbstractTestLogger:: return IncidentClassification(QtWarningMsg, "bpass"); case QAbstractTestLogger::BlacklistedFail: return IncidentClassification(QtInfoMsg, "bfail"); + case QAbstractTestLogger::BlacklistedXPass: + return IncidentClassification(QtWarningMsg, "bxpass"); + case QAbstractTestLogger::BlacklistedXFail: + return IncidentClassification(QtInfoMsg, "bxfail"); } return IncidentClassification(QtFatalMsg, nullptr); } diff --git a/src/testlib/qplaintestlogger.cpp b/src/testlib/qplaintestlogger.cpp index 853515f2d9..ed53dcdde8 100644 --- a/src/testlib/qplaintestlogger.cpp +++ b/src/testlib/qplaintestlogger.cpp @@ -89,6 +89,10 @@ namespace QTest { return "BPASS "; case QAbstractTestLogger::BlacklistedFail: return "BFAIL "; + case QAbstractTestLogger::BlacklistedXPass: + return "BXPASS "; + case QAbstractTestLogger::BlacklistedXFail: + return "BXFAIL "; } return "??????"; } diff --git a/src/testlib/qtaptestlogger.cpp b/src/testlib/qtaptestlogger.cpp index 37ab89ac91..540b36e273 100644 --- a/src/testlib/qtaptestlogger.cpp +++ b/src/testlib/qtaptestlogger.cpp @@ -43,7 +43,9 @@ #include "qtestresult_p.h" #include "qtestassert.h" -#include <QtCore/qregularexpression.h> +#if QT_CONFIG(regularexpression) +# include <QtCore/qregularexpression.h> +#endif QT_BEGIN_NAMESPACE @@ -121,13 +123,15 @@ void QTapTestLogger::addIncident(IncidentTypes type, const char *description, return; } - bool ok = type == Pass || type == XPass || type == BlacklistedPass; + bool ok = type == Pass || type == XPass || type == BlacklistedPass || type == BlacklistedXPass; QTestCharBuffer directive; - if (type == XFail || type == XPass || type == BlacklistedFail || type == BlacklistedPass) + if (type == XFail || type == XPass || type == BlacklistedFail || type == BlacklistedPass + || type == BlacklistedXFail || type == BlacklistedXPass) { // We treat expected or blacklisted failures/passes as TODO-failures/passes, // which should be treated as soft issues by consumers. Not all do though :/ QTest::qt_asprintf(&directive, " # TODO %s", description); + } int testNumber = QTestLog::totalCount(); if (type == XFail) { @@ -146,6 +150,7 @@ void QTapTestLogger::addIncident(IncidentTypes type, const char *description, outputString(YAML_INDENT "---\n"); if (type != XFail) { +#if QT_CONFIG(regularexpression) // This is fragile, but unfortunately testlib doesn't plumb // the expected and actual values to the loggers (yet). static QRegularExpression verifyRegex( @@ -206,6 +211,12 @@ void QTapTestLogger::addIncident(IncidentTypes type, const char *description, YAML_INDENT "# %s\n", description); outputString(unparsableDescription.data()); } +#else + QTestCharBuffer unparsableDescription; + QTest::qt_asprintf(&unparsableDescription, + YAML_INDENT "# %s\n", description); + outputString(unparsableDescription.data()); +#endif } if (file) { diff --git a/src/testlib/qteamcitylogger.cpp b/src/testlib/qteamcitylogger.cpp index 9cfbe92b7d..577c8e70cd 100644 --- a/src/testlib/qteamcitylogger.cpp +++ b/src/testlib/qteamcitylogger.cpp @@ -66,6 +66,10 @@ namespace QTest { return "BPASS"; case QAbstractTestLogger::BlacklistedFail: return "BFAIL"; + case QAbstractTestLogger::BlacklistedXPass: + return "BXPASS"; + case QAbstractTestLogger::BlacklistedXFail: + return "BXFAIL"; } return "??????"; } diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 4263f9f049..840b4071e2 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -2542,7 +2542,7 @@ bool QTest::qCompare(double const &t1, double const &t2, const char *actual, con */ #define TO_STRING_IMPL(TYPE, FORMAT) \ -template <> Q_TESTLIB_EXPORT char *QTest::toString<TYPE >(const TYPE &t) \ +template <> Q_TESTLIB_EXPORT char *QTest::toString<TYPE>(const TYPE &t) \ { \ char *msg = new char[128]; \ qsnprintf(msg, 128, #FORMAT, t); \ @@ -2565,8 +2565,57 @@ TO_STRING_IMPL(quint64, %llu) TO_STRING_IMPL(bool, %d) TO_STRING_IMPL(signed char, %hhd) TO_STRING_IMPL(unsigned char, %hhu) -TO_STRING_IMPL(float, %g) -TO_STRING_IMPL(double, %lg) + +/*! + \internal + + Be consistent about leading 0 in exponent. + + POSIX specifies that %e (hence %g when using it) uses at least two digits in + the exponent, requiring a leading 0 on single-digit exponents; (at least) + MinGW includes a leading zero also on an already-two-digit exponent, + e.g. 9e-040, which differs from more usual platforms. So massage that away. + */ +static void massageExponent(char *text) +{ + char *p = strchr(text, 'e'); + if (!p) + return; + const char *const end = p + strlen(p); // *end is '\0' + p += (p[1] == '-' || p[1] == '+') ? 2 : 1; + if (p[0] != '0' || end - 2 <= p) + return; + // We have a leading 0 on an exponent of at least two more digits + const char *n = p + 1; + while (end - 2 > n && n[0] == '0') + ++n; + memmove(p, n, end + 1 - n); +} + +// Be consistent about display of infinities and NaNs (snprintf()'s varies, +// notably on MinGW, despite POSIX documenting "[-]inf" or "[-]infinity" for %f, +// %e and %g, uppercasing for their capital versions; similar for "nan"): +#define TO_STRING_FLOAT(TYPE, FORMAT) \ +template <> Q_TESTLIB_EXPORT char *QTest::toString<TYPE>(const TYPE &t) \ +{ \ + char *msg = new char[128]; \ + switch (std::fpclassify(t)) { \ + case FP_INFINITE: \ + qstrncpy(msg, (t < 0 ? "-inf" : "inf"), 128); \ + break; \ + case FP_NAN: \ + qstrncpy(msg, "nan", 128); \ + break; \ + default: \ + qsnprintf(msg, 128, #FORMAT, t); \ + massageExponent(msg); \ + break; \ + } \ + return msg; \ +} + +TO_STRING_FLOAT(float, %g) +TO_STRING_FLOAT(double, %.12lg) template <> Q_TESTLIB_EXPORT char *QTest::toString<qfloat16>(const qfloat16 &t) { diff --git a/src/testlib/qtestlog.cpp b/src/testlib/qtestlog.cpp index e7150260e5..d5f22fd3da 100644 --- a/src/testlib/qtestlog.cpp +++ b/src/testlib/qtestlog.cpp @@ -460,6 +460,24 @@ void QTestLog::addBFail(const char *msg, const char *file, int line) QTest::TestLoggers::addIncident(QAbstractTestLogger::BlacklistedFail, msg, file, line); } +void QTestLog::addBXPass(const char *msg, const char *file, int line) +{ + QTEST_ASSERT(msg); + QTEST_ASSERT(file); + + ++QTest::blacklists; + + QTest::TestLoggers::addIncident(QAbstractTestLogger::BlacklistedXPass, msg, file, line); +} + +void QTestLog::addBXFail(const char *msg, const char *file, int line) +{ + QTEST_ASSERT(msg); + QTEST_ASSERT(file); + + QTest::TestLoggers::addIncident(QAbstractTestLogger::BlacklistedXFail, msg, file, line); +} + void QTestLog::addSkip(const char *msg, const char *file, int line) { QTEST_ASSERT(msg); diff --git a/src/testlib/qtestlog_p.h b/src/testlib/qtestlog_p.h index 600c078ce2..0bdd6290e1 100644 --- a/src/testlib/qtestlog_p.h +++ b/src/testlib/qtestlog_p.h @@ -80,6 +80,8 @@ public: static void addXPass(const char *msg, const char *file, int line); static void addBPass(const char *msg); static void addBFail(const char *msg, const char *file, int line); + static void addBXPass(const char *msg, const char *file, int line); + static void addBXFail(const char *msg, const char *file, int line); static void addSkip(const char *msg, const char *file, int line); static void addBenchmarkResult(const QBenchmarkResult &result); diff --git a/src/testlib/qtestresult.cpp b/src/testlib/qtestresult.cpp index 88e3407c90..a7a4807e06 100644 --- a/src/testlib/qtestresult.cpp +++ b/src/testlib/qtestresult.cpp @@ -218,17 +218,24 @@ static bool checkStatement(bool statement, const char *msg, const char *file, in { if (statement) { if (QTest::expectFailMode) { - QTestLog::addXPass(msg, file, line); + if (QTest::blacklistCurrentTest) + QTestLog::addBXPass(msg, file, line); + else + QTestLog::addXPass(msg, file, line); + + QTest::failed = true; bool doContinue = (QTest::expectFailMode == QTest::Continue); clearExpectFail(); - QTest::failed = true; return doContinue; } return true; } if (QTest::expectFailMode) { - QTestLog::addXFail(QTest::expectFailComment, file, line); + if (QTest::blacklistCurrentTest) + QTestLog::addBXFail(QTest::expectFailComment, file, line); + else + QTestLog::addXFail(QTest::expectFailComment, file, line); bool doContinue = (QTest::expectFailMode == QTest::Continue); clearExpectFail(); return doContinue; diff --git a/src/testlib/qxmltestlogger.cpp b/src/testlib/qxmltestlogger.cpp index 7153c016c5..c47042c3a0 100644 --- a/src/testlib/qxmltestlogger.cpp +++ b/src/testlib/qxmltestlogger.cpp @@ -91,6 +91,10 @@ namespace QTest { return "bpass"; case QAbstractTestLogger::BlacklistedFail: return "bfail"; + case QAbstractTestLogger::BlacklistedXPass: + return "bxpass"; + case QAbstractTestLogger::BlacklistedXFail: + return "bxfail"; } return "??????"; } diff --git a/src/testlib/qxunittestlogger.cpp b/src/testlib/qxunittestlogger.cpp index ec33c29ae5..336edb5994 100644 --- a/src/testlib/qxunittestlogger.cpp +++ b/src/testlib/qxunittestlogger.cpp @@ -180,6 +180,13 @@ void QXunitTestLogger::addIncident(IncidentTypes type, const char *description, ++failureCounter; typeBuf = "bfail"; break; + case QAbstractTestLogger::BlacklistedXPass: + typeBuf = "bxpass"; + break; + case QAbstractTestLogger::BlacklistedXFail: + ++failureCounter; + typeBuf = "bxfail"; + break; default: typeBuf = "??????"; break; @@ -212,11 +219,11 @@ void QXunitTestLogger::addIncident(IncidentTypes type, const char *description, if (!strcmp(oldResult, "pass")) { overwrite = true; } - else if (!strcmp(oldResult, "bpass")) { + else if (!strcmp(oldResult, "bpass") || !strcmp(oldResult, "bxfail")) { overwrite = (type == QAbstractTestLogger::XPass || type == QAbstractTestLogger::Fail) || (type == QAbstractTestLogger::XFail) - || (type == QAbstractTestLogger::BlacklistedFail); + || (type == QAbstractTestLogger::BlacklistedFail) || (type == QAbstractTestLogger::BlacklistedXPass); } - else if (!strcmp(oldResult, "bfail")) { + else if (!strcmp(oldResult, "bfail") || !strcmp(oldResult, "bxpass")) { overwrite = (type == QAbstractTestLogger::XPass || type == QAbstractTestLogger::Fail) || (type == QAbstractTestLogger::XFail); } else if (!strcmp(oldResult, "xfail")) { |