diff options
| author | Mitch Curtis <mitch.curtis@qt.io> | 2024-08-06 08:56:10 +0800 |
|---|---|---|
| committer | Mitch Curtis <mitch.curtis@qt.io> | 2024-08-09 07:11:40 +0800 |
| commit | 426555aa581ce688538975176cf1c31f6ffddb24 (patch) | |
| tree | 96e3bea3708cd6f09d2a78ef2851c6de098925a8 /src/quicktestutils/quick/visualtestutils.cpp | |
| parent | 74c019e799fab74b85cd444c1e104638b7dd6c96 (diff) | |
QQuickVisualTestUtils::compareImages: save images on failure
Add a qt.quicktestutils.compareimages logging category which saves
compared images to the test executable's directory on failure when its
debug category is enabled.
Change-Id: Ifb5e85d00768fd11336d986a20080e1c16ca78a2
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/quicktestutils/quick/visualtestutils.cpp')
| -rw-r--r-- | src/quicktestutils/quick/visualtestutils.cpp | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/src/quicktestutils/quick/visualtestutils.cpp b/src/quicktestutils/quick/visualtestutils.cpp index 14b5383583..aa73ea9738 100644 --- a/src/quicktestutils/quick/visualtestutils.cpp +++ b/src/quicktestutils/quick/visualtestutils.cpp @@ -4,6 +4,7 @@ #include "visualtestutils_p.h" #include <QtCore/QCoreApplication> +#include <QtCore/qloggingcategory.h> #include <QtCore/private/qvariantanimation_p.h> #include <QtCore/QDebug> #include <QtQuick/QQuickItem> @@ -15,6 +16,8 @@ QT_BEGIN_NAMESPACE +Q_STATIC_LOGGING_CATEGORY(lcCompareImages, "qt.quicktestutils.compareimages") + QQuickItem *QQuickVisualTestUtils::findVisibleChild(QQuickItem *parent, const QString &objectName) { QQuickItem *item = nullptr; @@ -133,6 +136,9 @@ bool QQuickVisualTestUtils::isDelegateVisible(QQuickItem *item) distance field glyph pixels have a measurable, but not visible pixel error. This was GT-216 with the ubuntu "nvidia-319" driver package. llvmpipe does not show the same issue. + + To see the actual and expected images upon failure, enable the + \c qt.quicktestutils.compareimages debug logging category. */ bool QQuickVisualTestUtils::compareImages(const QImage &ia, const QImage &ib, QString *errorMessage) { @@ -161,8 +167,32 @@ bool QQuickVisualTestUtils::compareImages(const QImage &ia, const QImage &ib, QS || qAbs(qRed(a) - qRed(b)) > tolerance || qAbs(qGreen(a) - qGreen(b)) > tolerance || qAbs(qBlue(a) - qBlue(b)) > tolerance) { - QDebug(errorMessage) << "Mismatch at:" << x << y << ':' + QDebug debug(errorMessage); + debug << "Mismatch at:" << x << y << ':' << Qt::hex << Qt::showbase << a << b; + + if (lcCompareImages().isDebugEnabled()) { + const QDir saveDir(QCoreApplication::applicationDirPath()); + QString imageFileNamePrefix = QString::fromUtf8("%1-%2").arg( + QTest::currentAppName(), QTest::currentTestFunction()); + if (QTest::currentDataTag()) + imageFileNamePrefix.append("-" + QString::fromUtf8(QTest::currentDataTag())); + + const QString actualImageFilePath = saveDir.filePath(imageFileNamePrefix + QLatin1String("-actual.png")); + const bool actualImageSaved = ia.save(actualImageFilePath); + if (!actualImageSaved) + qWarning() << "Failed to save actual image to" << actualImageFilePath; + + const QString expectedImageFilePath = saveDir.filePath(imageFileNamePrefix + QLatin1String("-expected.png")); + const bool expectedImageSaved = ib.save(expectedImageFilePath); + if (!expectedImageSaved) + qWarning() << "Failed to save expected image to" << expectedImageFilePath; + + if (actualImageSaved && expectedImageSaved) { + debug << "\nActual image saved to:" << actualImageFilePath; + debug << "\nExpected image saved to:" << expectedImageFilePath; + } + } return false; } } |
