aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2013-08-30 13:18:49 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-08-30 15:52:44 +0200
commita166f7974b3fb24278ada361d538d66843807b4f (patch)
tree25246c21fdf2320d25d26369aaec19bb8d57f074
parent26015ce5a4f745cfb4de50bff2f5985f5a8eb378 (diff)
Stabilize tst_rendernode.
Center windows on screen, add QSKIP for screen depth, add error message to color comparison. Change-Id: I03d600a4810f27654e0b971b19631ba51c9f6874 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
-rw-r--r--tests/auto/quick/rendernode/tst_rendernode.cpp41
1 files changed, 33 insertions, 8 deletions
diff --git a/tests/auto/quick/rendernode/tst_rendernode.cpp b/tests/auto/quick/rendernode/tst_rendernode.cpp
index 04b32499ff..90a9488047 100644
--- a/tests/auto/quick/rendernode/tst_rendernode.cpp
+++ b/tests/auto/quick/rendernode/tst_rendernode.cpp
@@ -44,6 +44,7 @@
#include <QtQuick/qquickitem.h>
#include <QtQuick/qquickview.h>
#include <QtGui/qopenglcontext.h>
+#include <QtGui/qscreen.h>
#include <private/qsgrendernode_p.h>
#include "../../shared/util.h"
@@ -59,6 +60,10 @@ public:
QQuickView view;
view.setSource(testFileUrl(fileName));
+ const QRect screenGeometry = view.screen()->availableGeometry();
+ const QSize size = view.size();
+ const QPoint offset = QPoint(size.width() / 2, size.height() / 2);
+ view.setFramePosition(screenGeometry.center() - offset);
view.showNormal();
QTest::qWaitForWindowExposed(&view);
@@ -185,15 +190,27 @@ tst_rendernode::tst_rendernode()
qmlRegisterType<MessUpItem>("Test", 1, 0, "MessUpItem");
}
-static void fuzzyCompareColor(QRgb x, QRgb y)
+static bool fuzzyCompareColor(QRgb x, QRgb y, QByteArray *errorMessage)
{
- QVERIFY(qAbs(qRed(x) - qRed(y)) < 4);
- QVERIFY(qAbs(qGreen(x) - qGreen(y)) < 4);
- QVERIFY(qAbs(qBlue(x) - qBlue(y)) < 4);
+ enum { fuzz = 4 };
+ if (qAbs(qRed(x) - qRed(y)) >= fuzz || qAbs(qGreen(x) - qGreen(y)) >= fuzz || qAbs(qBlue(x) - qBlue(y)) >= fuzz) {
+ QString s;
+ QDebug(&s).nospace() << hex << "Color mismatch 0x" << x << " 0x" << y << dec << " (fuzz=" << fuzz << ").";
+ *errorMessage = s.toLocal8Bit();
+ return false;
+ }
+ return true;
+}
+
+static inline QByteArray msgColorMismatchAt(const QByteArray &colorMsg, int x, int y)
+{
+ return colorMsg + QByteArrayLiteral(" at ") + QByteArray::number(x) +',' + QByteArray::number(y);
}
void tst_rendernode::renderOrder()
{
+ if (QGuiApplication::primaryScreen()->depth() < 24)
+ QSKIP("This test does not work at display depths < 24");
QImage fb = runTest("RenderOrder.qml");
int x1 = fb.width() / 8;
int x2 = fb.width() * 3 / 8;
@@ -204,18 +221,24 @@ void tst_rendernode::renderOrder()
int y3 = fb.height() * 5 / 8;
int y4 = fb.height() * 7 / 8;
- fuzzyCompareColor(fb.pixel(x1, y1), qRgb(0x7f, 0x00, 0x00));
+ QByteArray errorMessage;
+ QVERIFY2(fuzzyCompareColor(fb.pixel(x1, y1), qRgb(0x7f, 0x00, 0x00), &errorMessage),
+ msgColorMismatchAt(errorMessage, x1, y1).constData());
QCOMPARE(fb.pixel(x2, y2), qRgb(0xff, 0xff, 0xff));
QCOMPARE(fb.pixel(x3, y2), qRgb(0x00, 0x00, 0xff));
QCOMPARE(fb.pixel(x4, y1), qRgb(0x00, 0x00, 0xff));
QCOMPARE(fb.pixel(x1, y4), qRgb(0xff, 0x00, 0x00));
QCOMPARE(fb.pixel(x2, y3), qRgb(0xff, 0xff, 0xff));
- fuzzyCompareColor(fb.pixel(x3, y3), qRgb(0x7f, 0x7f, 0xff));
- fuzzyCompareColor(fb.pixel(x4, y4), qRgb(0x00, 0x00, 0x7f));
+ QVERIFY2(fuzzyCompareColor(fb.pixel(x3, y3), qRgb(0x7f, 0x7f, 0xff), &errorMessage),
+ msgColorMismatchAt(errorMessage, x3, y3).constData());
+ QVERIFY2(fuzzyCompareColor(fb.pixel(x4, y4), qRgb(0x00, 0x00, 0x7f), &errorMessage),
+ msgColorMismatchAt(errorMessage, x4, y4).constData());
}
void tst_rendernode::messUpState()
{
+ if (QGuiApplication::primaryScreen()->depth() < 24)
+ QSKIP("This test does not work at display depths < 24");
QImage fb = runTest("MessUpState.qml");
int x1 = 0;
int x2 = fb.width() / 2;
@@ -231,7 +254,9 @@ void tst_rendernode::messUpState()
QCOMPARE(fb.pixel(x2, y1), qRgb(0x00, 0x00, 0x00));
QCOMPARE(fb.pixel(x2, y2), qRgb(0x00, 0x00, 0x00));
- fuzzyCompareColor(fb.pixel(x2, y3), qRgb(0x7f, 0x00, 0x7f));
+ QByteArray errorMessage;
+ QVERIFY2(fuzzyCompareColor(fb.pixel(x2, y3), qRgb(0x7f, 0x00, 0x7f), &errorMessage),
+ msgColorMismatchAt(errorMessage, x2, y3).constData());
QCOMPARE(fb.pixel(x2, y4), qRgb(0x00, 0x00, 0x00));
QCOMPARE(fb.pixel(x2, y5), qRgb(0x00, 0x00, 0x00));
}