diff options
author | Tamas Zakor <ztamas@inf.u-szeged.hu> | 2019-12-09 10:03:31 +0100 |
---|---|---|
committer | Tamas Zakor <ztamas@inf.u-szeged.hu> | 2019-12-18 15:54:27 +0100 |
commit | 65fb4b7eaf3acf9c77769b19a6d9b0d67c997479 (patch) | |
tree | 4960f798b011c3e9d25d5db37af2d7e2f8220907 /tests/auto/widgets | |
parent | 17ea5b6534d6221e50cdd37dc773e03b5d34665e (diff) |
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 <allan.jensen@qt.io>
Diffstat (limited to 'tests/auto/widgets')
-rw-r--r-- | tests/auto/widgets/qwebenginepage/BLACKLIST | 3 | ||||
-rw-r--r-- | tests/auto/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<QObject> watcher; -}; - -QPointer<QObject> 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<const QVariant&>(callbackBool)); - - JavaScriptCallback callbackInt(QVariant(2)); - page.runJavaScript("2", QWebEngineCallback<const QVariant&>(callbackInt)); - - JavaScriptCallback callbackDouble(QVariant(2.5)); - page.runJavaScript("2.5", QWebEngineCallback<const QVariant&>(callbackDouble)); - - JavaScriptCallback callbackString(QVariant(QStringLiteral("Test"))); - page.runJavaScript("\"Test\"", QWebEngineCallback<const QVariant&>(callbackString)); - + QVariant result; QVariantList list; - JavaScriptCallback callbackList(list); - page.runJavaScript("[]", QWebEngineCallback<const QVariant&>(callbackList)); - QVariantMap map; - map.insert(QStringLiteral("test"), QVariant(2)); - JavaScriptCallback callbackMap(map); - page.runJavaScript("var el = {\"test\": 2}; el", QWebEngineCallback<const QVariant&>(callbackMap)); - JavaScriptCallbackNull callbackNull; - page.runJavaScript("null", QWebEngineCallback<const QVariant&>(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<const QVariant&>(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<const QVariant&>(callbackDate)); + QTRY_VERIFY(evaluateJavaScriptSync(&page, "null").isNull()); - JavaScriptCallback callbackBlob(QVariant(QByteArray(8, 0))); - page.runJavaScript("new ArrayBuffer(8)", QWebEngineCallback<const QVariant&>(callbackBlob)); + result = evaluateJavaScriptSync(&page, "undefined"); + QTRY_VERIFY(result.isNull() && !result.isValid()); - JavaScriptCallbackUndefined callbackFunction; - page.runJavaScript("(function(){})", QWebEngineCallback<const QVariant&>(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<const QVariant&>(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() |