111 lines
3.1 KiB
QML
111 lines
3.1 KiB
QML
|
import QtQuick 2.15
|
||
|
import QtTest 1.0
|
||
|
|
||
|
import QtWebEngine 1.10
|
||
|
import QtWebChannel 1.15
|
||
|
|
||
|
import StatusQ 0.1 // https://github.com/status-im/status-desktop/issues/10218
|
||
|
|
||
|
import StatusQ.Components 0.1
|
||
|
|
||
|
import StatusQ.TestHelpers 0.1
|
||
|
|
||
|
TestCase {
|
||
|
id: root
|
||
|
name: "TestWebEngineLoader"
|
||
|
|
||
|
QtObject {
|
||
|
id: testObject
|
||
|
|
||
|
WebChannel.id: "testObject"
|
||
|
|
||
|
signal webChannelInitOk()
|
||
|
signal webChannelError()
|
||
|
function signalWebChannelInitResult(error) {
|
||
|
if(error) {
|
||
|
webChannelError()
|
||
|
} else {
|
||
|
webChannelInitOk()
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Loader {
|
||
|
id: loader
|
||
|
|
||
|
active: false
|
||
|
|
||
|
sourceComponent: WebEngineLoader {
|
||
|
url: "./WebEngineLoader/test.html"
|
||
|
webChannelObjects: [testObject]
|
||
|
}
|
||
|
}
|
||
|
SignalSpy { id: loadedSpy; target: loader; signalName: "loaded" }
|
||
|
|
||
|
SignalSpy { id: webEngineLoadedSpy; target: loader.item; signalName: "engineLoaded" }
|
||
|
SignalSpy { id: pageLoadedSpy; target: loader.item; signalName: "pageLoaded" }
|
||
|
SignalSpy { id: engineUnloadedSpy; target: loader.item; signalName: "engineUnloaded" }
|
||
|
SignalSpy { id: pageLoadingErrorSpy; target: loader.item; signalName: "onPageLoadingError" }
|
||
|
|
||
|
function init() {
|
||
|
for (var i = 0; i < root.children.length; i++) {
|
||
|
const child = root.children[i]
|
||
|
if(child.hasOwnProperty("signalName")) {
|
||
|
child.clear()
|
||
|
}
|
||
|
}
|
||
|
loader.active = true
|
||
|
loadedSpy.wait(1000);
|
||
|
}
|
||
|
|
||
|
function cleanup() {
|
||
|
loader.active = false
|
||
|
}
|
||
|
|
||
|
function test_loadUnload() {
|
||
|
const webEngine = loader.item
|
||
|
compare(webEngine.instance, null, "By default the engine is not loaded")
|
||
|
webEngine.active = true
|
||
|
|
||
|
webEngineLoadedSpy.wait(1000);
|
||
|
verify(webEngine.instance !== null , "The WebEngineView should be available")
|
||
|
|
||
|
if (Qt.platform.os === "linux") {
|
||
|
skip("fails to load page on linux")
|
||
|
}
|
||
|
pageLoadedSpy.wait(1000);
|
||
|
webEngine.active = false
|
||
|
engineUnloadedSpy.wait(1000);
|
||
|
|
||
|
verify(webEngine.instance === null , "The WebEngineView should be unavailable")
|
||
|
}
|
||
|
|
||
|
SignalSpy { id: wcInitOkSpy; target: testObject; signalName: "webChannelInitOk" }
|
||
|
SignalSpy { id: wcInitErrorSpy; target: testObject; signalName: "webChannelError" }
|
||
|
function test_executeCode() {
|
||
|
if (Qt.platform.os === "linux") {
|
||
|
skip("fails to load page on linux")
|
||
|
}
|
||
|
|
||
|
const webEngine = loader.item
|
||
|
webEngine.active = true
|
||
|
pageLoadedSpy.wait(1000);
|
||
|
|
||
|
let errorResult = null
|
||
|
webEngine.instance.runJavaScript(`
|
||
|
window.testError = window.statusq.error;
|
||
|
try {
|
||
|
window.statusq.channel.objects.testObject.signalWebChannelInitResult("");
|
||
|
} catch (e) {
|
||
|
window.testError = e.message;
|
||
|
}
|
||
|
window.testError
|
||
|
`, function(result) {
|
||
|
errorResult = result
|
||
|
})
|
||
|
|
||
|
wcInitOkSpy.wait(1000);
|
||
|
compare(errorResult, "", "Expected empty error string if all good")
|
||
|
}
|
||
|
}
|