aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktestutils/quick/visualtestutils.cpp
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@qt.io>2024-08-06 08:56:10 +0800
committerMitch Curtis <mitch.curtis@qt.io>2024-08-09 07:11:40 +0800
commit426555aa581ce688538975176cf1c31f6ffddb24 (patch)
tree96e3bea3708cd6f09d2a78ef2851c6de098925a8 /src/quicktestutils/quick/visualtestutils.cpp
parent74c019e799fab74b85cd444c1e104638b7dd6c96 (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.cpp32
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;
}
}