diff options
Diffstat (limited to 'tests/webkitqml/qmltests/WebView/tst_resize.qml')
-rw-r--r-- | tests/webkitqml/qmltests/WebView/tst_resize.qml | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/tests/webkitqml/qmltests/WebView/tst_resize.qml b/tests/webkitqml/qmltests/WebView/tst_resize.qml new file mode 100644 index 000000000..86f4d720a --- /dev/null +++ b/tests/webkitqml/qmltests/WebView/tst_resize.qml @@ -0,0 +1,178 @@ +import QtQuick 2.0 +import QtTest 1.0 +import QtWebKit 3.0 +import QtWebKit.experimental 1.0 +import Test 1.0 +import "../common" + +Item { + TestWebView { + id: webView + width: 320 + height: 480 + + property variant result + + property variant content: "data:text/html," + + "<head>" + + " <meta name='viewport' content='width=device-width'>" + + "</head>" + + "<body>" + + " <div id='target' style='width: 240px; height: 360px;'>" + + " </div>" + + "</body>" + + signal resultReceived + } + + SignalSpy { + id: resultSpy + target: webView + signalName: "resultReceived" + } + + SignalSpy { + id: scaleSpy + target: webView.experimental.test + signalName: "contentsScaleCommitted" + } + + SignalSpy { + id: sizeSpy + target: webView.experimental.test + signalName: "contentsSizeChanged" + } + + TestCase { + name: "Resize" + when: windowShown + + property variant test: webView.experimental.test + + function init() { + resultSpy.clear() + scaleSpy.clear() + sizeSpy.clear() + } + + function run(signalSpy, script) { + signalSpy.clear(); + var result; + webView.experimental.evaluateJavaScript( + script, + function(value) { webView.resultReceived(); result = value }); + signalSpy.wait(); + return result; + } + + function contentsSize() { + return test.contentsSize.width + "x" + test.contentsSize.height; + } + + function elementRect(id) { + return JSON.parse(run(resultSpy, "JSON.stringify(document.getElementById('" + id + "').getBoundingClientRect());")) + } + + function doubleTapAtPoint(x, y) { + scaleSpy.clear() + test.touchDoubleTap(webView, x, y) + scaleSpy.wait() + } + + function resize(w, h) { + sizeSpy.clear() + webView.width = w + sizeSpy.wait() + webView.height = h + sizeSpy.wait() + } + + function test_basic() { + webView.url = webView.content + verify(webView.waitForViewportReady()) + + compare(contentsSize(), "320x480") + compare(test.contentsScale, 1.0) + + resize(480, 720) + compare(contentsSize(), "480x720") + compare(test.contentsScale, 1.0) + + resize(320, 480) + compare(contentsSize(), "320x480") + compare(test.contentsScale, 1.0) + + } + + function test_resizeAfterNeutralZoom() { + skip("https://github.com/qtwebkit/qtwebkit/issues/951") + webView.url = webView.content + verify(webView.waitForViewportReady()) + + compare(contentsSize(), "320x480") + compare(test.contentsScale, 1.0) + + var target = elementRect("target"); + var targetScale = webView.width / (target.width + 2 * 10) // inflated by 10px + + // Zoom in and out. + doubleTapAtPoint(100, 50) + + compare(test.contentsScale, targetScale) + + doubleTapAtPoint(100, 50) + + compare(test.contentsScale, 1.0) + + // Now check resizing still works as expected. + resize(480, 720) + compare(contentsSize(), "480x720") + compare(test.contentsScale, 1.0) + + resize(320, 480) + compare(contentsSize(), "320x480") + compare(test.contentsScale, 1.0) + } + + function test_resizeZoomedIn() { + skip("https://github.com/qtwebkit/qtwebkit/issues/951") + + // Note that if we change the behavior of resize on zoomed-in content, for instance + // to preserve the visible width (like rotate), this test will need to be updated. + webView.url = webView.content + verify(webView.waitForViewportReady()) + + compare(contentsSize(), "320x480") + compare(test.contentsScale, 1.0) + + var target = elementRect("target"); + var targetScale = webView.width / (target.width + 2 * 10) // inflated by 10px + + // Double tap to zoom in. + doubleTapAtPoint(100, 50) + + compare(test.contentsScale, targetScale) + + // Resize just a small bit, not changing scale. + resize(288, 432) + compare(contentsSize(), "288x432") + compare(test.contentsScale, targetScale) + + // And double tap to reset zoom. + target = elementRect("target"); + targetScale = webView.width / (target.width + 2 * 10) + doubleTapAtPoint(100, 50) + compare(test.contentsScale, targetScale) + + // Double tap again to zoom out. + doubleTapAtPoint(100, 50) + compare(contentsSize(), "288x432") + compare(test.contentsScale, 1.0) + + // And reset + resize(320, 480) + compare(contentsSize(), "320x480") + compare(test.contentsScale, 1.0) + } + } +} |