@@ -21,15 +21,17 @@ import AccountsService 0.1
21import GSettings 1.0
21import GSettings 1.0
22import LightDM 0.1 as LightDM
22import LightDM 0.1 as LightDM
23import Ubuntu.SystemImage 0.1
23import Ubuntu.SystemImage 0.1
24+import Ubuntu.Telephony 0.1 as Telephony
24import Unity.Application 0.1
25import Unity.Application 0.1
25import Unity.Test 0.1 as UT
26import Unity.Test 0.1 as UT
26import Powerd 0.1
27import Powerd 0.1
28import "../../qml"
29import "../../qml"
32− spacing: 0
33+ width: contentRow.width
34+ height: contentRow.height
34 QtObject {
36 QtObject {
35 id: applicationArguments
37 id: applicationArguments
@@ -47,34 +49,36 @@ Row {
51− id: shellLoader
53+ id: contentRow
53− width: units.gu(40)
55+ Loader {
54− height: units.gu(71)
56+ id: shellLoader
56− property bool itemDestroyed: false
61+ property bool itemDestroyed: false
57− sourceComponent: Component {
62+ sourceComponent: Component {
59− Component.onDestruction: {
64+ Component.onDestruction: {
60− shellLoader.itemDestroyed = true
65+ shellLoader.itemDestroyed = true
67+ maxFailedLogins: maxRetriesTextField.text
62− maxFailedLogins: maxRetriesTextField.text
67− Rectangle {
72+ Rectangle {
68− color: "white"
73+ color: "white"
69− width: units.gu(30)
74+ width: units.gu(30)
70− height: shellLoader.height
75+ height: shellLoader.height
73− anchors { left: parent.left; right: parent.right; top: parent.top; margins: units.gu(1) }
78+ anchors { left: parent.left; right: parent.right; top: parent.top; margins: units.gu(1) }
74− spacing: units.gu(1)
79+ spacing: units.gu(1)
76− anchors { left: parent.left; right: parent.right }
81+ anchors { left: parent.left; right: parent.right }
78 text: "Show Greeter"
82 text: "Show Greeter"
79 onClicked: {
83 onClicked: {
80 if (shellLoader.status !== Loader.Ready)
84 if (shellLoader.status !== Loader.Ready)
@@ -86,15 +90,15 @@ Row {
92− text: "Max retries:"
95+ text: "Max retries:"
93− color: "black"
96+ color: "black"
95− TextField {
98+ TextField {
96− id: maxRetriesTextField
99+ id: maxRetriesTextField
97− text: "-1"
100+ text: "-1"
@@ -110,7 +114,13 @@ Row {
110 signalName: "resettingDevice"
114 signalName: "resettingDevice"
117+ Telephony.CallEntry {
119+ phoneNumber: "+447812221111"
113 UT.UnityTestCase {
122 UT.UnityTestCase {
114 name: "ShellWithPin"
124 name: "ShellWithPin"
115 when: windowShown
125 when: windowShown
@@ -119,10 +129,9 @@ Row {
119 function init() {
129 function init() {
120 sessionSpy.target = findChild(shell, "greeter")
130 sessionSpy.target = findChild(shell, "greeter")
121 swipeAwayGreeter()
131 swipeAwayGreeter()
122 shell.failedLoginsDelayAttempts = -1
133 shell.failedLoginsDelayAttempts = -1
123 maxRetriesTextField.text = "-1"
134 maxRetriesTextField.text = "-1"
124− AccountsService.enableLauncherWhileLocked = true
125− AccountsService.enableIndicatorsWhileLocked = true
128 function cleanup() {
137 function cleanup() {
@@ -143,6 +152,10 @@ Row {
143 // kill all (fake) running apps
152 // kill all (fake) running apps
144 killApps()
153 killApps()
155+ AccountsService.enableLauncherWhileLocked = true
156+ AccountsService.enableIndicatorsWhileLocked = true
157+ AccountsService.demoEdges = false
146 // reload our test subject to get it in a fresh state once again
159 // reload our test subject to get it in a fresh state once again
147 shellLoader.active = true
160 shellLoader.active = true
@@ -169,8 +182,9 @@ Row {
170 // wait until the animation has finished
183 // wait until the animation has finished
171 tryCompare(greeter, "showProgress", 0);
184 tryCompare(greeter, "showProgress", 0);
173− // and for pin to be ready
187+ function waitForLockscreen() {
174 var lockscreen = findChild(shell, "lockscreen");
188 var lockscreen = findChild(shell, "lockscreen");
175 var pinPadLoader = findChild(lockscreen, "pinPadLoader");
189 var pinPadLoader = findChild(lockscreen, "pinPadLoader");
176 tryCompare(pinPadLoader, "status", Loader.Ready)
190 tryCompare(pinPadLoader, "status", Loader.Ready)
@@ -182,10 +196,20 @@ Row {
182 for (var i = 0; i < pin.length; ++i) {
196 for (var i = 0; i < pin.length; ++i) {
183 var character = pin.charAt(i)
197 var character = pin.charAt(i)
184 var button = findChild(shell, "pinPadButton" + character)
198 var button = findChild(shell, "pinPadButton" + character)
185− mouseClick(button, units.gu(1), units.gu(1))
199+ tap(button)
203+ function confirmLockedApp(app) {
204+ var greeter = findChild(shell, "greeter")
205+ var lockscreen = findChild(shell, "lockscreen")
206+ tryCompare(greeter, "shown", false)
207+ tryCompare(lockscreen, "shown", false)
208+ tryCompare(greeter, "hasLockedApp", true)
209+ tryCompare(greeter, "lockedApp", app)
210+ tryCompare(ApplicationManager, "focusedApplicationId", app)
189 function test_login() {
213 function test_login() {
190 sessionSpy.clear()
214 sessionSpy.clear()
191 tryCompare(sessionSpy, "count", 0)
215 tryCompare(sessionSpy, "count", 0)
@@ -193,6 +217,25 @@ Row {
193 tryCompare(sessionSpy, "count", 1)
217 tryCompare(sessionSpy, "count", 1)
220+ function test_edgeDemoHidesLockscreen() {
221+ LightDM.Greeter.showGreeter()
223+ var lockscreen = findChild(shell, "lockscreen")
225+ tryCompare(lockscreen, "shown", true)
226+ AccountsService.demoEdges = true
227+ tryCompare(lockscreen, "shown", false)
230+ tryCompare(sessionSpy, "count", 1)
232+ // Lockscreen is only hidden by the edge demo, so if we turn that
233+ // off and show greeter again, lockscreen should appear
234+ AccountsService.demoEdges = false
235+ LightDM.Greeter.showGreeter()
236+ tryCompare(lockscreen, "shown", true)
196 function test_disabledEdges() {
239 function test_disabledEdges() {
197 var launcher = findChild(shell, "launcher")
240 var launcher = findChild(shell, "launcher")
198 tryCompare(launcher, "available", true)
241 tryCompare(launcher, "available", true)
@@ -214,7 +257,7 @@ Row {
214 var launcher = findChild(shell, "launcher")
257 var launcher = findChild(shell, "launcher")
215 var stage = findChild(shell, "stage")
258 var stage = findChild(shell, "stage")
217− mouseClick(emergencyButton, units.gu(1), units.gu(1))
260+ tap(emergencyButton)
219 tryCompare(greeter, "lockedApp", "dialer-app")
262 tryCompare(greeter, "lockedApp", "dialer-app")
220 tryCompare(greeter, "hasLockedApp", true)
263 tryCompare(greeter, "hasLockedApp", true)
@@ -241,7 +284,7 @@ Row {
241 function test_emergencyCallCrash() {
284 function test_emergencyCallCrash() {
242 var lockscreen = findChild(shell, "lockscreen")
285 var lockscreen = findChild(shell, "lockscreen")
243 var emergencyButton = findChild(lockscreen, "emergencyCallLabel")
286 var emergencyButton = findChild(lockscreen, "emergencyCallLabel")
244− mouseClick(emergencyButton, units.gu(1), units.gu(1))
287+ tap(emergencyButton)
246 tryCompare(lockscreen, "shown", false)
289 tryCompare(lockscreen, "shown", false)
247 killApps() // kill dialer-app, as if it crashed
290 killApps() // kill dialer-app, as if it crashed
@@ -251,7 +294,7 @@ Row {
251 function test_emergencyCallAppLaunch() {
294 function test_emergencyCallAppLaunch() {
252 var lockscreen = findChild(shell, "lockscreen")
295 var lockscreen = findChild(shell, "lockscreen")
253 var emergencyButton = findChild(lockscreen, "emergencyCallLabel")
296 var emergencyButton = findChild(lockscreen, "emergencyCallLabel")
254− mouseClick(emergencyButton, units.gu(1), units.gu(1))
297+ tap(emergencyButton)
256 tryCompare(lockscreen, "shown", false)
299 tryCompare(lockscreen, "shown", false)
257 ApplicationManager.startApplication("gallery-app", ApplicationManager.NoFlag)
300 ApplicationManager.startApplication("gallery-app", ApplicationManager.NoFlag)
@@ -296,7 +339,7 @@ Row {
297 var dialog = findChild(root, "infoPopup")
340 var dialog = findChild(root, "infoPopup")
298 var button = findChild(dialog, "infoPopupOkButton")
341 var button = findChild(dialog, "infoPopupOkButton")
299− mouseClick(button, units.gu(1), units.gu(1))
342+ tap(button)
300 tryCompareFunction(function() {return findChild(root, "infoPopup")}, null)
343 tryCompareFunction(function() {return findChild(root, "infoPopup")}, null)
302 tryCompare(resetSpy, "count", 0)
345 tryCompare(resetSpy, "count", 0)
@@ -317,11 +360,9 @@ Row {
317 tryCompare(shell, "sideStageEnabled", false)
360 tryCompare(shell, "sideStageEnabled", false)
318 tryCompare(applicationsDisplayLoader, "tabletMode", false)
361 tryCompare(applicationsDisplayLoader, "tabletMode", false)
320− var app = ApplicationManager.startApplication("dialer-app")
363+ var lockscreen = findChild(shell, "lockscreen")
321−
364+ lockscreen.emergencyCall()
322− var greeter = findChild(shell, "greeter")
365+ confirmLockedApp("dialer-app")
323− tryCompare(greeter, "showProgress", 0)
324− tryCompare(greeter, "hasLockedApp", true)
326 // OK, we're in. Now try (but fail) to switch to tablet mode
367 // OK, we're in. Now try (but fail) to switch to tablet mode
327 shell.tablet = true
368 shell.tablet = true
@@ -330,9 +371,15 @@ Row {
331 // And when we kill the app, we go back to locked tablet mode
372 // And when we kill the app, we go back to locked tablet mode
332 killApps()
373 killApps()
374+ var greeter = findChild(shell, "greeter")
333 tryCompare(greeter, "showProgress", 1)
375 tryCompare(greeter, "showProgress", 1)
334 tryCompare(shell, "sideStageEnabled", true)
376 tryCompare(shell, "sideStageEnabled", true)
335 tryCompare(applicationsDisplayLoader, "tabletMode", true)
377 tryCompare(applicationsDisplayLoader, "tabletMode", true)
380+ function test_emergencyDialerIncoming() {
381+ callManager.foregroundCall = phoneCall
382+ confirmLockedApp("dialer-app")