From 3de78333c6616863996db4631222e6efae4b2db6 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Thu, 21 Jan 2016 14:58:03 +0100 Subject: Stabilize tst_QQuickWebEngineView Remove the 200 ms wait and instead try to grab the window contents repeatedly until a certain condition is met. Change-Id: I96dd720ef41ced9bdb48772939d25dd957081c33 Reviewed-by: Kai Koehne --- .../tst_qquickwebengineview.cpp | 32 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp b/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp index cb566c254..a1900a77d 100644 --- a/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp +++ b/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp @@ -21,10 +21,13 @@ #include "util.h" #include +#include #include #include #include +#include + class tst_QQuickWebEngineView : public QObject { Q_OBJECT public: @@ -313,6 +316,21 @@ void tst_QQuickWebEngineView::multipleWebEngineViews() QTest::qWait(200); } +QImage tryToGrabWindowUntil(QQuickWindow *window, std::function checkImage, + int timeout = 5000) +{ + QImage grabbed; + QElapsedTimer t; + t.start(); + do { + QTest::qWait(200); + grabbed = window->grabWindow(); + if (checkImage(grabbed)) + break; + } while (!t.hasExpired(timeout)); + return grabbed; +} + void tst_QQuickWebEngineView::basicRenderingSanity() { showWebEngineView(); @@ -322,9 +340,12 @@ void tst_QQuickWebEngineView::basicRenderingSanity() // This should not crash. webEngineView()->setVisible(true); - QTest::qWait(200); - QImage grabbedWindow = m_window->grabWindow(); + QRgb testColor = qRgba(0, 0xff, 0, 0xff); + const QImage grabbedWindow = tryToGrabWindowUntil(m_window.data(), + [testColor] (const QImage &image) { + return image.pixel(10, 10) == testColor; + }); QVERIFY(grabbedWindow.pixel(10, 10) == testColor); QVERIFY(grabbedWindow.pixel(100, 10) == testColor); QVERIFY(grabbedWindow.pixel(10, 100) == testColor); @@ -370,12 +391,11 @@ void tst_QQuickWebEngineView::transparentWebEngineViews() webEngineView2->setSize(QSizeF(300, 400)); webEngineView2->setUrl(urlFromTestPath("/html/basic_page.html")); QVERIFY(waitForLoadSucceeded(webEngineView2.data())); - webEngineView2->setVisible(true); - - QTest::qWait(200); // Result image: black text on red background. - QImage grabbedWindow = m_window->grabWindow(); + const QImage grabbedWindow = tryToGrabWindowUntil(m_window.data(), [] (const QImage &image) { + return image.pixelColor(0, 0) == QColor(Qt::red); + }); QSet redComponents; for (int i = 0, width = grabbedWindow.width(); i < width; i++) { -- cgit v1.2.3