@@ -1,5 +1,5 @@
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -20,6 +20,7 @@ import Ubuntu.Components 1.3
20import Ubuntu.Components.ListItems 1.3
20import Ubuntu.Components.ListItems 1.3
21import Unity.Application 0.1
21import Unity.Application 0.1
22import Unity.Test 0.1
22import Unity.Test 0.1
23+import WindowManager 0.1
23import Utils 0.1
24import Utils 0.1
25import ".." // For EdgeBarrierControls
26import ".." // For EdgeBarrierControls
@@ -56,6 +57,11 @@ Item {
60+ TopLevelSurfaceList {
62+ applicationsModel: ApplicationManager
60 id: desktopStageLoader
66 id: desktopStageLoader
61 x: ((root.width - controls.width) - width) / 2
67 x: ((root.width - controls.width) - width) / 2
@@ -70,6 +76,7 @@ Item {
70 DesktopStage {
76 DesktopStage {
71 anchors.fill: parent
77 anchors.fill: parent
72 background: "../../../qml/graphics/tablet_background.jpg"
78 background: "../../../qml/graphics/tablet_background.jpg"
74 Component.onCompleted: {
81 Component.onCompleted: {
75 edgeBarrierControls.target = testCase.findChild(this, "edgeBarrierController");
82 edgeBarrierControls.target = testCase.findChild(this, "edgeBarrierController");
@@ -78,6 +85,8 @@ Item {
78 desktopStageLoader.itemDestroyed = true;
85 desktopStageLoader.itemDestroyed = true;
80 orientations: Orientations {}
87 orientations: Orientations {}
88+ applicationManager: ApplicationManager
89+ topLevelSurfaceList: topSurfaceList
@@ -104,7 +113,7 @@ Item {
104 activeFocusOnPress: false
113 activeFocusOnPress: false
105 onClicked: {
114 onClicked: {
106 if (ApplicationManager.focusedApplicationId) {
115 if (ApplicationManager.focusedApplicationId) {
107− var surface = ApplicationManager.findApplication(ApplicationManager.focusedApplicationId).session.lastSurface;
116+ var surface = ApplicationManager.findApplication(ApplicationManager.focusedApplicationId).surfaceList.get(0);
108 surface.slowToResize = true;
117 surface.slowToResize = true;
@@ -138,6 +147,19 @@ Item {
139 property Item desktopStage: desktopStageLoader.status === Loader.Ready ? desktopStageLoader.item : null
148 property Item desktopStage: desktopStageLoader.status === Loader.Ready ? desktopStageLoader.item : null
151+ // wait until unity8-dash is up and running.
152+ // it's started automatically by ApplicationManager mock implementation
153+ tryCompare(ApplicationManager, "count", 1);
154+ var dashApp = ApplicationManager.findApplication("unity8-dash");
156+ tryCompare(dashApp, "state", ApplicationInfoInterface.Running);
158+ tryCompare(topSurfaceList, "count", 1);
159+ tryCompareFunction(function(){return topSurfaceList.surfaceAt(0) != null;}, true);
160+ compare(MirFocusController.focusedSurface, topSurfaceList.surfaceAt(0));
141 function cleanup() {
163 function cleanup() {
142 desktopStageLoader.itemDestroyed = false;
164 desktopStageLoader.itemDestroyed = false;
143 desktopStageLoader.active = false;
165 desktopStageLoader.active = false;
@@ -150,43 +172,71 @@ Item {
150 // Shell instance gets destroyed.
172 // Shell instance gets destroyed.
151 tryCompare(desktopStageLoader, "itemDestroyed", true);
173 tryCompare(desktopStageLoader, "itemDestroyed", true);
153− killAllRunningApps();
175+ killApps();
177+ root.resetGeometry();
155 desktopStageLoader.active = true;
179 desktopStageLoader.active = true;
156 tryCompare(desktopStageLoader, "status", Loader.Ready);
180 tryCompare(desktopStageLoader, "status", Loader.Ready);
157− root.resetGeometry();
160− function killAllRunningApps() {
161− while (ApplicationManager.count > 0) {
162− ApplicationManager.stopApplication(ApplicationManager.get(0).appId);
164− compare(ApplicationManager.count, 0)
167− function waitUntilAppSurfaceShowsUp(appId) {
184+ function waitUntilAppSurfaceShowsUp(surfaceId) {
168− var appWindow = findChild(desktopStage, "appWindow_" + appId);
185+ var appDelegate = findChild(desktopStage, "appDelegate_" + surfaceId);
186+ verify(appDelegate);
187+ var appWindow = findChild(appDelegate, "appWindow");
169 verify(appWindow);
188 verify(appWindow);
170 var appWindowStates = findInvisibleChild(appWindow, "applicationWindowStateGroup");
189 var appWindowStates = findInvisibleChild(appWindow, "applicationWindowStateGroup");
171 verify(appWindowStates);
190 verify(appWindowStates);
172 tryCompare(appWindowStates, "state", "surface");
191 tryCompare(appWindowStates, "state", "surface");
195+ Returns the appDelegate of the first surface created by the app with the specified appId
175 function startApplication(appId) {
197 function startApplication(appId) {
176− var app = ApplicationManager.findApplication(appId);
199+ var app = ApplicationManager.findApplication(appId);
177− if (!app) {
200+ if (app) {
201+ for (var i = 0; i < topSurfaceList.count; i++) {
202+ if (topSurfaceList.applicationAt(i).appId === appId) {
203+ var appRepeater = findChild(desktopStage, "appRepeater");
204+ verify(appRepeater);
205+ return appRepeater.itemAt(i);
210+ var surfaceId = topSurfaceList.nextId;
178 app = ApplicationManager.startApplication(appId);
211 app = ApplicationManager.startApplication(appId);
213+ waitUntilAppSurfaceShowsUp(surfaceId);
214+ compare(app.surfaceList.count, 1);
216+ return findChild(desktopStage, "appDelegate_" + surfaceId);
218+ throw new Error("startApplication("+appId+") called from line " + util.callerLine(1) + " failed!");
222+ function maximizeAppDelegate(appDelegate) {
223+ var maximizeButton = findChild(appDelegate, "maximizeWindowButton");
224+ if (!maximizeButton) {
225+ fail("Could not find maximizeWindowButton of appDelegate=" + appDelegate);
227+ mouseClick(maximizeButton);
230+ tryCompare(appDelegate, "visuallyMaximized", true);
232+ fail("appDelegate.visuallyMaximized !== true");
181− waitUntilAppSurfaceShowsUp(appId);
182− verify(app.session.lastSurface);
186 function test_appFocusSwitch_data() {
236 function test_appFocusSwitch_data() {
188− {tag: "dash to dialer", apps: [ "unity8-dash", "dialer-app", "camera-app" ], focusfrom: 0, focusTo: 1 },
238+ {tag: "dash to dialer", apps: [ "unity8-dash", "dialer-app", "gmail-webapp" ], focusfrom: 0, focusTo: 1 },
189− {tag: "dialer to dash", apps: [ "unity8-dash", "dialer-app", "camera-app" ], focusfrom: 1, focusTo: 0 },
239+ {tag: "dialer to dash", apps: [ "unity8-dash", "dialer-app", "gmail-webapp" ], focusfrom: 1, focusTo: 0 },
@@ -194,10 +244,10 @@ Item {
194 data.apps.forEach(startApplication);
244 data.apps.forEach(startApplication);
196 ApplicationManager.requestFocusApplication(data.apps[data.focusfrom]);
246 ApplicationManager.requestFocusApplication(data.apps[data.focusfrom]);
197− tryCompare(ApplicationManager.findApplication(data.apps[data.focusfrom]).session.lastSurface, "activeFocus", true);
247+ tryCompare(ApplicationManager.findApplication(data.apps[data.focusfrom]).surfaceList.get(0), "activeFocus", true);
199 ApplicationManager.requestFocusApplication(data.apps[data.focusTo]);
249 ApplicationManager.requestFocusApplication(data.apps[data.focusTo]);
200− tryCompare(ApplicationManager.findApplication(data.apps[data.focusTo]).session.lastSurface, "activeFocus", true);
250+ tryCompare(ApplicationManager.findApplication(data.apps[data.focusTo]).surfaceList.get(0), "activeFocus", true);
203 function test_tappingOnWindowChangesFocusedApp_data() {
253 function test_tappingOnWindowChangesFocusedApp_data() {
@@ -208,21 +258,24 @@ Item {
210 function test_tappingOnWindowChangesFocusedApp(data) {
260 function test_tappingOnWindowChangesFocusedApp(data) {
261+ var appDelegates = [];
262+ for (var i = 0; i < data.apps.length; i++) {
211− data.apps.forEach(startApplication);
263+ appDelegates[i] = startApplication(data.apps[i]);
212− var fromAppId = data.apps[data.focusfrom];
265+ var fromDelegate = appDelegates[data.focusfrom];
213− var toAppId = data.apps[data.focusTo]
266+ var toDelegate = appDelegates[data.focusTo];
215− var fromAppWindow = findChild(desktopStage, "appWindow_" + fromAppId);
268+ var fromAppWindow = findChild(fromDelegate, "appWindow");
216 verify(fromAppWindow);
269 verify(fromAppWindow);
217 tap(fromAppWindow);
270 tap(fromAppWindow);
218− compare(fromAppWindow.application.session.lastSurface.activeFocus, true);
271+ compare(fromDelegate.surface.activeFocus, true);
219− compare(ApplicationManager.focusedApplicationId, fromAppId);
272+ compare(MirFocusController.focusedSurface, fromDelegate.surface);
221− var toAppWindow = findChild(desktopStage, "appWindow_" + toAppId);
274+ var toAppWindow = findChild(toDelegate, "appWindow");
222 verify(toAppWindow);
275 verify(toAppWindow);
223 tap(toAppWindow);
276 tap(toAppWindow);
224− compare(toAppWindow.application.session.lastSurface.activeFocus, true);
277+ compare(toDelegate.surface.activeFocus, true);
225− compare(ApplicationManager.focusedApplicationId, toAppId);
278+ compare(MirFocusController.focusedSurface, toDelegate.surface);
228 function test_clickingOnWindowChangesFocusedApp_data() {
281 function test_clickingOnWindowChangesFocusedApp_data() {
@@ -230,21 +283,24 @@ Item {
232 function test_clickingOnWindowChangesFocusedApp(data) {
285 function test_clickingOnWindowChangesFocusedApp(data) {
286+ var appDelegates = [];
287+ for (var i = 0; i < data.apps.length; i++) {
233− data.apps.forEach(startApplication);
288+ appDelegates[i] = startApplication(data.apps[i]);
234− var fromAppId = data.apps[data.focusfrom];
290+ var fromDelegate = appDelegates[data.focusfrom];
235− var toAppId = data.apps[data.focusTo]
291+ var toDelegate = appDelegates[data.focusTo];
237− var fromAppWindow = findChild(desktopStage, "appWindow_" + fromAppId);
293+ var fromAppWindow = findChild(fromDelegate, "appWindow");
238 verify(fromAppWindow);
294 verify(fromAppWindow);
239 mouseClick(fromAppWindow);
295 mouseClick(fromAppWindow);
240− compare(fromAppWindow.application.session.lastSurface.activeFocus, true);
296+ compare(fromDelegate.surface.activeFocus, true);
241− compare(ApplicationManager.focusedApplicationId, fromAppId);
297+ compare(MirFocusController.focusedSurface, fromDelegate.surface);
243− var toAppWindow = findChild(desktopStage, "appWindow_" + toAppId);
299+ var toAppWindow = findChild(toDelegate, "appWindow");
244 verify(toAppWindow);
300 verify(toAppWindow);
245 mouseClick(toAppWindow);
301 mouseClick(toAppWindow);
246− compare(toAppWindow.application.session.lastSurface.activeFocus, true);
302+ compare(toDelegate.surface.activeFocus, true);
247− compare(ApplicationManager.focusedApplicationId, toAppId);
303+ compare(MirFocusController.focusedSurface, toDelegate.surface);
250 function test_tappingOnDecorationFocusesApplication_data() {
306 function test_tappingOnDecorationFocusesApplication_data() {
@@ -254,24 +310,49 @@ Item {
313+ function findDecoratedWindow(surfaceId) {
314+ var appDelegate = findChild(desktopStage, "appDelegate_" + surfaceId);
316+ console.warn("Could not find appDelegate for surfaceId="+surfaceId);
319+ return findChild(appDelegate, "decoratedWindow");
322+ function findWindowDecoration(surfaceId) {
323+ var appDelegate = findChild(desktopStage, "appDelegate_" + surfaceId);
325+ console.warn("Could not find appDelegate for surfaceId="+surfaceId);
328+ return findChild(appDelegate, "appWindowDecoration");
257 function test_tappingOnDecorationFocusesApplication(data) {
331 function test_tappingOnDecorationFocusesApplication(data) {
332+ var appDelegates = [];
333+ for (var i = 0; i < data.apps.length; i++) {
258− data.apps.forEach(startApplication);
334+ appDelegates[i] = startApplication(data.apps[i]);
260− var fromAppDecoration = findChild(desktopStage, "appWindowDecoration_" + data.apps[data.focusfrom]);
337+ var fromDelegate = appDelegates[data.focusfrom];
338+ var toDelegate = appDelegates[data.focusTo];
340+ var fromAppDecoration = findChild(fromDelegate, "appWindowDecoration");
261 verify(fromAppDecoration);
341 verify(fromAppDecoration);
262 tap(fromAppDecoration);
342 tap(fromAppDecoration);
264− var fromApp = ApplicationManager.findApplication(data.apps[data.focusfrom]);
266− tryCompare(fromApp.session.lastSurface, "activeFocus", true);
344+ tryCompare(fromDelegate.surface, "activeFocus", true);
268− var toAppDecoration = findChild(desktopStage, "appWindowDecoration_" + data.apps[data.focusTo]);
346+ var toAppDecoration = findChild(toDelegate, "appWindowDecoration");
269 verify(toAppDecoration);
347 verify(toAppDecoration);
349+ // FIXME: Wait a bit before the second tap or the window decoration will say it got double clicked.
270 tap(toAppDecoration);
353 tap(toAppDecoration);
272− var toApp = ApplicationManager.findApplication(data.apps[data.focusTo]);
274− tryCompare(toApp.session.lastSurface, "activeFocus", true);
355+ tryCompare(toDelegate.surface, "activeFocus", true);
277 function test_clickingOnDecorationFocusesApplication_data() {
358 function test_clickingOnDecorationFocusesApplication_data() {
@@ -279,159 +360,170 @@ Item {
281 function test_clickingOnDecorationFocusesApplication(data) {
362 function test_clickingOnDecorationFocusesApplication(data) {
363+ var appDelegates = [];
364+ for (var i = 0; i < data.apps.length; i++) {
282− data.apps.forEach(startApplication);
365+ appDelegates[i] = startApplication(data.apps[i]);
367+ var fromDelegate = appDelegates[data.focusfrom];
368+ var toDelegate = appDelegates[data.focusTo];
284− var fromAppDecoration = findChild(desktopStage, "appWindowDecoration_" + data.apps[data.focusfrom]);
370+ var fromAppDecoration = findChild(fromDelegate, "appWindowDecoration");
285 verify(fromAppDecoration);
371 verify(fromAppDecoration);
286 mouseClick(fromAppDecoration);
372 mouseClick(fromAppDecoration);
287− tryCompare(ApplicationManager.findApplication(data.apps[data.focusfrom]).session.lastSurface, "activeFocus", true);
373+ tryCompare(fromDelegate.surface, "activeFocus", true);
289− var toAppDecoration = findChild(desktopStage, "appWindowDecoration_" + data.apps[data.focusTo]);
375+ var toAppDecoration = findChild(toDelegate, "appWindowDecoration");
290 verify(toAppDecoration);
376 verify(toAppDecoration);
291 mouseClick(toAppDecoration);
377 mouseClick(toAppDecoration);
292− tryCompare(ApplicationManager.findApplication(data.apps[data.focusTo]).session.lastSurface, "activeFocus", true);
378+ tryCompare(toDelegate.surface, "activeFocus", true);
295 function test_windowMaximize() {
381 function test_windowMaximize() {
296− var apps = ["unity8-dash", "dialer-app", "camera-app"];
382+ var dialerDelegate = startApplication("dialer-app");
297− apps.forEach(startApplication);
383+ startApplication("camera-app");
298− var appName = "dialer-app";
384+
299− var appDelegate = findChild(desktopStage, "appDelegate_" + appName);
385+ tryCompareFunction(function(){ return dialerDelegate.surface !== null; }, true);
300− verify(appDelegate);
386+ dialerDelegate.surface.requestFocus();
301− ApplicationManager.focusApplication(appName);
387+ tryCompare(dialerDelegate, "focus", true);
302 keyClick(Qt.Key_Up, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+Up shortcut to maximize
389 keyClick(Qt.Key_Up, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+Up shortcut to maximize
303− tryCompare(appDelegate, "maximized", true);
390+ tryCompare(dialerDelegate, "maximized", true);
304− tryCompare(appDelegate, "minimized", false);
391+ tryCompare(dialerDelegate, "minimized", false);
307 function test_windowMaximizeLeft() {
394 function test_windowMaximizeLeft() {
308− var apps = ["unity8-dash", "dialer-app", "camera-app"];
395+ var dialerDelegate = startApplication("dialer-app");
309− apps.forEach(startApplication);
396+ startApplication("camera-app");
310− var appName = "dialer-app";
397+
311− var appDelegate = findChild(desktopStage, "appDelegate_" + appName);
398+ tryCompareFunction(function(){ return dialerDelegate.surface !== null; }, true);
312− verify(appDelegate);
399+ dialerDelegate.surface.requestFocus();
313− ApplicationManager.focusApplication(appName);
400+ tryCompare(dialerDelegate, "focus", true);
314 keyClick(Qt.Key_Left, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+Left shortcut to maximizeLeft
402 keyClick(Qt.Key_Left, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+Left shortcut to maximizeLeft
315− tryCompare(appDelegate, "maximized", false);
403+ tryCompare(dialerDelegate, "maximized", false);
316− tryCompare(appDelegate, "minimized", false);
404+ tryCompare(dialerDelegate, "minimized", false);
317− tryCompare(appDelegate, "maximizedLeft", true);
405+ tryCompare(dialerDelegate, "maximizedLeft", true);
318− tryCompare(appDelegate, "maximizedRight", false);
406+ tryCompare(dialerDelegate, "maximizedRight", false);
321 function test_windowMaximizeRight() {
409 function test_windowMaximizeRight() {
322− var apps = ["unity8-dash", "dialer-app", "camera-app"];
410+ var dialerDelegate = startApplication("dialer-app");
323− apps.forEach(startApplication);
411+ startApplication("camera-app");
324− var appName = "dialer-app";
412+
325− var appDelegate = findChild(desktopStage, "appDelegate_" + appName);
413+ tryCompareFunction(function(){ return dialerDelegate.surface !== null; }, true);
326− verify(appDelegate);
414+ dialerDelegate.surface.requestFocus();
327− ApplicationManager.focusApplication(appName);
415+ tryCompare(dialerDelegate, "focus", true);
328 keyClick(Qt.Key_Right, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+Right shortcut to maximizeRight
417 keyClick(Qt.Key_Right, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+Right shortcut to maximizeRight
329− tryCompare(appDelegate, "maximized", false);
418+ tryCompare(dialerDelegate, "maximized", false);
330− tryCompare(appDelegate, "minimized", false);
419+ tryCompare(dialerDelegate, "minimized", false);
331− tryCompare(appDelegate, "maximizedLeft", false);
420+ tryCompare(dialerDelegate, "maximizedLeft", false);
332− tryCompare(appDelegate, "maximizedRight", true);
421+ tryCompare(dialerDelegate, "maximizedRight", true);
335 function test_windowMinimize() {
424 function test_windowMinimize() {
336− var apps = ["unity8-dash", "dialer-app", "camera-app"];
425+ var dialerDelegate = startApplication("dialer-app");
337− apps.forEach(startApplication);
426+ startApplication("camera-app");
338− var appName = "dialer-app";
427+
339− var appDelegate = findChild(desktopStage, "appDelegate_" + appName);
428+ tryCompareFunction(function(){ return dialerDelegate.surface !== null; }, true);
340− verify(appDelegate);
429+ dialerDelegate.surface.requestFocus();
341− ApplicationManager.focusApplication(appName);
430+ tryCompare(dialerDelegate, "focus", true);
342 keyClick(Qt.Key_Down, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+Down shortcut to minimize
432 keyClick(Qt.Key_Down, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+Down shortcut to minimize
343− tryCompare(appDelegate, "maximized", false);
433+ tryCompare(dialerDelegate, "maximized", false);
344− tryCompare(appDelegate, "minimized", true);
434+ tryCompare(dialerDelegate, "minimized", true);
345 verify(ApplicationManager.focusedApplicationId != ""); // verify we don't lose focus when minimizing an app
435 verify(ApplicationManager.focusedApplicationId != ""); // verify we don't lose focus when minimizing an app
348 function test_windowMinimizeAll() {
438 function test_windowMinimizeAll() {
349 var apps = ["unity8-dash", "dialer-app", "camera-app"];
439 var apps = ["unity8-dash", "dialer-app", "camera-app"];
350 apps.forEach(startApplication);
440 apps.forEach(startApplication);
351− verify(ApplicationManager.count == 3);
441+ verify(topSurfaceList.count == 3);
352 keyClick(Qt.Key_D, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+D shortcut to minimize all
442 keyClick(Qt.Key_D, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+D shortcut to minimize all
353 tryCompare(ApplicationManager, "focusedApplicationId", ""); // verify no app is focused
443 tryCompare(ApplicationManager, "focusedApplicationId", ""); // verify no app is focused
356 function test_windowClose() {
446 function test_windowClose() {
357− var apps = ["unity8-dash", "dialer-app", "camera-app"];
447+ var dialerSurfaceId = topSurfaceList.nextId;
358− apps.forEach(startApplication);
448+ var dialerDelegate = startApplication("dialer-app");
449+ verify(topSurfaceList.indexForId(dialerSurfaceId) !== -1);
450+ startApplication("gmail-webapp");
359− verify(ApplicationManager.count == 3);
451+ verify(topSurfaceList.count == 3);
360− var appName = "dialer-app";
452+
361− var appDelegate = findChild(desktopStage, "appDelegate_" + appName);
453+ mouseClick(dialerDelegate);
362− verify(appDelegate);
454+
363− ApplicationManager.focusApplication(appName);
455+ var desktopStagePriv = findInvisibleChild(desktopStage, "DesktopStagePrivate");
456+ tryCompare(desktopStagePriv, "focusedAppDelegate", dialerDelegate);
364 keyClick(Qt.Key_F4, Qt.AltModifier); // Alt+F4 shortcut to close
458 keyClick(Qt.Key_F4, Qt.AltModifier); // Alt+F4 shortcut to close
365− verify(ApplicationManager.count == 2); // verify the app is gone
460+ // verify the surface is gone
366− verify(ApplicationManager.findApplication(appName) === null); // and it's not in running apps
461+ tryCompare(topSurfaceList, "count", 2);
462+ verify(topSurfaceList.indexForId(dialerSurfaceId) === -1);
369 function test_smashCursorKeys() {
465 function test_smashCursorKeys() {
370− var apps = ["unity8-dash", "dialer-app", "camera-app"];
466+ var apps = ["dialer-app", "gmail-webapp"];
371 apps.forEach(startApplication);
467 apps.forEach(startApplication);
372− verify(ApplicationManager.count == 3);
468+ verify(topSurfaceList.count == 3);
373 keyClick(Qt.Key_D, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+D shortcut to minimize all
469 keyClick(Qt.Key_D, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+D shortcut to minimize all
374− tryCompare(ApplicationManager, "focusedApplicationId", ""); // verify no app is focused
470+ tryCompare(MirFocusController, "focusedSurface", null); // verify no surface is focused
376 // now try pressing all 4 arrow keys + ctrl + meta
472 // now try pressing all 4 arrow keys + ctrl + meta
377 keyClick(Qt.Key_Up | Qt.Key_Down | Qt.Key_Left | Qt.Key_Right, Qt.MetaModifier|Qt.ControlModifier); // smash it!!!
473 keyClick(Qt.Key_Up | Qt.Key_Down | Qt.Key_Left | Qt.Key_Right, Qt.MetaModifier|Qt.ControlModifier); // smash it!!!
378− tryCompare(ApplicationManager, "focusedApplicationId", ""); // verify still no app is focused
474+ tryCompare(MirFocusController, "focusedSurface", null); // verify still no surface is focused
381 function test_minimizeApplicationHidesSurface() {
477 function test_minimizeApplicationHidesSurface() {
382− var dashApp = startApplication("unity8-dash");
478+ compare(topSurfaceList.applicationAt(0).appId, "unity8-dash");
479+ var dashSurface = topSurfaceList.surfaceAt(0);
480+ var dashSurfaceId = topSurfaceList.idAt(0);
384− var dashDelegate = findChild(desktopStage, "appDelegate_unity8-dash");
482+ var decoratedWindow = findDecoratedWindow(dashSurfaceId);
385− verify(dashDelegate);
483+ verify(decoratedWindow);
485+ tryCompare(dashSurface, "visible", true);
387− findChild(dashDelegate, "decoratedWindow").minimize();
486+ decoratedWindow.minimize();
388− tryCompare(dashApp.session.lastSurface, "visible", false);
487+ tryCompare(dashSurface, "visible", false);
391 function test_maximizeApplicationHidesSurfacesBehindIt() {
490 function test_maximizeApplicationHidesSurfacesBehindIt() {
392− var dashApp = startApplication("unity8-dash");
491+ var dashDelegate = startApplication("unity8-dash");
393− var dialerApp = startApplication("dialer-app");
492+ var dialerDelegate = startApplication("dialer-app");
394− var gmailApp = startApplication("gmail-webapp");
493+ var gmailDelegate = startApplication("gmail-webapp");
396− var dashDelegate = findChild(desktopStage, "appDelegate_unity8-dash");
397− verify(dashDelegate);
398− var dialerDelegate = findChild(desktopStage, "appDelegate_dialer-app");
399− verify(dialerDelegate);
400− var gmailDelegate = findChild(desktopStage, "appDelegate_gmail-webapp");
401− verify(gmailDelegate);
403− // maximize
495+ // maximize without raising
404 dialerDelegate.maximize();
496 dialerDelegate.maximize();
405 tryCompare(dialerDelegate, "visuallyMaximized", true);
497 tryCompare(dialerDelegate, "visuallyMaximized", true);
407− tryCompare(dashApp.session.lastSurface, "visible", false);
499+ tryCompare(dashDelegate.surface, "visible", false);
408− compare(gmailApp.session.lastSurface.visible, true);
500+ compare(gmailDelegate.surface.visible, true);
410− // restore
502+ // restore without raising
411 dialerDelegate.restoreFromMaximized();
503 dialerDelegate.restoreFromMaximized();
412− compare(dashApp.session.lastSurface.visible, true);
504+ compare(dashDelegate.surface.visible, true);
413− compare(gmailApp.session.lastSurface.visible, true);
505+ compare(gmailDelegate.surface.visible, true);
416 function test_applicationsBecomeVisibleWhenOccludingAppRemoved() {
508 function test_applicationsBecomeVisibleWhenOccludingAppRemoved() {
417− var dashApp = startApplication("unity8-dash");
509+ var dashApp = topSurfaceList.applicationAt(0);
418− var dashDelegate = findChild(desktopStage, "appDelegate_unity8-dash");
419− verify(dashDelegate);
421− var dialerApp = startApplication("dialer-app");
511+ var dialerSurfaceId = topSurfaceList.nextId;
422− var dialerDelegate = findChild(desktopStage, "appDelegate_dialer-app");
512+ var dialerDelegate = startApplication("dialer-app");
423 verify(dialerDelegate);
513 verify(dialerDelegate);
514+ var dialerApp = dialerDelegate.application;
425 var dialerMaximizeButton = findChild(dialerDelegate, "maximizeWindowButton");
516 var dialerMaximizeButton = findChild(dialerDelegate, "maximizeWindowButton");
426 verify(dialerMaximizeButton);
517 verify(dialerMaximizeButton);
427 mouseClick(dialerMaximizeButton);
518 mouseClick(dialerMaximizeButton);
429− var mapApp = startApplication("map");
520+ var mapSurfaceId = topSurfaceList.nextId;
430− var mapDelegate = findChild(desktopStage, "appDelegate_map");
521+ var mapDelegate = startApplication("map");
431 verify(mapDelegate);
522 verify(mapDelegate);
523+ var mapApp = mapDelegate.application;
433− var gmailApp = startApplication("gmail-webapp");
525+ var gmailSurfaceId = topSurfaceList.nextId;
434− var gmailDelegate = findChild(desktopStage, "appDelegate_gmail-webapp");
526+ var gmailDelegate = startApplication("gmail-webapp");
435 verify(gmailDelegate);
527 verify(gmailDelegate);
437 var gmailMaximizeButton = findChild(gmailDelegate, "maximizeWindowButton");
529 var gmailMaximizeButton = findChild(gmailDelegate, "maximizeWindowButton");
@@ -441,29 +533,27 @@ Item {
441 tryCompare(dialerDelegate, "visuallyMaximized", true);
533 tryCompare(dialerDelegate, "visuallyMaximized", true);
442 tryCompare(gmailDelegate, "visuallyMaximized", true);
534 tryCompare(gmailDelegate, "visuallyMaximized", true);
444− tryCompare(dashApp.session.lastSurface, "visible", false);
536+ tryCompare(dashApp.surfaceList.get(0), "visible", false);
445− tryCompare(dialerApp.session.lastSurface, "visible", false);
537+ tryCompare(dialerApp.surfaceList.get(0), "visible", false);
446− tryCompare(mapApp.session.lastSurface, "visible", false);
538+ tryCompare(mapApp.surfaceList.get(0), "visible", false);
448 ApplicationManager.stopApplication("gmail-webapp");
540 ApplicationManager.stopApplication("gmail-webapp");
450− compare(mapApp.session.lastSurface.visible, true);
542+ tryCompare(mapApp.surfaceList.get(0), "visible", true);
451− tryCompare(dialerApp.session.lastSurface, "visible", true);
543+ tryCompare(dialerApp.surfaceList.get(0), "visible", true);
452− tryCompare(dashApp.session.lastSurface, "visible", false); // still occluded by maximised dialer
544+ tryCompare(dashApp.surfaceList.get(0), "visible", false); // still occluded by maximised dialer
455 function test_maximisedAppStaysVisibleWhenAppStarts() {
547 function test_maximisedAppStaysVisibleWhenAppStarts() {
456− var dashApp = startApplication("unity8-dash");
548+ var dashDelegate = startApplication("unity8-dash");
457− var dashDelegate = findChild(desktopStage, "appDelegate_unity8-dash");
549+
458− verify(dashDelegate);
459 // maximize
550 // maximize
460 var dashMaximizeButton = findChild(dashDelegate, "maximizeWindowButton");
551 var dashMaximizeButton = findChild(dashDelegate, "maximizeWindowButton");
461 verify(dashMaximizeButton);
552 verify(dashMaximizeButton);
462 mouseClick(dashMaximizeButton);
553 mouseClick(dashMaximizeButton);
463 tryCompare(dashDelegate, "visuallyMaximized", true);
554 tryCompare(dashDelegate, "visuallyMaximized", true);
465− var dialerApp = startApplication("dialer-app");
556+ var dialerDelegate = startApplication("dialer-app");
466− var dialerDelegate = findChild(desktopStage, "appDelegate_dialer-app");
467 verify(dialerDelegate);
557 verify(dialerDelegate);
469 compare(dialerDelegate.visible, true, "Dialer should be visible");
559 compare(dialerDelegate.visible, true, "Dialer should be visible");
@@ -471,14 +561,11 @@ Item {
473 function test_occlusionWithMultipleMaximized() {
563 function test_occlusionWithMultipleMaximized() {
474− var dashApp = startApplication("unity8-dash");
564+ var dashAppDelegate = startApplication("unity8-dash");
475− var dashAppDelegate = findChild(desktopStage, "appDelegate_unity8-dash");
477− var dialerApp = startApplication("dialer-app");
566+ var dialerAppDelegate = startApplication("dialer-app");
478− var dialerAppDelegate = findChild(desktopStage, "appDelegate_dialer-app");
480− var facebookApp = startApplication("facebook-webapp");
568+ var facebookAppDelegate = startApplication("facebook-webapp");
481− var facebookAppDelegate = findChild(desktopStage, "appDelegate_facebook-webapp");
483 // all of them are in restored state now. all should be visible
570 // all of them are in restored state now. all should be visible
484 tryCompare(dashAppDelegate, "visible", true);
571 tryCompare(dashAppDelegate, "visible", true);
@@ -492,13 +579,13 @@ Item {
492 tryCompare(facebookAppDelegate, "visible", true);
579 tryCompare(facebookAppDelegate, "visible", true);
494 // Bring dash to front. make sure dash and the maximized facebook are visible, the restored one behind is hidden
581 // Bring dash to front. make sure dash and the maximized facebook are visible, the restored one behind is hidden
495− ApplicationManager.focusApplication("unity8-dash");
582+ dashAppDelegate.focus = true;
496 tryCompare(dashAppDelegate, "visible", true);
583 tryCompare(dashAppDelegate, "visible", true);
497 tryCompare(dialerAppDelegate, "visible", false);
584 tryCompare(dialerAppDelegate, "visible", false);
498 tryCompare(facebookAppDelegate, "visible", true);
585 tryCompare(facebookAppDelegate, "visible", true);
500 // Now focus the dialer app. all 3 should be visible again
587 // Now focus the dialer app. all 3 should be visible again
501− ApplicationManager.focusApplication("dialer-app");
588+ dialerAppDelegate.focus = true;
502 tryCompare(dashAppDelegate, "visible", true);
589 tryCompare(dashAppDelegate, "visible", true);
503 tryCompare(dialerAppDelegate, "visible", true);
590 tryCompare(dialerAppDelegate, "visible", true);
504 tryCompare(facebookAppDelegate, "visible", true);
591 tryCompare(facebookAppDelegate, "visible", true);
@@ -511,20 +598,15 @@ Item {
513 function test_dropShadow() {
600 function test_dropShadow() {
514− // verify the drop shadow is not visible initially
515− verify(PanelState.dropShadow == false);
517 // start an app, maximize it
601 // start an app, maximize it
518− var facebookApp = startApplication("facebook-webapp");
602+ var facebookAppDelegate = startApplication("facebook-webapp");
519− var facebookAppDelegate = findChild(desktopStage, "appDelegate_facebook-webapp");
520 facebookAppDelegate.maximize();
603 facebookAppDelegate.maximize();
522 // verify the drop shadow is still not visible
605 // verify the drop shadow is still not visible
523 verify(PanelState.dropShadow == false);
606 verify(PanelState.dropShadow == false);
525 // start a foreground app, not maximized
608 // start a foreground app, not maximized
526− var dialerApp = startApplication("dialer-app");
609+ var dialerAppDelegate = startApplication("dialer-app");
527− var dialerAppDelegate = findChild(desktopStage, "appDelegate_dialer-app");
529 // verify the drop shadow becomes visible
611 // verify the drop shadow becomes visible
530 verify(PanelState.dropShadow == true);
612 verify(PanelState.dropShadow == true);
@@ -533,7 +615,7 @@ Item {
533 ApplicationManager.stopApplication("facebook-webapp");
615 ApplicationManager.stopApplication("facebook-webapp");
535 // verify the drop shadow is gone
617 // verify the drop shadow is gone
536− verify(PanelState.dropShadow == false);
618+ tryCompare(PanelState, "dropShadow", false);
539 function test_threeFingerTapShowsWindowControls_data() {
621 function test_threeFingerTapShowsWindowControls_data() {