tst_evaluateJavaScript.qml   [plain text]


import QtQuick 2.0
import QtTest 1.0
import QtWebKit 3.0
import QtWebKit.experimental 1.0
import "../common"

Item {
    TestWebView {
        id: webView
        property variant lastMessage
        property variant lastResult

        experimental.preferences.navigatorQtObjectEnabled: true
        experimental.onMessageReceived: {
            lastMessage = message
        }
    }

    SignalSpy {
        id: messageSpy
        target: webView.experimental
        signalName: "messageReceived"
    }

    SignalSpy {
        id: resultSpy
        target: webView
        signalName: "lastResultChanged"
    }

    TestCase {
        name: "JavaScriptEvaluation"

        function init() {
            messageSpy.clear()
            webView.lastMessage = null

            resultSpy.clear()
            webView.lastResult = null
        }

        function test_basic() {
            messageSpy.clear()
            webView.url = "about:blank"
            verify(webView.waitForLoadSucceeded())

            webView.experimental.evaluateJavaScript(
                "navigator.qt.onmessage = function(message) {" +
                "    var result = message.data.split('');" +
                "    result = result.reverse().join('');" +
                "    navigator.qt.postMessage(result);" +
                "}");

            webView.experimental.postMessage("DLROW OLLEH");
            messageSpy.wait()
            compare(webView.lastMessage.data, "HELLO WORLD")
        }

        function test_propertyObjectWithChild() {
            resultSpy.clear()
            webView.url = "about:blank"
            verify(webView.waitForLoadSucceeded())

            webView.experimental.evaluateJavaScript(
                "(function() {" +
                "    var parent = new Object;" +
                "    var child = new Object;" +
                "    parent['level'] = '1';" +
                "    child['level'] = 2;" +
                "    parent['child'] = child;" +
                "    return parent;" +
                "})()",

                function(result) {
                    webView.lastResult = result
                });

            resultSpy.wait()

            compare(JSON.stringify(webView.lastResult),
                '{"child":{"level":2},"level":"1"}')
        }

        function test_booleanValue() {
            resultSpy.clear()
            webView.url = "about:blank"
            verify(webView.waitForLoadSucceeded())

            webView.experimental.evaluateJavaScript(
                "(function() { return true })()",

                function(result) {
                    webView.lastResult = result
                })

            resultSpy.wait()
            verify(typeof webView.lastResult === "boolean")
            compare(webView.lastResult, true)
        }

        function test_stringValue() {
            resultSpy.clear()
            webView.url = "about:blank"
            verify(webView.waitForLoadSucceeded())

            webView.experimental.evaluateJavaScript(
                "(function() { return 'dongs' })()",

                function(result) {
                    webView.lastResult = result
                })

            resultSpy.wait()
            verify(typeof webView.lastResult === "string")
            compare(webView.lastResult, "dongs")
        }

        function test_integerValue() {
            resultSpy.clear()
            webView.url = "about:blank"
            verify(webView.waitForLoadSucceeded())

            webView.experimental.evaluateJavaScript(
                "(function() { return 1337 })()",

                function(result) {
                    webView.lastResult = result
                })

            resultSpy.wait()
            verify(typeof webView.lastResult === "number")
            compare(webView.lastResult, 1337)
        }

        function test_floatValue() {
            resultSpy.clear()
            webView.url = "about:blank"
            verify(webView.waitForLoadSucceeded())

            webView.experimental.evaluateJavaScript(
                "(function() { return 13.37 })()",

                function(result) {
                    webView.lastResult = result
                })

            resultSpy.wait()
            verify(typeof webView.lastResult === "number")
            compare(webView.lastResult, 13.37)
        }

        function test_queryTitle() {
            resultSpy.clear()
            var testUrl = Qt.resolvedUrl("../common/evaluatejavascript.html")
            webView.url = testUrl
            verify(webView.waitForLoadSucceeded())

            webView.experimental.evaluateJavaScript(
                "(function() {" +
                "   return document.title" +
                "})()",

                function(result) {
                    webView.lastResult = result
                })

            resultSpy.wait()
            compare(webView.lastResult, "Evaluate JavaScript")
        }

        function test_queryById() {
            resultSpy.clear()
            var testUrl = Qt.resolvedUrl("../common/evaluatejavascript.html")
            webView.url = testUrl
            verify(webView.waitForLoadSucceeded())

            webView.experimental.evaluateJavaScript(
                "(function() {" +
                "   return document.getElementById('text').innerHTML" +
                "})()",

                function(result) {
                    webView.lastResult = result
                })

            resultSpy.wait()
            compare(webView.lastResult, "Hello from the WebProcess :-)")
        }
    }
}