diff options
author | Dominik Holland <dominik.holland@pelagicore.com> | 2017-01-17 11:58:38 +0100 |
---|---|---|
committer | Robert Griebl <robert.griebl@pelagicore.com> | 2017-01-18 16:43:39 +0000 |
commit | f25f34be2fadca327b0de3bab30c9331af4b69aa (patch) | |
tree | 2e4313a9c5ffe7253f2fd68e88d336103e922874 | |
parent | 12434e087d52f3eb0b2db9ea7e7cf7f402a77300 (diff) | |
download | qtapplicationmanager-f25f34be2fadca327b0de3bab30c9331af4b69aa.tar.gz |
Improve the qml applicationmanager unit test
Added tests for start/stop/debug application.
Added detection for singleProcess
Change-Id: Ib5586240e2187df5c46801750953a1bbd8aaed53
Reviewed-by: Robert Griebl <robert.griebl@pelagicore.com>
-rw-r--r-- | tests/qml/simple/am-config.yaml | 12 | ||||
-rw-r--r-- | tests/qml/simple/apps/tld.test.simple1/app1.qml | 5 | ||||
-rw-r--r-- | tests/qml/simple/apps/tld.test.simple2/app.qml | 7 | ||||
-rw-r--r-- | tests/qml/simple/tst_applicationmanager.qml | 102 |
4 files changed, 125 insertions, 1 deletions
diff --git a/tests/qml/simple/am-config.yaml b/tests/qml/simple/am-config.yaml index 983e0268..614e1b00 100644 --- a/tests/qml/simple/am-config.yaml +++ b/tests/qml/simple/am-config.yaml @@ -60,3 +60,15 @@ systemProperties: flags: noSecurity: yes noUiWatchdog: yes + +runtimes: + qml: + quitTime: 5000 + +debugWrappers: +- name: fakedebugger + command: [ '%program%', '%arguments%' ] + parameters: # <name>: <default value> + supportedRuntimes: [ native, qml ] + supportedContainers: [ process ] + diff --git a/tests/qml/simple/apps/tld.test.simple1/app1.qml b/tests/qml/simple/apps/tld.test.simple1/app1.qml index 95e2d6e3..dfa306c7 100644 --- a/tests/qml/simple/apps/tld.test.simple1/app1.qml +++ b/tests/qml/simple/apps/tld.test.simple1/app1.qml @@ -61,4 +61,9 @@ ApplicationManagerWindow { width: 180; height: 180; radius: width/4 color: "red" } + + Connections { + target: ApplicationInterface + onQuit: { target.acknowledgeQuit();} + } } diff --git a/tests/qml/simple/apps/tld.test.simple2/app.qml b/tests/qml/simple/apps/tld.test.simple2/app.qml index 95e2d6e3..50d83fd7 100644 --- a/tests/qml/simple/apps/tld.test.simple2/app.qml +++ b/tests/qml/simple/apps/tld.test.simple2/app.qml @@ -61,4 +61,11 @@ ApplicationManagerWindow { width: 180; height: 180; radius: width/4 color: "red" } + + Connections { + target: ApplicationInterface + onQuit: { + //Do nothing, to we get killed by appman + } + } } diff --git a/tests/qml/simple/tst_applicationmanager.qml b/tests/qml/simple/tst_applicationmanager.qml index 25fe0765..7e588170 100644 --- a/tests/qml/simple/tst_applicationmanager.qml +++ b/tests/qml/simple/tst_applicationmanager.qml @@ -40,16 +40,37 @@ ****************************************************************************/ import QtQuick 2.3 +import QtQuick.Window 2.0 import QtTest 1.0 import QtApplicationManager 1.0 import QtApplicationManager 1.0 as AppMan TestCase { + id: testCase + when: windowShown name: "ApplicationManager" property var simpleApplication property var applicationAlias property var capsApplication + // Either appman is build in single-process mode or it was started with --force-single-process + property bool singleProcess : Qt.application.arguments.indexOf("--force-single-process") !== -1 || buildConfig[0].CONFIG.indexOf("multi-process") === -1 + property QtObject windowHandler: QtObject { + function windowReadyHandler(index, window) { + console.info("window " + index + " ready") + window.parent = testCase + window.height = 200 + window.width = 200 + } + + function windowClosingHandler(index, window) { + console.info("window " + index + " closing") + } + + function windowLostHandler(index, window) { + console.info("window " + index + " lost") + } + } ListView { id: listView @@ -60,12 +81,27 @@ TestCase { } function initTestCase() { + //Wait for the debugging wrappers to be setup. + wait(2000); + WindowManager.windowReady.connect(windowHandler.windowReadyHandler) + WindowManager.windowClosing.connect(windowHandler.windowClosingHandler) + WindowManager.windowLost.connect(windowHandler.windowLostHandler) + compare(ApplicationManager.count, 3) simpleApplication = ApplicationManager.application(0); applicationAlias = ApplicationManager.application(1); capsApplication = ApplicationManager.application(2); } + function test_properties() { + // Only true for the dummyimports + compare(ApplicationManager.dummy, false) + // Disabled in the am-config.yaml + compare(ApplicationManager.securityChecksEnabled, false) + + compare(ApplicationManager.singleProcess, singleProcess) + } + function test_systemProperties() { function sub(obj) { compare(obj.ignored, undefined) @@ -203,7 +239,71 @@ TestCase { compare(id, ApplicationManager.application(0).id) } + SignalSpy { + id: runStateChangedSpy + target: ApplicationManager + signalName: "applicationRunStateChanged" + } + + function checkApplicationState(id, state) { + if (runStateChangedSpy.count < 1) + runStateChangedSpy.wait(10000); + verify(runStateChangedSpy.count) + compare(runStateChangedSpy.signalArguments[0][0], id) + compare(runStateChangedSpy.signalArguments[0][1], state) + compare(ApplicationManager.applicationRunState(id), state); + runStateChangedSpy.clear(); + } + + function test_startAndStopApplication_data() { + return [ + {tag: "StartStop", appId: "tld.test.simple1", index: 0, forceKill: false, exitCode: 0, exitStatus: AppMan.Application.NormalExit }, + {tag: "Debug", appId: "tld.test.simple1", index: 0, forceKill: false, exitCode: 0, exitStatus: AppMan.Application.NormalExit }, + {tag: "ForceKill", appId: "tld.test.simple2", index: 2, forceKill: true, exitCode: 9, exitStatus: AppMan.Application.ForcedExit }, + {tag: "AutoTerminate", appId: "tld.test.simple2", index: 2, forceKill: false, exitCode: 15, exitStatus: AppMan.Application.ForcedExit } + ]; + } + + function test_startAndStopApplication(data) { + compare(ApplicationManager.applicationRunState(data.appId), ApplicationManager.NotRunning); + + var started = false; + if (data.tag === "Debug") { + started = ApplicationManager.debugApplication(data.appId, "fakedebugger"); + if (singleProcess) { + verify(!started); + return; + } + } else { + started = ApplicationManager.startApplication(data.appId); + } + verify(started); + + checkApplicationState(data.appId, ApplicationManager.StartingUp); + listView.currentIndex = data.index; + compare(listView.currentItem.modelData.isStartingUp, true) + compare(listView.currentItem.modelData.isRunning, false) + compare(listView.currentItem.modelData.isShuttingDown, false) + checkApplicationState(data.appId, ApplicationManager.Running); + compare(listView.currentItem.modelData.isStartingUp, false) + compare(listView.currentItem.modelData.isRunning, true) + compare(listView.currentItem.modelData.isShuttingDown, false) + + ApplicationManager.stopApplication(data.appId, data.forceKill); + + checkApplicationState(data.appId, ApplicationManager.ShuttingDown); + compare(listView.currentItem.modelData.isStartingUp, false) + compare(listView.currentItem.modelData.isRunning, false) + compare(listView.currentItem.modelData.isShuttingDown, true) + checkApplicationState(data.appId, ApplicationManager.NotRunning); + compare(listView.currentItem.modelData.isStartingUp, false) + compare(listView.currentItem.modelData.isRunning, false) + compare(listView.currentItem.modelData.isShuttingDown, false) + compare(listView.currentItem.modelData.application.lastExitCode, data.exitCode) + compare(listView.currentItem.modelData.application.lastExitStatus, data.exitStatus) + } + //TODO add tests for: - //Start/stop/debug application, identify, openUrl + //identify, openUrl //Test activated } |