From 284003c590e79404ebcdd7665f61f7a533bdc0a7 Mon Sep 17 00:00:00 2001 From: Pierre Rossi Date: Wed, 16 Oct 2013 11:13:02 +0200 Subject: Fix tst_QWebEnginePage's use of evaluateJavaScript Mostly speculative autotest adjustments due to lacking features Change-Id: I5b0cfa8fb586ae4531327c21d03b064d9c307d06 Reviewed-by: Jocelyn Turcotte --- .../widgets/qwebenginepage/tst_qwebenginepage.cpp | 250 ++++++++++----------- tests/auto/widgets/util.h | 7 + 2 files changed, 128 insertions(+), 129 deletions(-) (limited to 'tests/auto/widgets') diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp index 2a85b010c..addb2bb85 100644 --- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp +++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp @@ -265,10 +265,10 @@ void tst_QWebEnginePage::acceptNavigationRequest() ""), QUrl()); QTRY_COMPARE(loadSpy.count(), 1); - m_view->page()->evaluateJavaScript("tstform.submit();"); + evaluateJavaScriptSync(m_view->page(), "tstform.submit();"); newPage->m_acceptNavigationRequest = true; - m_view->page()->evaluateJavaScript("tstform.submit();"); + evaluateJavaScriptSync(m_view->page(), "tstform.submit();"); QTRY_COMPARE(loadSpy.count(), 2); QCOMPARE(m_view->page()->toPlainText(), QString("foo?")); @@ -330,7 +330,7 @@ void tst_QWebEnginePage::geolocationRequestJS() #else JSTestPage* newPage = new JSTestPage(m_view); - if (newPage->evaluateJavaScript(QLatin1String("!navigator.geolocation")).toBool()) { + if (evaluateJavaScriptSync(newPage, QLatin1String("!navigator.geolocation")).toBool()) { delete newPage; W_QSKIP("Geolocation is not supported.", SkipSingle); } @@ -341,16 +341,16 @@ void tst_QWebEnginePage::geolocationRequestJS() newPage->setGeolocationPermission(false); m_view->setPage(newPage); m_view->setHtml(QString("test"), QUrl()); - m_view->page()->evaluateJavaScript("var errorCode = 0; function error(err) { errorCode = err.code; } function success(pos) { } navigator.geolocation.getCurrentPosition(success, error)"); + evaluateJavaScriptSync(m_view->page(), "var errorCode = 0; function error(err) { errorCode = err.code; } function success(pos) { } navigator.geolocation.getCurrentPosition(success, error)"); QTest::qWait(2000); - QVariant empty = m_view->page()->evaluateJavaScript("errorCode"); + QVariant empty = evaluateJavaScriptSync(m_view->page(), "errorCode"); QEXPECT_FAIL("", "https://bugs.webkit.org/show_bug.cgi?id=102235", Continue); QVERIFY(empty.type() == QVariant::Double && empty.toInt() != 0); newPage->setGeolocationPermission(true); - m_view->page()->evaluateJavaScript("errorCode = 0; navigator.geolocation.getCurrentPosition(success, error);"); - empty = m_view->page()->evaluateJavaScript("errorCode"); + evaluateJavaScriptSync(m_view->page(), "errorCode = 0; navigator.geolocation.getCurrentPosition(success, error);"); + empty = evaluateJavaScriptSync(m_view->page(), "errorCode"); //http://dev.w3.org/geo/api/spec-source.html#position //PositionError: const unsigned short PERMISSION_DENIED = 1; @@ -413,11 +413,12 @@ public: void tst_QWebEnginePage::consoleOutput() { -#if !defined(QWEBENGINEPAGE_EVALUATEJAVASCRIPT) - QSKIP("QWEBENGINEPAGE_EVALUATEJAVASCRIPT"); +#if !defined(QWEBENGINEPAGE_JAVASCRIPTCONSOLEMESSAGE) + QSKIP("QWEBENGINEPAGE_JAVASCRIPTCONSOLEMESSAGE"); #else ConsolePage page; - page.evaluateJavaScript("this is not valid JavaScript"); + // We don't care about the result but want this to be synchronous + evaluateJavaScriptSync(&page, "this is not valid JavaScript"); QCOMPARE(page.messages.count(), 1); QCOMPARE(page.lineNumbers.at(0), 1); #endif @@ -464,16 +465,16 @@ private Q_SLOTS: void tst_QWebEnginePage::popupFormSubmission() { -#if !defined(QWEBENGINEPAGE_EVALUATEJAVASCRIPT) - QSKIP("QWEBENGINEPAGE_EVALUATEJAVASCRIPT"); +#if !defined(QWEBENGINEPAGE_SETTINGS) + QSKIP("QWEBENGINEPAGE_SETTINGS"); #else TestPage page; page.settings()->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, true); page.setHtml("
"\ ""\ "
"); - page.evaluateJavaScript("window.open('', 'myNewWin', 'width=500,height=300,toolbar=0')"); - page.evaluateJavaScript("document.form1.submit();"); + page.runJavaScript("window.open('', 'myNewWin', 'width=500,height=300,toolbar=0')"); + evaluateJavaScriptSync(&page, "document.form1.submit();"); QTest::qWait(500); // The number of popup created should be one. @@ -603,19 +604,19 @@ void tst_QWebEnginePage::loadHtml5Video() void tst_QWebEnginePage::viewModes() { -#if !defined(QWEBENGINEPAGE_EVALUATEJAVASCRIPT) - QSKIP("QWEBENGINEPAGE_EVALUATEJAVASCRIPT"); +#if !defined(QWEBENGINEPAGE_VIEW_MODES) + QSKIP("QWEBENGINEPAGE_VIEW_MODES"); #else m_view->setHtml(""); m_page->setProperty("_q_viewMode", "minimized"); - QVariant empty = m_page->evaluateJavaScript("window.styleMedia.matchMedium(\"(-webengine-view-mode)\")"); + QVariant empty = evaluateJavaScriptSync(m_page, "window.styleMedia.matchMedium(\"(-webengine-view-mode)\")"); QVERIFY(empty.type() == QVariant::Bool && empty.toBool()); - QVariant minimized = m_page->evaluateJavaScript("window.styleMedia.matchMedium(\"(-webengine-view-mode: minimized)\")"); + QVariant minimized = evaluateJavaScriptSync(m_page, "window.styleMedia.matchMedium(\"(-webengine-view-mode: minimized)\")"); QVERIFY(minimized.type() == QVariant::Bool && minimized.toBool()); - QVariant maximized = m_page->evaluateJavaScript("window.styleMedia.matchMedium(\"(-webengine-view-mode: maximized)\")"); + QVariant maximized = evaluateJavaScriptSync(m_page, "window.styleMedia.matchMedium(\"(-webengine-view-mode: maximized)\")"); QVERIFY(maximized.type() == QVariant::Bool && !maximized.toBool()); #endif } @@ -633,17 +634,16 @@ void tst_QWebEnginePage::modified() QVERIFY(!m_page->isModified()); -// m_page->evaluateJavaScript("alert(document.getElementById('foo'))"); - m_page->evaluateJavaScript("document.getElementById('foo').focus()"); - m_page->evaluateJavaScript("document.execCommand('InsertText', true, 'Test');"); + m_page->runJavaScript("document.getElementById('foo').focus()"); + evaluateJavaScriptSync(m_page, "document.execCommand('InsertText', true, 'Test');"); QVERIFY(m_page->isModified()); - m_page->evaluateJavaScript("document.execCommand('Undo', true);"); + evaluateJavaScriptSync(m_page, "document.execCommand('Undo', true);"); QVERIFY(!m_page->isModified()); - m_page->evaluateJavaScript("document.execCommand('Redo', true);"); + evaluateJavaScriptSync(m_page, "document.execCommand('Redo', true);"); QVERIFY(m_page->isModified()); @@ -661,10 +661,10 @@ void tst_QWebEnginePage::modified() QVERIFY(!m_page->isModified()); - QVERIFY(m_page->history()->currentItemIndex() == 0); + QCOMPARE(m_page->history()->currentItemIndex(), 0); m_page->history()->setMaximumItemCount(3); - QVERIFY(m_page->history()->maximumItemCount() == 3); + QCOMPARE(m_page->history()->maximumItemCount(), 3); QVariant variant("string test"); m_page->history()->currentItem().setUserData(variant); @@ -672,9 +672,9 @@ void tst_QWebEnginePage::modified() m_page->setUrl(QUrl("data:text/html,This is second page")); m_page->setUrl(QUrl("data:text/html,This is third page")); - QVERIFY(m_page->history()->count() == 2); + QCOMPARE(m_page->history()->count(), 2); m_page->setUrl(QUrl("data:text/html,This is fourth page")); - QVERIFY(m_page->history()->count() == 2); + QCOMPARE(m_page->history()->count(), 2); m_page->setUrl(QUrl("data:text/html,This is fifth page")); QVERIFY(::waitForSignal(m_page, SIGNAL(saveFrameStateRequested(QWebEngineFrame*,QWebEngineHistoryItem*)))); #endif @@ -747,22 +747,22 @@ void tst_QWebEnginePage::database() QSignalSpy spy(m_page, SIGNAL(databaseQuotaExceeded(QWebEngineFrame*,QString))); m_view->setHtml(QString("
"), QUrl("http://www.myexample.com")); QTRY_COMPARE(spy.count(), 1); - m_page->evaluateJavaScript("var db2; db2=openDatabase('testdb', '1.0', 'test database API', 50000);"); + evaluateJavaScriptSync(m_page, "var db2; db2=openDatabase('testdb', '1.0', 'test database API', 50000);"); QTRY_COMPARE(spy.count(),1); - m_page->evaluateJavaScript("localStorage.test='This is a test for local storage';"); + evaluateJavaScriptSync(m_page, "localStorage.test='This is a test for local storage';"); m_view->setHtml(QString("text"), QUrl("http://www.myexample.com")); - QVariant s1 = m_page->evaluateJavaScript("localStorage.test"); + QVariant s1 = evaluateJavaScriptSync(m_page, "localStorage.test"); QCOMPARE(s1.toString(), QString("This is a test for local storage")); - m_page->evaluateJavaScript("sessionStorage.test='This is a test for session storage';"); + evaluateJavaScriptSync(m_page, "sessionStorage.test='This is a test for session storage';"); m_view->setHtml(QString("text"), QUrl("http://www.myexample.com")); - QVariant s2 = m_page->evaluateJavaScript("sessionStorage.test"); + QVariant s2 = evaluateJavaScriptSync(m_page, "sessionStorage.test"); QCOMPARE(s2.toString(), QString("This is a test for session storage")); m_view->setHtml(QString("
"), QUrl("http://www.myexample.com")); - m_page->evaluateJavaScript("var db3; db3=openDatabase('testdb', '1.0', 'test database API', 50000);db3.transaction(function(tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS Test (text TEXT)', []); }, function(tx, result) { }, function(tx, error) { });"); + evaluateJavaScriptSync(m_page, "var db3; db3=openDatabase('testdb', '1.0', 'test database API', 50000);db3.transaction(function(tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS Test (text TEXT)', []); }, function(tx, result) { }, function(tx, error) { });"); QTest::qWait(200); // Remove all databases. @@ -857,17 +857,17 @@ static void createPlugin(QWebEngineView *view) QVERIFY(ci.returnValue->inherits("QPushButton")); } // test JS bindings - QCOMPARE(newPage->evaluateJavaScript("document.getElementById('mybutton').toString()").toString(), + QCOMPARE(evaluateJavaScriptSync(newPage, "document.getElementById('mybutton').toString()").toString(), QString::fromLatin1("[object HTMLObjectElement]")); - QCOMPARE(newPage->evaluateJavaScript("mybutton.toString()").toString(), + QCOMPARE(evaluateJavaScriptSync(newPage, "mybutton.toString()").toString(), QString::fromLatin1("[object HTMLObjectElement]")); - QCOMPARE(newPage->evaluateJavaScript("typeof mybutton.objectName").toString(), + QCOMPARE(evaluateJavaScriptSync(newPage, "typeof mybutton.objectName").toString(), QString::fromLatin1("string")); - QCOMPARE(newPage->evaluateJavaScript("mybutton.objectName").toString(), + QCOMPARE(evaluateJavaScriptSync(newPage, "mybutton.objectName").toString(), QString::fromLatin1("pushbutton")); - QCOMPARE(newPage->evaluateJavaScript("typeof mybutton.clicked").toString(), + QCOMPARE(evaluateJavaScriptSync(newPage, "typeof mybutton.clicked").toString(), QString::fromLatin1("function")); - QCOMPARE(newPage->evaluateJavaScript("mybutton.clicked.toString()").toString(), + QCOMPARE(evaluateJavaScriptSync(newPage, "mybutton.clicked.toString()").toString(), QString::fromLatin1("function clicked() {\n [native code]\n}")); view->setHtml(QString("" @@ -946,17 +946,17 @@ void tst_QWebEnginePage::graphicsWidgetPlugin() QVERIFY(ci.returnValue->inherits("QGraphicsWidget")); } // test JS bindings - QCOMPARE(newPage->evaluateJavaScript("document.getElementById('mygraphicswidget').toString()").toString(), + QCOMPARE(evaluateJavaScriptSync(newPage, "document.getElementById('mygraphicswidget').toString()").toString(), QString::fromLatin1("[object HTMLObjectElement]")); - QCOMPARE(newPage->evaluateJavaScript("mygraphicswidget.toString()").toString(), + QCOMPARE(evaluateJavaScriptSync(newPage, "mygraphicswidget.toString()").toString(), QString::fromLatin1("[object HTMLObjectElement]")); - QCOMPARE(newPage->evaluateJavaScript("typeof mygraphicswidget.objectName").toString(), + QCOMPARE(evaluateJavaScriptSync(newPage, "typeof mygraphicswidget.objectName").toString(), QString::fromLatin1("string")); - QCOMPARE(newPage->evaluateJavaScript("mygraphicswidget.objectName").toString(), + QCOMPARE(evaluateJavaScriptSync(newPage, "mygraphicswidget.objectName").toString(), QString::fromLatin1("graphicswidget")); - QCOMPARE(newPage->evaluateJavaScript("typeof mygraphicswidget.geometryChanged").toString(), + QCOMPARE(evaluateJavaScriptSync(newPage, "typeof mygraphicswidget.geometryChanged").toString(), QString::fromLatin1("function")); - QCOMPARE(newPage->evaluateJavaScript("mygraphicswidget.geometryChanged.toString()").toString(), + QCOMPARE(evaluateJavaScriptSync(newPage, "mygraphicswidget.geometryChanged.toString()").toString(), QString::fromLatin1("function geometryChanged() {\n [native code]\n}")); #endif } @@ -1132,16 +1132,16 @@ void tst_QWebEnginePage::multiplePageGroupsAndLocalStorage() view1.setHtml(QString(""), QUrl("http://www.myexample.com")); view2.setHtml(QString(""), QUrl("http://www.myexample.com")); - view1.page()->evaluateJavaScript("localStorage.test='value1';"); - view2.page()->evaluateJavaScript("localStorage.test='value2';"); + evaluateJavaScriptSync(view1.page(), "localStorage.test='value1';"); + evaluateJavaScriptSync(view2.page(), "localStorage.test='value2';"); view1.setHtml(QString(""), QUrl("http://www.myexample.com")); view2.setHtml(QString(""), QUrl("http://www.myexample.com")); - QVariant s1 = view1.page()->evaluateJavaScript("localStorage.test"); + QVariant s1 = evaluateJavaScriptSync(view1.page(), "localStorage.test"); QCOMPARE(s1.toString(), QString("value1")); - QVariant s2 = view2.page()->evaluateJavaScript("localStorage.test"); + QVariant s2 = evaluateJavaScriptSync(view2.page(), "localStorage.test"); QCOMPARE(s2.toString(), QString("value2")); QTest::qWait(1000); @@ -1153,7 +1153,6 @@ void tst_QWebEnginePage::multiplePageGroupsAndLocalStorage() #endif } -#if defined(QWEBENGINEPAGE_EVALUATEJAVASCRIPT) class CursorTrackedPage : public QWebEnginePage { public: @@ -1163,28 +1162,27 @@ public: } QString selectedText() { - return evaluateJavaScript("window.getSelection().toString()").toString(); + return evaluateJavaScriptSync(this, "window.getSelection().toString()").toString(); } int selectionStartOffset() { - return evaluateJavaScript("window.getSelection().getRangeAt(0).startOffset").toInt(); + return evaluateJavaScriptSync(this, "window.getSelection().getRangeAt(0).startOffset").toInt(); } int selectionEndOffset() { - return evaluateJavaScript("window.getSelection().getRangeAt(0).endOffset").toInt(); + return evaluateJavaScriptSync(this, "window.getSelection().getRangeAt(0).endOffset").toInt(); } // true if start offset == end offset, i.e. no selected text int isSelectionCollapsed() { - return evaluateJavaScript("window.getSelection().getRangeAt(0).collapsed").toBool(); + return evaluateJavaScriptSync(this, "window.getSelection().getRangeAt(0).collapsed").toBool(); } }; -#endif void tst_QWebEnginePage::cursorMovements() { -#if !defined(QWEBENGINEPAGE_EVALUATEJAVASCRIPT) - QSKIP("QWEBENGINEPAGE_EVALUATEJAVASCRIPT"); +#if !defined(QWEBENGINEPAGE_SELECTEDTEXT) + QSKIP("QWEBENGINEPAGE_SELECTEDTEXT"); #else CursorTrackedPage* page = new CursorTrackedPage; QString content("

