summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@pelagicore.com>2017-01-17 11:58:38 +0100
committerRobert Griebl <robert.griebl@pelagicore.com>2017-01-18 16:43:39 +0000
commitf25f34be2fadca327b0de3bab30c9331af4b69aa (patch)
tree2e4313a9c5ffe7253f2fd68e88d336103e922874
parent12434e087d52f3eb0b2db9ea7e7cf7f402a77300 (diff)
downloadqtapplicationmanager-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.yaml12
-rw-r--r--tests/qml/simple/apps/tld.test.simple1/app1.qml5
-rw-r--r--tests/qml/simple/apps/tld.test.simple2/app.qml7
-rw-r--r--tests/qml/simple/tst_applicationmanager.qml102
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
}