@@ -148,6 +148,7 @@ Item {
148 when: windowShown
148 when: windowShown
150 property Item shell: shellLoader.status === Loader.Ready ? shellLoader.item : null
150 property Item shell: shellLoader.status === Loader.Ready ? shellLoader.item : null
151+ property QtObject topLevelSurfaceList: null
152 function init() {
153 function init() {
153 tryCompare(shell, "waitingOnGreeter", false); // will be set when greeter is all ready
154 tryCompare(shell, "waitingOnGreeter", false); // will be set when greeter is all ready
@@ -161,11 +162,21 @@ Item {
161 var panel = findChild(launcher, "launcherPanel");
162 var panel = findChild(launcher, "launcherPanel");
162 verify(!!panel);
163 verify(!!panel);
163 panel.dismissTimer = fakeDismissTimer;
164 panel.dismissTimer = fakeDismissTimer;
166+ topLevelSurfaceList = findInvisibleChild(shell, "topLevelSurfaceList");
167+ verify(topLevelSurfaceList);
169+ var dashSurfaceId = topLevelSurfaceList.nextId;
170+ ApplicationManager.startApplication("unity8-dash");
171+ tryCompare(topLevelSurfaceList, "count", 1);
172+ waitUntilAppWindowIsFullyLoaded(dashSurfaceId);
166 function cleanup() {
175 function cleanup() {
167 tryCompare(shell, "waitingOnGreeter", false); // make sure greeter didn't leave us in disabled state
176 tryCompare(shell, "waitingOnGreeter", false); // make sure greeter didn't leave us in disabled state
178+ topLevelSurfaceList = null;
169 shellLoader.itemDestroyed = false
180 shellLoader.itemDestroyed = false
171 shellLoader.active = false
182 shellLoader.active = false
@@ -213,6 +224,27 @@ Item {
227+ function findAppWindowForSurfaceId(surfaceId) {
228+ // for PhoneStage and TabletStage
229+ var delegate = findChild(shell, "spreadDelegate_" + surfaceId, 0 /* timeout */);
232+ delegate = findChild(shell, "appDelegate_" + surfaceId);
235+ var appWindow = findChild(delegate, "appWindow");
239+ // Wait until the ApplicationWindow for the given Application object is fully loaded
240+ // (ie, the real surface has replaced the splash screen)
241+ function waitUntilAppWindowIsFullyLoaded(surfaceId) {
242+ var appWindow = findAppWindowForSurfaceId(surfaceId);
243+ var appWindowStateGroup = findInvisibleChild(appWindow, "applicationWindowStateGroup");
244+ tryCompareFunction(function() { return appWindowStateGroup.state === "surface" }, true);
245+ waitUntilTransitionsEnd(appWindowStateGroup);
216 function enterPin(pin) {
248 function enterPin(pin) {
217 typeString(pin);
249 typeString(pin);
@@ -301,13 +333,15 @@ Item {
303 function test_emergencyCallCrash() {
335 function test_emergencyCallCrash() {
336+ var dialerSurfaceId = topLevelSurfaceList.nextId;
304 var greeter = findChild(shell, "greeter");
337 var greeter = findChild(shell, "greeter");
305 var emergencyButton = findChild(greeter, "emergencyCallLabel");
338 var emergencyButton = findChild(greeter, "emergencyCallLabel");
306 tap(emergencyButton)
339 tap(emergencyButton)
307−
340+ tryCompare(topLevelSurfaceList, "count", 2);
341+ waitUntilAppWindowIsFullyLoaded(dialerSurfaceId);
309 tryCompare(greeter, "shown", false);
343 tryCompare(greeter, "shown", false);
310− killApps() // kill dialer-app, as if it crashed
344+ ApplicationManager.stopApplication("dialer-app"); // kill dialer-app, as if it crashed
311 tryCompare(greeter, "shown", true);
345 tryCompare(greeter, "shown", true);
312 tryCompare(findChild(greeter, "lockscreen"), "shown", true);
346 tryCompare(findChild(greeter, "lockscreen"), "shown", true);
313 tryCompare(findChild(greeter, "coverPage"), "shown", false);
347 tryCompare(findChild(greeter, "coverPage"), "shown", false);
@@ -406,7 +440,7 @@ Item {
406 compare(stage.usageScenario, "phone");
440 compare(stage.usageScenario, "phone");
408 // And when we kill the app, we go back to locked tablet mode
442 // And when we kill the app, we go back to locked tablet mode
409− killApps()
443+ ApplicationManager.stopApplication("dialer-app");
410 var greeter = findChild(shell, "greeter")
444 var greeter = findChild(shell, "greeter")
411 tryCompare(greeter, "fullyShown", true)
445 tryCompare(greeter, "fullyShown", true)
412 compare(stage.usageScenario, "tablet");
446 compare(stage.usageScenario, "tablet");