From 65fb4b7eaf3acf9c77769b19a6d9b0d67c997479 Mon Sep 17 00:00:00 2001 From: Tamas Zakor Date: Mon, 9 Dec 2019 10:03:31 +0100 Subject: Un-blacklist tst_qwebenginepage::fullScreenRequested() on Windows The JavaScriptCallbackWatcher::wait() blocks the callback and it gets called after the wait() only. Replace JavaScriptCallbackWatcher() with QTRY_COMPARE() and QTRY_VERIFY(). These functions don't block the callback call. Remove JavaScriptCallback class from test. Also reimplement tst_qwebenginepage::runJavaScript auto test. Fixes: QTBUG-78015 Change-Id: I11e6f709c00a9121066c2554508c8312c1e33c12 Reviewed-by: Allan Sandfeld Jensen --- tests/auto/widgets/qwebenginepage/BLACKLIST | 3 - .../widgets/qwebenginepage/tst_qwebenginepage.cpp | 170 +++------------------ 2 files changed, 22 insertions(+), 151 deletions(-) diff --git a/tests/auto/widgets/qwebenginepage/BLACKLIST b/tests/auto/widgets/qwebenginepage/BLACKLIST index 7857ee818..9eb90b411 100644 --- a/tests/auto/widgets/qwebenginepage/BLACKLIST +++ b/tests/auto/widgets/qwebenginepage/BLACKLIST @@ -3,6 +3,3 @@ osx [mouseMovementProperties] windows - -[fullScreenRequested] -windows diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp index d8c1a5360..53b846bb5 100644 --- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp +++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp @@ -1682,156 +1682,34 @@ void tst_QWebEnginePage::openWindowDefaultSize() QCOMPARE(requestedGeometry.height(), 100); } -class JavaScriptCallbackBase -{ -public: - JavaScriptCallbackBase() - { - if (watcher) - QMetaObject::invokeMethod(watcher, "add"); - } - - void operator() (const QVariant &result) - { - check(result); - if (watcher) - QMetaObject::invokeMethod(watcher, "notify"); - } - -protected: - virtual void check(const QVariant &result) = 0; - -private: - friend class JavaScriptCallbackWatcher; - static QPointer watcher; -}; - -QPointer JavaScriptCallbackBase::watcher = 0; - -class JavaScriptCallback : public JavaScriptCallbackBase -{ -public: - JavaScriptCallback() { } - JavaScriptCallback(const QVariant& _expected) : expected(_expected) { } - - void check(const QVariant& result) override - { - QVERIFY(result.isValid()); - QCOMPARE(result, expected); - } - -private: - QVariant expected; -}; - -class JavaScriptCallbackNull : public JavaScriptCallbackBase -{ -public: - void check(const QVariant& result) override - { - QVERIFY(result.isNull()); -// FIXME: Returned null values are currently invalid QVariants. -// QVERIFY(result.isValid()); - } -}; - -class JavaScriptCallbackUndefined : public JavaScriptCallbackBase -{ -public: - void check(const QVariant& result) override - { - QVERIFY(result.isNull()); - QVERIFY(!result.isValid()); - } -}; - -class JavaScriptCallbackWatcher : public QObject -{ - Q_OBJECT -public: - JavaScriptCallbackWatcher() - { - Q_ASSERT(!JavaScriptCallbackBase::watcher); - JavaScriptCallbackBase::watcher = this; - } - - Q_INVOKABLE void add() - { - available++; - } - - Q_INVOKABLE void notify() - { - called++; - if (called == available) - emit allCalled(); - } - - bool wait(int maxSeconds = 30) - { - if (called == available) - return true; - - QTestEventLoop loop; - connect(this, SIGNAL(allCalled()), &loop, SLOT(exitLoop())); - loop.enterLoop(maxSeconds); - return !loop.timeout(); - } - -signals: - void allCalled(); - -private: - int available = 0; - int called = 0; -}; - - void tst_QWebEnginePage::runJavaScript() { TestPage page; - JavaScriptCallbackWatcher watcher; - - JavaScriptCallback callbackBool(QVariant(false)); - page.runJavaScript("false", QWebEngineCallback(callbackBool)); - - JavaScriptCallback callbackInt(QVariant(2)); - page.runJavaScript("2", QWebEngineCallback(callbackInt)); - - JavaScriptCallback callbackDouble(QVariant(2.5)); - page.runJavaScript("2.5", QWebEngineCallback(callbackDouble)); - - JavaScriptCallback callbackString(QVariant(QStringLiteral("Test"))); - page.runJavaScript("\"Test\"", QWebEngineCallback(callbackString)); - + QVariant result; QVariantList list; - JavaScriptCallback callbackList(list); - page.runJavaScript("[]", QWebEngineCallback(callbackList)); - QVariantMap map; - map.insert(QStringLiteral("test"), QVariant(2)); - JavaScriptCallback callbackMap(map); - page.runJavaScript("var el = {\"test\": 2}; el", QWebEngineCallback(callbackMap)); - JavaScriptCallbackNull callbackNull; - page.runJavaScript("null", QWebEngineCallback(callbackNull)); + QTRY_VERIFY(!evaluateJavaScriptSync(&page, "false").toBool()); + QTRY_COMPARE(evaluateJavaScriptSync(&page, "2").toInt(), 2); + QTRY_COMPARE(evaluateJavaScriptSync(&page, "2.5").toDouble(), 2.5); + QTRY_COMPARE(evaluateJavaScriptSync(&page, "\"Test\"").toString(), "Test"); + QTRY_COMPARE(evaluateJavaScriptSync(&page, "[]").toList(), list); - JavaScriptCallbackUndefined callbackUndefined; - page.runJavaScript("undefined", QWebEngineCallback(callbackUndefined)); + map.insert(QStringLiteral("test"), QVariant(2)); + QTRY_COMPARE(evaluateJavaScriptSync(&page, "var el = {\"test\": 2}; el").toMap(), map); - JavaScriptCallback callbackDate(QVariant(42.0)); - page.runJavaScript("new Date(42000)", QWebEngineCallback(callbackDate)); + QTRY_VERIFY(evaluateJavaScriptSync(&page, "null").isNull()); - JavaScriptCallback callbackBlob(QVariant(QByteArray(8, 0))); - page.runJavaScript("new ArrayBuffer(8)", QWebEngineCallback(callbackBlob)); + result = evaluateJavaScriptSync(&page, "undefined"); + QTRY_VERIFY(result.isNull() && !result.isValid()); - JavaScriptCallbackUndefined callbackFunction; - page.runJavaScript("(function(){})", QWebEngineCallback(callbackFunction)); + QTRY_COMPARE(evaluateJavaScriptSync(&page, "new Date(42000)").toDate(), QVariant(42.0).toDate()); + QTRY_COMPARE(evaluateJavaScriptSync(&page, "new ArrayBuffer(8)").toByteArray(), QByteArray(8, 0)); - JavaScriptCallback callbackPromise(QVariant(QVariantMap{})); - page.runJavaScript("new Promise(function(){})", QWebEngineCallback(callbackPromise)); + result = evaluateJavaScriptSync(&page, "(function(){})"); + QTRY_VERIFY(result.isNull() && !result.isValid()); - QVERIFY(watcher.wait()); + QTRY_COMPARE(evaluateJavaScriptSync(&page, "new Promise(function(){})"), QVariant(QVariantMap{})); } void tst_QWebEnginePage::runJavaScriptDisabled() @@ -1874,7 +1752,6 @@ void tst_QWebEnginePage::runJavaScriptFromSlot() void tst_QWebEnginePage::fullScreenRequested() { - JavaScriptCallbackWatcher watcher; QWebEngineView view; QWebEnginePage* page = view.page(); view.show(); @@ -1885,9 +1762,8 @@ void tst_QWebEnginePage::fullScreenRequested() page->load(QUrl("qrc:///resources/fullscreen.html")); QTRY_COMPARE(loadSpy.count(), 1); - page->runJavaScript("document.webkitFullscreenEnabled", JavaScriptCallback(true)); - page->runJavaScript("document.webkitIsFullScreen", JavaScriptCallback(false)); - QVERIFY(watcher.wait()); + QTRY_VERIFY(evaluateJavaScriptSync(page, "document.webkitFullscreenEnabled").toBool()); + QTRY_VERIFY(!evaluateJavaScriptSync(page, "document.webkitIsFullScreen").toBool()); // FullscreenRequest must be a user gesture bool acceptRequest = true; @@ -1898,16 +1774,14 @@ void tst_QWebEnginePage::fullScreenRequested() QTest::keyPress(view.focusProxy(), Qt::Key_Space); QTRY_VERIFY(evaluateJavaScriptSync(page, "document.webkitIsFullScreen").toBool()); - page->runJavaScript("document.webkitExitFullscreen()", JavaScriptCallbackUndefined()); - QVERIFY(watcher.wait()); + QVariant result = evaluateJavaScriptSync(page, "document.webkitExitFullscreen()"); + QTRY_VERIFY(result.isNull() && !result.isValid()); acceptRequest = false; - page->runJavaScript("document.webkitFullscreenEnabled", JavaScriptCallback(true)); + QTRY_VERIFY(evaluateJavaScriptSync(page, "document.webkitFullscreenEnabled").toBool()); QTest::keyPress(view.focusProxy(), Qt::Key_Space); - QVERIFY(watcher.wait()); - page->runJavaScript("document.webkitIsFullScreen", JavaScriptCallback(false)); - QVERIFY(watcher.wait()); + QTRY_VERIFY(!evaluateJavaScriptSync(page, "document.webkitIsFullScreen").toBool()); } void tst_QWebEnginePage::quotaRequested() -- cgit v1.2.3