diff options
Diffstat (limited to 'src/testlib')
36 files changed, 463 insertions, 250 deletions
diff --git a/src/testlib/qabstracttestlogger.cpp b/src/testlib/qabstracttestlogger.cpp index 2b54cd410b..ff05dd88c7 100644 --- a/src/testlib/qabstracttestlogger.cpp +++ b/src/testlib/qabstracttestlogger.cpp @@ -87,7 +87,7 @@ QAbstractTestLogger::~QAbstractTestLogger() if (stream != stdout) { fclose(stream); } - stream = 0; + stream = nullptr; } void QAbstractTestLogger::filterUnprintable(char *str) const diff --git a/src/testlib/qabstracttestlogger_p.h b/src/testlib/qabstracttestlogger_p.h index 9bb1d1e80c..e5a1404c16 100644 --- a/src/testlib/qabstracttestlogger_p.h +++ b/src/testlib/qabstracttestlogger_p.h @@ -117,8 +117,7 @@ struct QTestCharBuffer { enum { InitialSize = 512 }; - inline QTestCharBuffer() - : _size(InitialSize), buf(staticBuf) + inline QTestCharBuffer() : buf(staticBuf) { staticBuf[0] = '\0'; } @@ -170,7 +169,7 @@ struct QTestCharBuffer } private: - int _size; + int _size = InitialSize; char* buf; char staticBuf[InitialSize]; }; diff --git a/src/testlib/qbenchmark.cpp b/src/testlib/qbenchmark.cpp index cbc009c993..aafdc64831 100644 --- a/src/testlib/qbenchmark.cpp +++ b/src/testlib/qbenchmark.cpp @@ -51,14 +51,6 @@ QT_BEGIN_NAMESPACE QBenchmarkGlobalData *QBenchmarkGlobalData::current; QBenchmarkGlobalData::QBenchmarkGlobalData() - : measurer(0) - , walltimeMinimum(-1) - , iterationCount(-1) - , medianIterationCount(-1) - , createChart(false) - , verboseOutput(false) - , minimumTotal(-1) - , mode_(WallTime) { setMode(mode_); } @@ -74,14 +66,13 @@ void QBenchmarkGlobalData::setMode(Mode mode) { mode_ = mode; - if (measurer) - delete measurer; + delete measurer; measurer = createMeasurer(); } QBenchmarkMeasurerBase * QBenchmarkGlobalData::createMeasurer() { - QBenchmarkMeasurerBase *measurer = 0; + QBenchmarkMeasurerBase *measurer = nullptr; if (0) { #if QT_CONFIG(valgrind) } else if (mode_ == CallgrindChildProcess || mode_ == CallgrindParentProcess) { @@ -106,24 +97,18 @@ QBenchmarkMeasurerBase * QBenchmarkGlobalData::createMeasurer() int QBenchmarkGlobalData::adjustMedianIterationCount() { - if (medianIterationCount != -1) { - return medianIterationCount; - } else { - return measurer->adjustMedianCount(1); - } + return medianIterationCount != -1 + ? medianIterationCount : measurer->adjustMedianCount(1); } QBenchmarkTestMethodData *QBenchmarkTestMethodData::current; -QBenchmarkTestMethodData::QBenchmarkTestMethodData() -:resultAccepted(false), runOnce(false), iterationCount(-1) -{ -} +QBenchmarkTestMethodData::QBenchmarkTestMethodData() = default; QBenchmarkTestMethodData::~QBenchmarkTestMethodData() { - QBenchmarkTestMethodData::current = 0; + QBenchmarkTestMethodData::current = nullptr; } void QBenchmarkTestMethodData::beginDataRun() diff --git a/src/testlib/qbenchmark_p.h b/src/testlib/qbenchmark_p.h index 49868ac23a..93b5becb2b 100644 --- a/src/testlib/qbenchmark_p.h +++ b/src/testlib/qbenchmark_p.h @@ -81,7 +81,7 @@ struct QBenchmarkContext QString slotName; QString tag; // from _data() function - int checkpointIndex; + int checkpointIndex = -1; QString toString() const { @@ -89,7 +89,7 @@ struct QBenchmarkContext .arg(slotName, tag, QString::number(checkpointIndex)); } - QBenchmarkContext() : checkpointIndex(-1) {} + QBenchmarkContext() = default; }; Q_DECLARE_TYPEINFO(QBenchmarkContext, Q_MOVABLE_TYPE); @@ -97,19 +97,13 @@ class QBenchmarkResult { public: QBenchmarkContext context; - qreal value; - int iterations; - QTest::QBenchmarkMetric metric; - bool setByMacro; - bool valid; - - QBenchmarkResult() - : value(-1) - , iterations(-1) - , metric(QTest::FramesPerSecond) - , setByMacro(true) - , valid(false) - { } + qreal value = -1; + int iterations = -1; + QTest::QBenchmarkMetric metric = QTest::FramesPerSecond; + bool setByMacro = true; + bool valid = false; + + QBenchmarkResult() = default; QBenchmarkResult( const QBenchmarkContext &context, const qreal value, const int iterations, @@ -147,17 +141,17 @@ public: QBenchmarkMeasurerBase *createMeasurer(); int adjustMedianIterationCount(); - QBenchmarkMeasurerBase *measurer; + QBenchmarkMeasurerBase *measurer = nullptr; QBenchmarkContext context; - int walltimeMinimum; - int iterationCount; - int medianIterationCount; - bool createChart; - bool verboseOutput; + int walltimeMinimum = -1; + int iterationCount = -1; + int medianIterationCount = -1; + bool createChart = false; + bool verboseOutput = false; QString callgrindOutFileBase; - int minimumTotal; + int minimumTotal = -1; private: - Mode mode_; + Mode mode_ = WallTime; }; /* @@ -184,9 +178,9 @@ public: void setResult(qreal value, QTest::QBenchmarkMetric metric, bool setByMacro = true); QBenchmarkResult result; - bool resultAccepted; - bool runOnce; - int iterationCount; + bool resultAccepted = false; + bool runOnce = false; + int iterationCount = -1; }; // low-level API: diff --git a/src/testlib/qbenchmarkevent.cpp b/src/testlib/qbenchmarkevent.cpp index a8270219e4..bcae9325cd 100644 --- a/src/testlib/qbenchmarkevent.cpp +++ b/src/testlib/qbenchmarkevent.cpp @@ -44,14 +44,9 @@ QT_BEGIN_NAMESPACE -QBenchmarkEvent::QBenchmarkEvent() - : eventCounter(0) -{ -} +QBenchmarkEvent::QBenchmarkEvent() = default; -QBenchmarkEvent::~QBenchmarkEvent() -{ -} +QBenchmarkEvent::~QBenchmarkEvent() = default; void QBenchmarkEvent::start() { diff --git a/src/testlib/qbenchmarkevent_p.h b/src/testlib/qbenchmarkevent_p.h index 0f47aa475c..9fe3daa33b 100644 --- a/src/testlib/qbenchmarkevent_p.h +++ b/src/testlib/qbenchmarkevent_p.h @@ -76,7 +76,7 @@ public: #else bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override; #endif - qint64 eventCounter; + qint64 eventCounter = 0; }; QT_END_NAMESPACE diff --git a/src/testlib/qbenchmarkmeasurement_p.h b/src/testlib/qbenchmarkmeasurement_p.h index 8dbfd4b618..1e2b82c25d 100644 --- a/src/testlib/qbenchmarkmeasurement_p.h +++ b/src/testlib/qbenchmarkmeasurement_p.h @@ -58,7 +58,7 @@ QT_BEGIN_NAMESPACE class QBenchmarkMeasurerBase { public: - virtual ~QBenchmarkMeasurerBase() {} + virtual ~QBenchmarkMeasurerBase() = default; virtual void init() {} virtual void start() = 0; virtual qint64 checkpoint() = 0; @@ -66,7 +66,7 @@ public: virtual bool isMeasurementAccepted(qint64 measurement) = 0; virtual int adjustIterationCount(int suggestion) = 0; virtual int adjustMedianCount(int suggestion) = 0; - virtual bool repeatCount() { return 1; } + virtual bool repeatCount() { return true; } virtual bool needsWarmupIteration() { return false; } virtual QTest::QBenchmarkMetric metricType() = 0; }; diff --git a/src/testlib/qbenchmarkperfevents.cpp b/src/testlib/qbenchmarkperfevents.cpp index 91f0792338..e8c6969d4a 100644 --- a/src/testlib/qbenchmarkperfevents.cpp +++ b/src/testlib/qbenchmarkperfevents.cpp @@ -147,7 +147,7 @@ bool QBenchmarkPerfEventsMeasurer::isAvailable() { // this generates an EFAULT because attr == NULL if perf_event_open is available // if the kernel is too old, it generates ENOSYS - return perf_event_open(0, 0, 0, 0, 0) == -1 && errno != ENOSYS; + return perf_event_open(nullptr, 0, 0, 0, 0) == -1 && errno != ENOSYS; } /* Event list structure @@ -500,10 +500,7 @@ void QBenchmarkPerfEventsMeasurer::listCounters() "Attributes can be combined, for example: -perfcounter branch-mispredicts:kh\n"); } -QBenchmarkPerfEventsMeasurer::QBenchmarkPerfEventsMeasurer() - : fd(-1) -{ -} +QBenchmarkPerfEventsMeasurer::QBenchmarkPerfEventsMeasurer() = default; QBenchmarkPerfEventsMeasurer::~QBenchmarkPerfEventsMeasurer() { diff --git a/src/testlib/qbenchmarkperfevents_p.h b/src/testlib/qbenchmarkperfevents_p.h index 86ba556549..3f27161ef5 100644 --- a/src/testlib/qbenchmarkperfevents_p.h +++ b/src/testlib/qbenchmarkperfevents_p.h @@ -60,23 +60,23 @@ class QBenchmarkPerfEventsMeasurer : public QBenchmarkMeasurerBase public: QBenchmarkPerfEventsMeasurer(); ~QBenchmarkPerfEventsMeasurer(); - virtual void init() override; - virtual void start() override; - virtual qint64 checkpoint() override; - virtual qint64 stop() override; - virtual bool isMeasurementAccepted(qint64 measurement) override; - virtual int adjustIterationCount(int suggestion) override; - virtual int adjustMedianCount(int suggestion) override; - virtual bool repeatCount() override { return 1; } - virtual bool needsWarmupIteration() override { return true; } - virtual QTest::QBenchmarkMetric metricType() override; + void init() override; + void start() override; + qint64 checkpoint() override; + qint64 stop() override; + bool isMeasurementAccepted(qint64 measurement) override; + int adjustIterationCount(int suggestion) override; + int adjustMedianCount(int suggestion) override; + bool repeatCount() override { return true; } + bool needsWarmupIteration() override { return true; } + QTest::QBenchmarkMetric metricType() override; static bool isAvailable(); static QTest::QBenchmarkMetric metricForEvent(quint32 type, quint64 event_id); static void setCounter(const char *name); static void listCounters(); private: - int fd; + int fd = -1; qint64 readValue(); }; diff --git a/src/testlib/qbenchmarkvalgrind.cpp b/src/testlib/qbenchmarkvalgrind.cpp index 0dac804338..44888c4d30 100644 --- a/src/testlib/qbenchmarkvalgrind.cpp +++ b/src/testlib/qbenchmarkvalgrind.cpp @@ -168,7 +168,7 @@ QString QBenchmarkValgrindUtils::outFileBase(qint64 pid) // Returns \c true upon success, otherwise false. bool QBenchmarkValgrindUtils::runCallgrindSubProcess(const QStringList &origAppArgs, int &exitCode) { - const QString execFile(origAppArgs.at(0)); + const QString &execFile = origAppArgs.at(0); QStringList args; args << QLatin1String("--tool=callgrind") << QLatin1String("--instr-atstart=yes") << QLatin1String("--quiet") @@ -177,7 +177,7 @@ bool QBenchmarkValgrindUtils::runCallgrindSubProcess(const QStringList &origAppA // pass on original arguments that make sense (e.g. avoid wasting time producing output // that will be ignored anyway) ... for (int i = 1; i < origAppArgs.size(); ++i) { - const QString arg(origAppArgs.at(i)); + const QString &arg = origAppArgs.at(i); if (arg == QLatin1String("-callgrind")) continue; args << arg; // ok to pass on diff --git a/src/testlib/qcsvbenchmarklogger.cpp b/src/testlib/qcsvbenchmarklogger.cpp index ee7270b634..f410ec6e3d 100644 --- a/src/testlib/qcsvbenchmarklogger.cpp +++ b/src/testlib/qcsvbenchmarklogger.cpp @@ -46,9 +46,7 @@ QCsvBenchmarkLogger::QCsvBenchmarkLogger(const char *filename) { } -QCsvBenchmarkLogger::~QCsvBenchmarkLogger() -{ -} +QCsvBenchmarkLogger::~QCsvBenchmarkLogger() = default; void QCsvBenchmarkLogger::startLogging() { diff --git a/src/testlib/qplaintestlogger.cpp b/src/testlib/qplaintestlogger.cpp index ed53dcdde8..c2e0bebaa0 100644 --- a/src/testlib/qplaintestlogger.cpp +++ b/src/testlib/qplaintestlogger.cpp @@ -316,9 +316,7 @@ QPlainTestLogger::QPlainTestLogger(const char *filename) { } -QPlainTestLogger::~QPlainTestLogger() -{ -} +QPlainTestLogger::~QPlainTestLogger() = default; void QPlainTestLogger::startLogging() { diff --git a/src/testlib/qsignaldumper.cpp b/src/testlib/qsignaldumper.cpp index d0b6d0dd3f..70f4d5e63d 100644 --- a/src/testlib/qsignaldumper.cpp +++ b/src/testlib/qsignaldumper.cpp @@ -56,7 +56,7 @@ namespace QTest inline static void qPrintMessage(const QByteArray &ba) { - QTestLog::info(ba.constData(), 0, 0); + QTestLog::info(ba.constData(), nullptr, 0); } Q_GLOBAL_STATIC(QList<QByteArray>, ignoreClasses) @@ -169,7 +169,7 @@ static void qSignalDumperCallbackEndSignal(QObject *caller, int /*signal_index*/ void QSignalDumper::startDump() { static QSignalSpyCallbackSet set = { QTest::qSignalDumperCallback, - QTest::qSignalDumperCallbackSlot, QTest::qSignalDumperCallbackEndSignal, 0 }; + QTest::qSignalDumperCallbackSlot, QTest::qSignalDumperCallbackEndSignal, nullptr }; qt_register_signal_spy_callbacks(&set); } diff --git a/src/testlib/qtaptestlogger.cpp b/src/testlib/qtaptestlogger.cpp index 476761e602..5b5a3c4875 100644 --- a/src/testlib/qtaptestlogger.cpp +++ b/src/testlib/qtaptestlogger.cpp @@ -55,9 +55,7 @@ QTapTestLogger::QTapTestLogger(const char *filename) { } -QTapTestLogger::~QTapTestLogger() -{ -} +QTapTestLogger::~QTapTestLogger() = default; void QTapTestLogger::startLogging() { diff --git a/src/testlib/qteamcitylogger.cpp b/src/testlib/qteamcitylogger.cpp index 88c83d1269..8a77143454 100644 --- a/src/testlib/qteamcitylogger.cpp +++ b/src/testlib/qteamcitylogger.cpp @@ -103,9 +103,7 @@ QTeamCityLogger::QTeamCityLogger(const char *filename) { } -QTeamCityLogger::~QTeamCityLogger() -{ -} +QTeamCityLogger::~QTeamCityLogger() = default; void QTeamCityLogger::startLogging() { @@ -224,9 +222,7 @@ QString QTeamCityLogger::tcEscapedString(const QString &str) const { QString formattedString; - for (int i = 0; i < str.length(); i++) { - QChar ch = str.at(i); - + for (QChar ch : str) { switch (ch.toLatin1()) { case '\n': formattedString.append(QLatin1String("|n")); diff --git a/src/testlib/qtest.h b/src/testlib/qtest.h index 7affdcb8b4..cdf0800371 100644 --- a/src/testlib/qtest.h +++ b/src/testlib/qtest.h @@ -46,6 +46,7 @@ #include <QtTest/qtestdata.h> #include <QtTest/qbenchmark.h> +#include <QtCore/qbitarray.h> #include <QtCore/qbytearray.h> #include <QtCore/qstring.h> #include <QtCore/qstringlist.h> @@ -91,25 +92,35 @@ template<> inline char *toString(const QByteArray &ba) return QTest::toPrettyCString(ba.constData(), ba.length()); } +template<> inline char *toString(const QBitArray &ba) +{ + qsizetype size = ba.size(); + char *str = static_cast<char *>(malloc(size + 1)); + for (qsizetype i = 0; i < size; ++i) + str[i] = "01"[ba.testBit(i)]; + str[size] = '\0'; + return str; +} + #if QT_CONFIG(datestring) template<> inline char *toString(const QTime &time) { return time.isValid() - ? qstrdup(qPrintable(time.toString(QStringViewLiteral("hh:mm:ss.zzz")))) + ? qstrdup(qPrintable(time.toString(u"hh:mm:ss.zzz"))) : qstrdup("Invalid QTime"); } template<> inline char *toString(const QDate &date) { return date.isValid() - ? qstrdup(qPrintable(date.toString(QStringViewLiteral("yyyy/MM/dd")))) + ? qstrdup(qPrintable(date.toString(u"yyyy/MM/dd"))) : qstrdup("Invalid QDate"); } template<> inline char *toString(const QDateTime &dateTime) { return dateTime.isValid() - ? qstrdup(qPrintable(dateTime.toString(QStringViewLiteral("yyyy/MM/dd hh:mm:ss.zzz[t]")))) + ? qstrdup(qPrintable(dateTime.toString(u"yyyy/MM/dd hh:mm:ss.zzz[t]"))) : qstrdup("Invalid QDateTime"); } #endif // datestring diff --git a/src/testlib/qtest_gui.h b/src/testlib/qtest_gui.h index e5101e6955..d1efde54b1 100644 --- a/src/testlib/qtest_gui.h +++ b/src/testlib/qtest_gui.h @@ -162,6 +162,14 @@ inline bool qCompare(QImage const &t1, QImage const &t2, } if (t1Null && t2Null) return compare_helper(true, nullptr, nullptr, nullptr, actual, expected, file, line); + if (!qFuzzyCompare(t1.devicePixelRatioF(), t2.devicePixelRatioF())) { + qsnprintf(msg, 1024, "Compared QImages differ in device pixel ratio.\n" + " Actual (%s): %g\n" + " Expected (%s): %g", + actual, t1.devicePixelRatioF(), + expected, t2.devicePixelRatioF()); + return compare_helper(false, msg, nullptr, nullptr, actual, expected, file, line); + } if (t1.width() != t2.width() || t1.height() != t2.height()) { qsnprintf(msg, 1024, "Compared QImages differ in size.\n" " Actual (%s): %dx%d\n" @@ -196,6 +204,14 @@ inline bool qCompare(QPixmap const &t1, QPixmap const &t2, const char *actual, c } if (t1Null && t2Null) return compare_helper(true, nullptr, nullptr, nullptr, actual, expected, file, line); + if (!qFuzzyCompare(t1.devicePixelRatioF(), t2.devicePixelRatioF())) { + qsnprintf(msg, 1024, "Compared QPixmaps differ in device pixel ratio.\n" + " Actual (%s): %g\n" + " Expected (%s): %g", + actual, t1.devicePixelRatioF(), + expected, t2.devicePixelRatioF()); + return compare_helper(false, msg, nullptr, nullptr, actual, expected, file, line); + } if (t1.width() != t2.width() || t1.height() != t2.height()) { qsnprintf(msg, 1024, "Compared QPixmaps differ in size.\n" " Actual (%s): %dx%d\n" diff --git a/src/testlib/qtestblacklist.cpp b/src/testlib/qtestblacklist.cpp index 15f01c4af0..91258e9ec4 100644 --- a/src/testlib/qtestblacklist.cpp +++ b/src/testlib/qtestblacklist.cpp @@ -169,12 +169,14 @@ static QSet<QByteArray> keywords() #endif ; +#if QT_CONFIG(properties) QCoreApplication *app = QCoreApplication::instance(); if (app) { const QVariant platformName = app->property("platformName"); if (platformName.isValid()) set << platformName.toByteArray(); } +#endif return set; } @@ -218,11 +220,10 @@ static bool checkCondition(const QByteArray &condition) static const QSet<QByteArray> matchedConditions = activeConditions(); QList<QByteArray> conds = condition.split(' '); - for (int i = 0; i < conds.size(); ++i) { - QByteArray c = conds.at(i); + for (QByteArray c : conds) { bool result = c.startsWith('!'); if (result) - c = c.mid(1); + c.remove(0, 1); result ^= matchedConditions.contains(c); if (!result) @@ -232,7 +233,7 @@ static bool checkCondition(const QByteArray &condition) } static bool ignoreAll = false; -static std::set<QByteArray> *ignoredTests = 0; +static std::set<QByteArray> *ignoredTests = nullptr; namespace QTestPrivate { diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index cfd3598072..839f556430 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -289,7 +289,7 @@ namespace QTest { class WatchDog; -static QObject *currentTestObject = 0; +static QObject *currentTestObject = nullptr; static QString mainSourcePath; #if defined(Q_OS_MACOS) @@ -423,7 +423,7 @@ Q_TESTLIB_EXPORT bool printAvailableFunctions = false; Q_TESTLIB_EXPORT QStringList testFunctions; Q_TESTLIB_EXPORT QStringList testTags; -static void qPrintTestSlots(FILE *stream, const char *filter = 0) +static void qPrintTestSlots(FILE *stream, const char *filter = nullptr) { for (int i = 0; i < QTest::currentTestObject->metaObject()->methodCount(); ++i) { QMetaMethod sl = QTest::currentTestObject->metaObject()->method(i); @@ -516,7 +516,7 @@ static int qToInt(const char *str) Q_TESTLIB_EXPORT void qtest_qParseArgs(int argc, const char *const argv[], bool qml) { int logFormat = -1; // Not set - const char *logFilename = 0; + const char *logFilename = nullptr; QTest::testFunctions.clear(); QTest::testTags.clear(); @@ -897,7 +897,7 @@ struct QTestDataSetter } ~QTestDataSetter() { - QTestResult::setCurrentTestData(0); + QTestResult::setCurrentTestData(nullptr); } }; @@ -974,11 +974,11 @@ void TestMethods::invokeTestOnData(int index) const if (i == -1) { QTestLog::info(qPrintable( QString::fromLatin1("warmup stage result : %1") - .arg(QBenchmarkTestMethodData::current->result.value)), 0, 0); + .arg(QBenchmarkTestMethodData::current->result.value)), nullptr, 0); } else { QTestLog::info(qPrintable( QString::fromLatin1("accumulation stage result: %1") - .arg(QBenchmarkTestMethodData::current->result.value)), 0, 0); + .arg(QBenchmarkTestMethodData::current->result.value)), nullptr, 0); } } } @@ -1040,7 +1040,7 @@ public: void run() override { QMutexLocker locker(&mutex); waitCondition.wakeAll(); - while (1) { + while (true) { int t = timeout.loadRelaxed(); if (!t) break; @@ -1115,7 +1115,7 @@ bool TestMethods::invokeTest(int index, const char *data, WatchDog *watchDog) co if (data && !dataCount) { // Let empty data tag through. if (!*data) - data = 0; + data = nullptr; else { fprintf(stderr, "Unknown testdata for function %s(): '%s'\n", name.constData(), data); fprintf(stderr, "Function has no testdata.\n"); @@ -1130,10 +1130,9 @@ bool TestMethods::invokeTest(int index, const char *data, WatchDog *watchDog) co if (!data || !qstrcmp(data, table.testData(curDataIndex)->dataTag())) { foundFunction = true; - QTestPrivate::checkBlackLists(name.constData(), dataCount ? table.testData(curDataIndex)->dataTag() : 0); + QTestPrivate::checkBlackLists(name.constData(), dataCount ? table.testData(curDataIndex)->dataTag() : nullptr); - QTestDataSetter s(curDataIndex >= dataCount ? static_cast<QTestData *>(0) - : table.testData(curDataIndex)); + QTestDataSetter s(curDataIndex >= dataCount ? nullptr : table.testData(curDataIndex)); QTestPrivate::qtestMouseButtons = Qt::NoButton; if (watchDog) @@ -1156,14 +1155,14 @@ bool TestMethods::invokeTest(int index, const char *data, WatchDog *watchDog) co return false; } - QTestResult::setCurrentGlobalTestData(0); + QTestResult::setCurrentGlobalTestData(nullptr); ++curGlobalDataIndex; } while (curGlobalDataIndex < globalDataCount); QTestResult::finishedCurrentTestFunction(); QTestResult::setSkipCurrentTest(false); QTestResult::setBlacklistCurrentTest(false); - QTestResult::setCurrentTestData(0); + QTestResult::setCurrentTestData(nullptr); return true; } @@ -1241,7 +1240,7 @@ char *toHexRepresentation(const char *ba, int length) * */ const int maxLen = 50; const int len = qMin(maxLen, length); - char *result = 0; + char *result = nullptr; if (length > maxLen) { const int size = len * 3 + 4; @@ -1274,10 +1273,8 @@ char *toHexRepresentation(const char *ba, int length) ++o; if (i == len) break; - else { - result[o] = ' '; - ++o; - } + result[o] = ' '; + ++o; } return result; @@ -1497,7 +1494,7 @@ void TestMethods::invokeTests(QObject *testObject) const QTestResult::finishedCurrentTestDataCleanup(); } QTestResult::finishedCurrentTestFunction(); - QTestResult::setCurrentTestFunction(0); + QTestResult::setCurrentTestFunction(nullptr); } #if defined(Q_OS_UNIX) @@ -1567,7 +1564,7 @@ FatalSignalHandler::FatalSignalHandler() stack.ss_flags = 0; stack.ss_size = sizeof alternate_stack; stack.ss_sp = alternate_stack; - sigaltstack(&stack, 0); + sigaltstack(&stack, nullptr); act.sa_flags |= SA_ONSTACK; #endif @@ -1586,7 +1583,7 @@ FatalSignalHandler::FatalSignalHandler() oldact.sa_flags & SA_SIGINFO || #endif oldact.sa_handler != SIG_DFL) { - sigaction(fatalSignals[i], &oldact, 0); + sigaction(fatalSignals[i], &oldact, nullptr); } else { sigaddset(&handledSignals, fatalSignals[i]); @@ -1611,7 +1608,7 @@ FatalSignalHandler::~FatalSignalHandler() // If someone overwrote it in the mean time, put it back if (oldact.sa_handler != FatalSignalHandler::signal) - sigaction(i, &oldact, 0); + sigaction(i, &oldact, nullptr); } } @@ -1927,7 +1924,7 @@ int QTest::qRun() QTestResult::addFailure("Caught unhandled exception", __FILE__, __LINE__); if (QTestResult::currentTestFunction()) { QTestResult::finishedCurrentTestFunction(); - QTestResult::setCurrentTestFunction(0); + QTestResult::setCurrentTestFunction(nullptr); } QTestLog::stopLogging(); @@ -1936,7 +1933,7 @@ int QTest::qRun() IOPMAssertionRelease(powerID); } #endif - currentTestObject = 0; + currentTestObject = nullptr; // Rethrow exception to make debugging easier. throw; @@ -1957,13 +1954,13 @@ int QTest::qRun() */ void QTest::qCleanup() { - currentTestObject = 0; + currentTestObject = nullptr; QTestTable::clearGlobalTestTable(); QTestLog::stopLogging(); delete QBenchmarkGlobalData::current; - QBenchmarkGlobalData::current = 0; + QBenchmarkGlobalData::current = nullptr; QSignalDumper::endDump(); @@ -2566,9 +2563,9 @@ bool QTest::qCompare(qfloat16 const &t1, qfloat16 const &t2, const char *actual, bool QTest::qCompare(float const &t1, float const &t2, const char *actual, const char *expected, const char *file, int line) { - return compare_helper(floatingCompare(t1, t2), - "Compared floats are not the same (fuzzy compare)", - toString(t1), toString(t2), actual, expected, file, line); + return QTestResult::compare(floatingCompare(t1, t2), + "Compared floats are not the same (fuzzy compare)", + t1, t2, actual, expected, file, line); } /*! \fn bool QTest::qCompare(const double &t1, const double &t2, const char *actual, const char *expected, const char *file, int line) @@ -2577,11 +2574,86 @@ bool QTest::qCompare(float const &t1, float const &t2, const char *actual, const bool QTest::qCompare(double const &t1, double const &t2, const char *actual, const char *expected, const char *file, int line) { - return compare_helper(floatingCompare(t1, t2), - "Compared doubles are not the same (fuzzy compare)", - toString(t1), toString(t2), actual, expected, file, line); + return QTestResult::compare(floatingCompare(t1, t2), + "Compared doubles are not the same (fuzzy compare)", + t1, t2, actual, expected, file, line); +} + +/*! \fn bool QTest::qCompare(int t1, int t2, const char *actual, const char *expected, const char *file, int line) + \internal + \since 5.14 + */ +bool QTest::qCompare(int t1, int t2, const char *actual, const char *expected, + const char *file, int line) +{ + return QTestResult::compare(t1 == t2, + "Compared values are not the same", + t1, t2, actual, expected, file, line); +} + +/*! \fn bool QTest::qCompare(unsigned t1, unsigned t2, const char *actual, const char *expected, const char *file, int line) + \internal + \since 5.14 + */ +bool QTest::qCompare(unsigned t1, unsigned t2, const char *actual, const char *expected, + const char *file, int line) +{ + return QTestResult::compare(t1 == t2, + "Compared values are not the same", + t1, t2, actual, expected, file, line); +} + +/*! \fn bool QTest::qCompare(QStringView t1, QStringView t2, const char *actual, const char *expected, const char *file, int line) + \internal + \since 5.14 + */ +bool QTest::qCompare(QStringView t1, QStringView t2, const char *actual, const char *expected, + const char *file, int line) +{ + return QTestResult::compare(t1 == t2, + "Compared values are not the same", + t1, t2, actual, expected, file, line); } +/*! \fn bool QTest::qCompare(QStringView t1, const QLatin1String &t2, const char *actual, const char *expected, const char *file, int line) + \internal + \since 5.14 + */ +bool QTest::qCompare(QStringView t1, const QLatin1String &t2, const char *actual, const char *expected, + const char *file, int line) +{ + return QTestResult::compare(t1 == t2, + "Compared values are not the same", + t1, t2, actual, expected, file, line); +} + +/*! \fn bool QTest::qCompare(const QLatin1String &t1, QStringView t2, const char *actual, const char *expected, const char *file, int line) + \internal + \since 5.14 + */ +bool QTest::qCompare(const QLatin1String &t1, QStringView t2, const char *actual, const char *expected, + const char *file, int line) +{ + return QTestResult::compare(t1 == t2, + "Compared values are not the same", + t1, t2, actual, expected, file, line); +} + +/*! \fn bool QTest::qCompare(const QString &t1, const QString &t2, const char *actual, const char *expected, const char *file, int line) + \internal + \since 5.14 + */ + +/*! \fn bool QTest::qCompare(const QString &t1, const QLatin1String &t2, const char *actual, const char *expected, const char *file, int line) + \internal + \since 5.14 + */ + +/*! \fn bool QTest::qCompare(const QLatin1String &t1, const QString &t2, const char *actual, const char *expected, const char *file, int line) + \internal + \since 5.14 + */ + /*! \fn bool QTest::qCompare(const double &t1, const float &t2, const char *actual, const char *expected, const char *file, int line) \internal */ @@ -2719,7 +2791,7 @@ template <> Q_TESTLIB_EXPORT char *QTest::toString<char>(const char &t) char *QTest::toString(const char *str) { if (!str) - return 0; + return nullptr; char *msg = new char[strlen(str) + 1]; return qstrcpy(msg, str); } diff --git a/src/testlib/qtestcase.h b/src/testlib/qtestcase.h index c0ddb93bd0..1667bc254b 100644 --- a/src/testlib/qtestcase.h +++ b/src/testlib/qtestcase.h @@ -368,6 +368,40 @@ namespace QTest Q_TESTLIB_EXPORT bool qCompare(double const &t1, double const &t2, const char *actual, const char *expected, const char *file, int line); + Q_TESTLIB_EXPORT bool qCompare(int t1, int t2, const char *actual, const char *expected, + const char *file, int line); + + Q_TESTLIB_EXPORT bool qCompare(unsigned t1, unsigned t2, const char *actual, const char *expected, + const char *file, int line); + + Q_TESTLIB_EXPORT bool qCompare(QStringView t1, QStringView t2, + const char *actual, const char *expected, + const char *file, int line); + Q_TESTLIB_EXPORT bool qCompare(QStringView t1, const QLatin1String &t2, + const char *actual, const char *expected, + const char *file, int line); + Q_TESTLIB_EXPORT bool qCompare(const QLatin1String &t1, QStringView t2, + const char *actual, const char *expected, + const char *file, int line); + inline bool qCompare(const QString &t1, const QString &t2, + const char *actual, const char *expected, + const char *file, int line) + { + return qCompare(QStringView(t1), QStringView(t2), actual, expected, file, line); + } + inline bool qCompare(const QString &t1, const QLatin1String &t2, + const char *actual, const char *expected, + const char *file, int line) + { + return qCompare(QStringView(t1), t2, actual, expected, file, line); + } + inline bool qCompare(const QLatin1String &t1, const QString &t2, + const char *actual, const char *expected, + const char *file, int line) + { + return qCompare(t1, QStringView(t2), actual, expected, file, line); + } + inline bool compare_ptr_helper(const volatile void *t1, const volatile void *t2, const char *actual, const char *expected, const char *file, int line) { diff --git a/src/testlib/qtestcoreelement_p.h b/src/testlib/qtestcoreelement_p.h index 84406fed85..a101ab5ea3 100644 --- a/src/testlib/qtestcoreelement_p.h +++ b/src/testlib/qtestcoreelement_p.h @@ -74,13 +74,13 @@ class QTestCoreElement: public QTestCoreList<ElementType> QTest::LogElementType elementType() const; private: - QTestElementAttribute *listOfAttributes; + QTestElementAttribute *listOfAttributes = nullptr; QTest::LogElementType type; }; template<class ElementType> QTestCoreElement<ElementType>::QTestCoreElement(int t) - :listOfAttributes(nullptr), type(QTest::LogElementType(t)) + : type(QTest::LogElementType(t)) { } diff --git a/src/testlib/qtestdata.cpp b/src/testlib/qtestdata.cpp index a8ee130a7d..3a1c6d7e7b 100644 --- a/src/testlib/qtestdata.cpp +++ b/src/testlib/qtestdata.cpp @@ -51,12 +51,10 @@ QT_BEGIN_NAMESPACE class QTestDataPrivate { public: - QTestDataPrivate() : tag(0), parent(0), data(0), dataCount(0) {} - - char *tag; - QTestTable *parent; - void **data; - int dataCount; + char *tag = nullptr; + QTestTable *parent = nullptr; + void **data = nullptr; + int dataCount = 0; }; QTestData::QTestData(const char *tag, QTestTable *parent) diff --git a/src/testlib/qtestelement.cpp b/src/testlib/qtestelement.cpp index 622e5344f3..b468295917 100644 --- a/src/testlib/qtestelement.cpp +++ b/src/testlib/qtestelement.cpp @@ -43,8 +43,6 @@ QT_BEGIN_NAMESPACE QTestElement::QTestElement(int type) : QTestCoreElement<QTestElement>(type) - , listOfChildren(0) - , parent(0) { } diff --git a/src/testlib/qtestelement_p.h b/src/testlib/qtestelement_p.h index dacbe6c106..a6b2791a42 100644 --- a/src/testlib/qtestelement_p.h +++ b/src/testlib/qtestelement_p.h @@ -69,8 +69,8 @@ class QTestElement: public QTestCoreElement<QTestElement> void setParent(const QTestElement *p); private: - QTestElement *listOfChildren; - const QTestElement * parent; + QTestElement *listOfChildren = nullptr; + const QTestElement * parent = nullptr; }; diff --git a/src/testlib/qtestelementattribute.cpp b/src/testlib/qtestelementattribute.cpp index 9d752bf26a..e194ee50f7 100644 --- a/src/testlib/qtestelementattribute.cpp +++ b/src/testlib/qtestelementattribute.cpp @@ -104,11 +104,7 @@ QT_BEGIN_NAMESPACE \value LET_SystemError */ -QTestElementAttribute::QTestElementAttribute() - :attributeValue(0), - attributeIndex(QTest::AI_Undefined) -{ -} +QTestElementAttribute::QTestElementAttribute() = default; QTestElementAttribute::~QTestElementAttribute() { @@ -145,7 +141,7 @@ const char *QTestElementAttribute::name() const if (attributeIndex != QTest::AI_Undefined) return AttributeNames[attributeIndex]; - return 0; + return nullptr; } QTest::AttributeIndex QTestElementAttribute::index() const @@ -168,7 +164,7 @@ bool QTestElementAttribute::setPair(QTest::AttributeIndex index, const char *val attributeIndex = index; attributeValue = qstrdup(value); - return attributeValue != 0; + return attributeValue != nullptr; } QT_END_NAMESPACE diff --git a/src/testlib/qtestelementattribute_p.h b/src/testlib/qtestelementattribute_p.h index cb4dbb5f16..f3815b72d1 100644 --- a/src/testlib/qtestelementattribute_p.h +++ b/src/testlib/qtestelementattribute_p.h @@ -106,8 +106,8 @@ class QTestElementAttribute: public QTestCoreList<QTestElementAttribute> bool setPair(QTest::AttributeIndex attributeIndex, const char *value); private: - char *attributeValue; - QTest::AttributeIndex attributeIndex; + char *attributeValue = nullptr; + QTest::AttributeIndex attributeIndex = QTest::AI_Undefined; }; QT_END_NAMESPACE diff --git a/src/testlib/qtesteventloop.h b/src/testlib/qtesteventloop.h index a77b47cd7f..b194e24c3a 100644 --- a/src/testlib/qtesteventloop.h +++ b/src/testlib/qtesteventloop.h @@ -56,8 +56,7 @@ class Q_TESTLIB_EXPORT QTestEventLoop : public QObject Q_OBJECT public: - inline QTestEventLoop(QObject *aParent = nullptr) - : QObject(aParent), inLoop(false), _timeout(false), timerId(-1), loop(nullptr) {} + using QObject::QObject; inline void enterLoopMSecs(int ms); inline void enterLoop(int secs) { enterLoopMSecs(secs * 1000); } @@ -84,10 +83,10 @@ protected: private: Q_DECL_UNUSED_MEMBER bool inLoop; // ### Qt 6: remove - bool _timeout; - int timerId; + bool _timeout = false; + int timerId = -1; - QEventLoop *loop; + QEventLoop *loop = nullptr; }; inline void QTestEventLoop::enterLoopMSecs(int ms) diff --git a/src/testlib/qtestlog.cpp b/src/testlib/qtestlog.cpp index 14543c3cde..f3ebf343c5 100644 --- a/src/testlib/qtestlog.cpp +++ b/src/testlib/qtestlog.cpp @@ -111,7 +111,7 @@ namespace QTest { struct IgnoreResultList { inline IgnoreResultList(QtMsgType tp, const QVariant &patternIn) - : type(tp), pattern(patternIn), next(0) {} + : type(tp), pattern(patternIn) {} static inline void clearList(IgnoreResultList *&list) { @@ -163,10 +163,10 @@ namespace QTest { QtMsgType type; QVariant pattern; - IgnoreResultList *next; + IgnoreResultList *next = nullptr; }; - static IgnoreResultList *ignoreResultList = 0; + static IgnoreResultList *ignoreResultList = nullptr; static QVector<QAbstractTestLogger*> loggers; static bool loggerUsingStdout = false; @@ -181,7 +181,7 @@ namespace QTest { { if (!ignoreResultList) return false; - IgnoreResultList *last = 0; + IgnoreResultList *last = nullptr; IgnoreResultList *list = ignoreResultList; while (list) { if (list->matches(type, message)) { @@ -191,7 +191,7 @@ namespace QTest { else if (list->next) ignoreResultList = list->next; else - ignoreResultList = 0; + ignoreResultList = nullptr; delete list; return true; @@ -438,11 +438,11 @@ void QTestLog::stopLogging() void QTestLog::addLogger(LogMode mode, const char *filename) { if (filename && strcmp(filename, "-") == 0) - filename = 0; + filename = nullptr; if (!filename) QTest::loggerUsingStdout = true; - QAbstractTestLogger *logger = 0; + QAbstractTestLogger *logger = nullptr; switch (mode) { case QTestLog::Plain: logger = new QPlainTestLogger(filename); diff --git a/src/testlib/qtestlog_p.h b/src/testlib/qtestlog_p.h index e63e89a78e..fff36f290d 100644 --- a/src/testlib/qtestlog_p.h +++ b/src/testlib/qtestlog_p.h @@ -66,6 +66,10 @@ class QTestData; class Q_TESTLIB_EXPORT QTestLog { public: + QTestLog() = delete; + ~QTestLog() = delete; + Q_DISABLE_COPY_MOVE(QTestLog) + enum LogMode { Plain = 0, XML, LightXML, XunitXML, CSV, TeamCity, TAP #if defined(QT_USE_APPLE_UNIFIED_LOGGING) @@ -135,9 +139,6 @@ public: static qreal msecsFunctionTime() { return QTestLog::nsecsFunctionTime() / 1000000.; } private: - QTestLog(); - ~QTestLog(); - static bool printAvailableTags; }; diff --git a/src/testlib/qtestresult.cpp b/src/testlib/qtestresult.cpp index a7a4807e06..88028aac6e 100644 --- a/src/testlib/qtestresult.cpp +++ b/src/testlib/qtestresult.cpp @@ -39,42 +39,45 @@ #include <QtTest/private/qtestresult_p.h> #include <QtCore/qglobal.h> +#include <QtCore/qstringview.h> #include <QtTest/private/qtestlog_p.h> +#include <QtTest/qtest.h> // toString() specializations for QStringView #include <QtTest/qtestdata.h> +#include <QtTest/qtestcase.h> #include <QtTest/qtestassert.h> #include <stdlib.h> #include <stdio.h> #include <string.h> -static const char *currentAppName = 0; +static const char *currentAppName = nullptr; QT_BEGIN_NAMESPACE namespace QTest { - static QTestData *currentTestData = 0; - static QTestData *currentGlobalTestData = 0; - static const char *currentTestFunc = 0; - static const char *currentTestObjectName = 0; + static QTestData *currentTestData = nullptr; + static QTestData *currentGlobalTestData = nullptr; + static const char *currentTestFunc = nullptr; + static const char *currentTestObjectName = nullptr; static bool failed = false; static bool skipCurrentTest = false; static bool blacklistCurrentTest = false; - static const char *expectFailComment = 0; + static const char *expectFailComment = nullptr; static int expectFailMode = 0; } void QTestResult::reset() { - QTest::currentTestData = 0; - QTest::currentGlobalTestData = 0; - QTest::currentTestFunc = 0; - QTest::currentTestObjectName = 0; + QTest::currentTestData = nullptr; + QTest::currentGlobalTestData = nullptr; + QTest::currentTestFunc = nullptr; + QTest::currentTestObjectName = nullptr; QTest::failed = false; - QTest::expectFailComment = 0; + QTest::expectFailComment = nullptr; QTest::expectFailMode = 0; QTest::blacklistCurrentTest = false; @@ -126,18 +129,18 @@ static void clearExpectFail() { QTest::expectFailMode = 0; delete [] const_cast<char *>(QTest::expectFailComment); - QTest::expectFailComment = 0; + QTest::expectFailComment = nullptr; } void QTestResult::finishedCurrentTestData() { if (QTest::expectFailMode) - addFailure("QEXPECT_FAIL was called without any subsequent verification statements", 0, 0); + addFailure("QEXPECT_FAIL was called without any subsequent verification statements", nullptr, 0); clearExpectFail(); if (!QTest::failed && QTestLog::unhandledIgnoreMessages()) { QTestLog::printUnhandledIgnoreMessages(); - addFailure("Not all expected messages were received", 0, 0); + addFailure("Not all expected messages were received", nullptr, 0); } QTestLog::clearIgnoreMessages(); } @@ -157,7 +160,7 @@ void QTestResult::finishedCurrentTestDataCleanup() void QTestResult::finishedCurrentTestFunction() { - QTest::currentTestFunc = 0; + QTest::currentTestFunc = nullptr; QTest::failed = false; QTestLog::leaveTestFunction(); @@ -170,14 +173,12 @@ const char *QTestResult::currentTestFunction() const char *QTestResult::currentDataTag() { - return QTest::currentTestData ? QTest::currentTestData->dataTag() - : static_cast<const char *>(0); + return QTest::currentTestData ? QTest::currentTestData->dataTag() : nullptr; } const char *QTestResult::currentGlobalDataTag() { - return QTest::currentGlobalTestData ? QTest::currentGlobalTestData->dataTag() - : static_cast<const char *>(0); + return QTest::currentGlobalTestData ? QTest::currentGlobalTestData->dataTag() : nullptr; } static bool isExpectFailData(const char *dataIndex) @@ -265,17 +266,54 @@ bool QTestResult::verify(bool statement, const char *statementStr, return checkStatement(statement, msg, file, line); } -bool QTestResult::compare(bool success, const char *failureMsg, - char *val1, char *val2, - const char *actual, const char *expected, - const char *file, int line) +// Format failures using the toString() template +template <class Actual, class Expected> +void formatFailMessage(char *msg, size_t maxMsgLen, + const char *failureMsg, + const Actual &val1, const Expected &val2, + const char *actual, const char *expected) { - QTEST_ASSERT(expected); - QTEST_ASSERT(actual); + auto val1S = QTest::toString(val1); + auto val2S = QTest::toString(val2); + + size_t len1 = mbstowcs(nullptr, actual, maxMsgLen); // Last parameter is not ignored on QNX + size_t len2 = mbstowcs(nullptr, expected, maxMsgLen); // (result is never larger than this). + qsnprintf(msg, maxMsgLen, "%s\n Actual (%s)%*s %s\n Expected (%s)%*s %s", + failureMsg, + actual, qMax(len1, len2) - len1 + 1, ":", val1S ? val1S : "<null>", + expected, qMax(len1, len2) - len2 + 1, ":", val2S ? val2S : "<null>"); + + delete [] val1S; + delete [] val2S; +} + +// Overload to format failures for "const char *" - no need to strdup(). +void formatFailMessage(char *msg, size_t maxMsgLen, + const char *failureMsg, + const char *val1, const char *val2, + const char *actual, const char *expected) +{ + size_t len1 = mbstowcs(nullptr, actual, maxMsgLen); // Last parameter is not ignored on QNX + size_t len2 = mbstowcs(nullptr, expected, maxMsgLen); // (result is never larger than this). + qsnprintf(msg, maxMsgLen, "%s\n Actual (%s)%*s %s\n Expected (%s)%*s %s", + failureMsg, + actual, qMax(len1, len2) - len1 + 1, ":", val1 ? val1 : "<null>", + expected, qMax(len1, len2) - len2 + 1, ":", val2 ? val2 : "<null>"); +} +template <class Actual, class Expected> +static bool compareHelper(bool success, const char *failureMsg, + const Actual &val1, const Expected &val2, + const char *actual, const char *expected, + const char *file, int line, + bool hasValues = true) +{ const size_t maxMsgLen = 1024; char msg[maxMsgLen] = {'\0'}; + QTEST_ASSERT(expected); + QTEST_ASSERT(actual); + if (QTestLog::verboseLevel() >= 2) { qsnprintf(msg, maxMsgLen, "QCOMPARE(%s, %s)", actual, expected); QTestLog::info(msg, file, line); @@ -289,20 +327,92 @@ bool QTestResult::compare(bool success, const char *failureMsg, qsnprintf(msg, maxMsgLen, "QCOMPARE(%s, %s) returned TRUE unexpectedly.", actual, expected); } - } else if (val1 || val2) { - size_t len1 = mbstowcs(NULL, actual, maxMsgLen); // Last parameter is not ignored on QNX - size_t len2 = mbstowcs(NULL, expected, maxMsgLen); // (result is never larger than this). - qsnprintf(msg, maxMsgLen, "%s\n Actual (%s)%*s %s\n Expected (%s)%*s %s", - failureMsg, - actual, qMax(len1, len2) - len1 + 1, ":", val1 ? val1 : "<null>", - expected, qMax(len1, len2) - len2 + 1, ":", val2 ? val2 : "<null>"); - } else + return checkStatement(success, msg, file, line); + } + + + if (!hasValues) { qsnprintf(msg, maxMsgLen, "%s", failureMsg); + return checkStatement(success, msg, file, line); + } + + formatFailMessage(msg, maxMsgLen, failureMsg, val1, val2, actual, expected); + + return checkStatement(success, msg, file, line); +} + +bool QTestResult::compare(bool success, const char *failureMsg, + char *val1, char *val2, + const char *actual, const char *expected, + const char *file, int line) +{ + const bool result = compareHelper(success, failureMsg, + val1 != nullptr ? val1 : "<null>", + val2 != nullptr ? val2 : "<null>", + actual, expected, file, line, + val1 != nullptr && val2 != nullptr); + // Our caller got these from QTest::toString() delete [] val1; delete [] val2; - return checkStatement(success, msg, file, line); + return result; +} + +bool QTestResult::compare(bool success, const char *failureMsg, + double val1, double val2, + const char *actual, const char *expected, + const char *file, int line) +{ + return compareHelper(success, failureMsg, val1, val2, actual, expected, file, line); +} + +bool QTestResult::compare(bool success, const char *failureMsg, + float val1, float val2, + const char *actual, const char *expected, + const char *file, int line) +{ + return compareHelper(success, failureMsg, val1, val2, actual, expected, file, line); +} + +bool QTestResult::compare(bool success, const char *failureMsg, + int val1, int val2, + const char *actual, const char *expected, + const char *file, int line) +{ + return compareHelper(success, failureMsg, val1, val2, actual, expected, file, line); +} + +bool QTestResult::compare(bool success, const char *failureMsg, + unsigned val1, unsigned val2, + const char *actual, const char *expected, + const char *file, int line) +{ + return compareHelper(success, failureMsg, val1, val2, actual, expected, file, line); +} + +bool QTestResult::compare(bool success, const char *failureMsg, + QStringView val1, QStringView val2, + const char *actual, const char *expected, + const char *file, int line) +{ + return compareHelper(success, failureMsg, val1, val2, actual, expected, file, line); +} + +bool QTestResult::compare(bool success, const char *failureMsg, + QStringView val1, const QLatin1String &val2, + const char *actual, const char *expected, + const char *file, int line) +{ + return compareHelper(success, failureMsg, val1, val2, actual, expected, file, line); +} + +bool QTestResult::compare(bool success, const char *failureMsg, + const QLatin1String & val1, QStringView val2, + const char *actual, const char *expected, + const char *file, int line) +{ + return compareHelper(success, failureMsg, val1, val2, actual, expected, file, line); } void QTestResult::addFailure(const char *message, const char *file, int line) diff --git a/src/testlib/qtestresult_p.h b/src/testlib/qtestresult_p.h index 4df75b2805..38a3024a0f 100644 --- a/src/testlib/qtestresult_p.h +++ b/src/testlib/qtestresult_p.h @@ -55,6 +55,9 @@ QT_BEGIN_NAMESPACE +class QLatin1String; +class QStringView; + class QTestResultPrivate; class QTestData; @@ -79,7 +82,34 @@ public: char *val1, char *val2, const char *actual, const char *expected, const char *file, int line); - + static bool compare(bool success, const char *failureMsg, + double val1, double val2, + const char *actual, const char *expected, + const char *file, int line); + static bool compare(bool success, const char *failureMsg, + float val1, float val2, + const char *actual, const char *expected, + const char *file, int line); + static bool compare(bool success, const char *failureMsg, + int val1, int val2, + const char *actual, const char *expected, + const char *file, int line); + static bool compare(bool success, const char *failureMsg, + unsigned val1, unsigned val2, + const char *actual, const char *expected, + const char *file, int line); + static bool compare(bool success, const char *failureMsg, + QStringView val1, QStringView val2, + const char *actual, const char *expected, + const char *file, int line); + static bool compare(bool success, const char *failureMsg, + const QLatin1String &val1, QStringView val2, + const char *actual, const char *expected, + const char *file, int line); + static bool compare(bool success, const char *failureMsg, + QStringView val1, const QLatin1String &val2, + const char *actual, const char *expected, + const char *file, int line); static void setCurrentGlobalTestData(QTestData *data); static void setCurrentTestData(QTestData *data); static void setCurrentTestFunction(const char *func); diff --git a/src/testlib/qtesttable.cpp b/src/testlib/qtesttable.cpp index 20e0702d44..85dff17017 100644 --- a/src/testlib/qtesttable.cpp +++ b/src/testlib/qtesttable.cpp @@ -58,11 +58,11 @@ public: } struct Element { - Element() : name(nullptr), type(0) {} + Element() = default; Element(const char *n, int t) : name(n), type(t) {} - const char *name; - int type; + const char *name = nullptr; + int type = 0; }; using ElementList = std::vector<Element>; @@ -78,8 +78,8 @@ public: static QTestTable *gTable; }; -QTestTable *QTestTablePrivate::currentTestTable = 0; -QTestTable *QTestTablePrivate::gTable = 0; +QTestTable *QTestTablePrivate::currentTestTable = nullptr; +QTestTable *QTestTablePrivate::gTable = nullptr; void QTestTable::addColumn(int type, const char *name) { @@ -119,7 +119,7 @@ QTestTable::QTestTable() QTestTable::~QTestTable() { - QTestTablePrivate::currentTestTable = 0; + QTestTablePrivate::currentTestTable = nullptr; delete d; } @@ -172,7 +172,7 @@ QTestTable *QTestTable::globalTestTable() void QTestTable::clearGlobalTestTable() { delete QTestTablePrivate::gTable; - QTestTablePrivate::gTable = 0; + QTestTablePrivate::gTable = nullptr; } QTestTable *QTestTable::currentTestTable() diff --git a/src/testlib/qtestxunitstreamer.cpp b/src/testlib/qtestxunitstreamer.cpp index fe9a6e21cc..bdbdfa9610 100644 --- a/src/testlib/qtestxunitstreamer.cpp +++ b/src/testlib/qtestxunitstreamer.cpp @@ -54,8 +54,7 @@ QTestXunitStreamer::QTestXunitStreamer(QXunitTestLogger *logger) QTEST_ASSERT(testLogger); } -QTestXunitStreamer::~QTestXunitStreamer() -{} +QTestXunitStreamer::~QTestXunitStreamer() = default; void QTestXunitStreamer::indentForElement(const QTestElement* element, char* buf, int size) { @@ -129,7 +128,7 @@ void QTestXunitStreamer::formatAttributes(const QTestElement* element, const QTe return; } - char const* key = 0; + char const* key = nullptr; if (attrindex == QTest::AI_Description) key = "message"; else if (attrindex != QTest::AI_File && attrindex != QTest::AI_Line) diff --git a/src/testlib/qxmltestlogger.cpp b/src/testlib/qxmltestlogger.cpp index c47042c3a0..763cea327b 100644 --- a/src/testlib/qxmltestlogger.cpp +++ b/src/testlib/qxmltestlogger.cpp @@ -107,9 +107,7 @@ QXmlTestLogger::QXmlTestLogger(XmlMode mode, const char *filename) { } -QXmlTestLogger::~QXmlTestLogger() -{ -} +QXmlTestLogger::~QXmlTestLogger() = default; void QXmlTestLogger::startLogging() { @@ -182,23 +180,20 @@ inline static bool isEmpty(const char *str) static const char *incidentFormatString(bool noDescription, bool noTag) { if (noDescription) { - if (noTag) - return "<Incident type=\"%s\" file=\"%s\" line=\"%d\" />\n"; - else - return "<Incident type=\"%s\" file=\"%s\" line=\"%d\">\n" + return noTag + ? "<Incident type=\"%s\" file=\"%s\" line=\"%d\" />\n" + : "<Incident type=\"%s\" file=\"%s\" line=\"%d\">\n" " <DataTag><![CDATA[%s%s%s%s]]></DataTag>\n" "</Incident>\n"; - } else { - if (noTag) - return "<Incident type=\"%s\" file=\"%s\" line=\"%d\">\n" - " <Description><![CDATA[%s%s%s%s]]></Description>\n" - "</Incident>\n"; - else - return "<Incident type=\"%s\" file=\"%s\" line=\"%d\">\n" - " <DataTag><![CDATA[%s%s%s]]></DataTag>\n" - " <Description><![CDATA[%s]]></Description>\n" - "</Incident>\n"; } + return noTag + ? "<Incident type=\"%s\" file=\"%s\" line=\"%d\">\n" + " <Description><![CDATA[%s%s%s%s]]></Description>\n" + "</Incident>\n" + : "<Incident type=\"%s\" file=\"%s\" line=\"%d\">\n" + " <DataTag><![CDATA[%s%s%s]]></DataTag>\n" + " <Description><![CDATA[%s]]></Description>\n" + "</Incident>\n"; } static const char *benchmarkResultFormatString() diff --git a/src/testlib/qxunittestlogger.cpp b/src/testlib/qxunittestlogger.cpp index 336edb5994..b3cac9cb82 100644 --- a/src/testlib/qxunittestlogger.cpp +++ b/src/testlib/qxunittestlogger.cpp @@ -59,13 +59,6 @@ QT_BEGIN_NAMESPACE QXunitTestLogger::QXunitTestLogger(const char *filename) : QAbstractTestLogger(filename) - , listOfTestcases(0) - , currentLogElement(0) - , errorLogElement(0) - , logFormatter(0) - , testCounter(0) - , failureCounter(0) - , errorCounter(0) { } @@ -155,7 +148,7 @@ void QXunitTestLogger::leaveTestFunction() void QXunitTestLogger::addIncident(IncidentTypes type, const char *description, const char *file, int line) { - const char *typeBuf = 0; + const char *typeBuf = nullptr; char buf[100]; switch (type) { @@ -299,7 +292,7 @@ void QXunitTestLogger::addTag(QTestElement* element) void QXunitTestLogger::addMessage(MessageTypes type, const QString &message, const char *file, int line) { QTestElement *errorElement = new QTestElement(QTest::LET_Error); - const char *typeBuf = 0; + const char *typeBuf = nullptr; switch (type) { case QAbstractTestLogger::Warn: diff --git a/src/testlib/qxunittestlogger_p.h b/src/testlib/qxunittestlogger_p.h index 48f07ddcf2..518ba098f4 100644 --- a/src/testlib/qxunittestlogger_p.h +++ b/src/testlib/qxunittestlogger_p.h @@ -79,14 +79,14 @@ class QXunitTestLogger : public QAbstractTestLogger const char *file = nullptr, int line = 0) override; private: - QTestElement *listOfTestcases; - QTestElement *currentLogElement; - QTestElement *errorLogElement; - QTestXunitStreamer *logFormatter; + QTestElement *listOfTestcases = nullptr; + QTestElement *currentLogElement = nullptr; + QTestElement *errorLogElement = nullptr; + QTestXunitStreamer *logFormatter = nullptr; - int testCounter; - int failureCounter; - int errorCounter; + int testCounter = 0; + int failureCounter = 0; + int errorCounter = 0; }; QT_END_NAMESPACE |