mirror of
https://github.com/status-im/status-desktop.git
synced 2025-01-09 13:56:10 +00:00
98c18901e0
Add a new NetworkChecker QObject to StatusQ to be used in checking internet connection status. This is used by the WebEngineLoader to only allow loading of web pages when there is an active internet to cover for a corner case on MacOS where the internet connection is not reestablished if the WebEngineView was loaded without an active internet connection. Closes: #15598, #15806
113 lines
3.2 KiB
QML
113 lines
3.2 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]
|
|
|
|
waitForInternet: false
|
|
}
|
|
}
|
|
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")
|
|
}
|
|
}
|