The quick brown fox

jumps over the lazy dog

May the source
be with you!

"); @@ -1195,7 +1193,7 @@ void tst_QWebEnginePage::cursorMovements() "var node = document.getElementById(\"one\"); " \ "range.selectNode(node); " \ "getSelection().addRange(range);"; - page->evaluateJavaScript(script); + evaluateJavaScriptSync(page, script); QCOMPARE(page->selectedText().trimmed(), QString::fromLatin1("The quick brown fox")); QRegExp regExp(" style=\".*\""); @@ -1433,7 +1431,7 @@ void tst_QWebEnginePage::textSelection() "var node = document.getElementById(\"one\"); " \ "range.selectNode(node); " \ "getSelection().addRange(range);"; - page->evaluateJavaScript(selectScript); + evaluateJavaScriptSync(page, selectScript); QCOMPARE(page->selectedText().trimmed(), QString::fromLatin1("The quick brown fox")); QRegExp regExp(" style=\".*\""); regExp.setMinimal(true); @@ -2034,20 +2032,20 @@ void tst_QWebEnginePage::inputMethods() page->setHtml("" \ "" \ ""); - page->evaluateJavaScript("var inputEle = document.getElementById('input3'); inputEle.focus(); inputEle.select();"); + evaluateJavaScriptSync(page, "var inputEle = document.getElementById('input3'); inputEle.focus(); inputEle.select();"); //Send empty QInputMethodEvent QInputMethodEvent emptyEvent; page->event(&emptyEvent); - QString inputValue = page->evaluateJavaScript("document.getElementById('input3').value").toString(); + QString inputValue = evaluateJavaScriptSync(page, "document.getElementById('input3').value").toString(); QCOMPARE(inputValue, QString("QtWebEngine2")); //END - Test for sending empty QInputMethodEvent page->setHtml("" \ "" \ ""); - page->evaluateJavaScript("var inputEle = document.getElementById('input4'); inputEle.focus(); inputEle.select();"); + evaluateJavaScriptSync(page, "var inputEle = document.getElementById('input4'); inputEle.focus(); inputEle.select();"); // Clear the selection, also cancel the ongoing composition if there is one. { @@ -2367,7 +2365,7 @@ void tst_QWebEnginePage::inputMethods() page->setHtml("" \ "