@@ -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
@@ -53,6 +54,11 @@ Item {
57+ TopLevelSurfaceList {
59+ applicationsModel: ApplicationManager
57 id: desktopStageLoader
63 id: desktopStageLoader
58 x: ((root.width - controls.width) - width) / 2
64 x: ((root.width - controls.width) - width) / 2
@@ -68,6 +74,7 @@ Item {
68 color: "white"
74 color: "white"
69 anchors.fill: parent
75 anchors.fill: parent
70 background: "../../../qml/graphics/tablet_background.jpg"
76 background: "../../../qml/graphics/tablet_background.jpg"
72 Component.onCompleted: {
79 Component.onCompleted: {
73 edgeBarrierControls.target = testCase.findChild(this, "edgeBarrierController");
80 edgeBarrierControls.target = testCase.findChild(this, "edgeBarrierController");
@@ -76,6 +83,8 @@ Item {
76 desktopStageLoader.itemDestroyed = true;
83 desktopStageLoader.itemDestroyed = true;
78 orientations: Orientations {}
85 orientations: Orientations {}
86+ applicationManager: ApplicationManager
87+ topLevelSurfaceList: topSurfaceList
@@ -103,7 +112,7 @@ Item {
103 activeFocusOnPress: false
112 activeFocusOnPress: false
104 onClicked: {
113 onClicked: {
105 if (ApplicationManager.focusedApplicationId) {
114 if (ApplicationManager.focusedApplicationId) {
106− var surface = ApplicationManager.findApplication(ApplicationManager.focusedApplicationId).session.lastSurface;
115+ var surface = ApplicationManager.findApplication(ApplicationManager.focusedApplicationId).surfaceList.get(0);
107 surface.slowToResize = true;
116 surface.slowToResize = true;
@@ -137,6 +146,19 @@ Item {
138 property Item desktopStage: desktopStageLoader.status === Loader.Ready ? desktopStageLoader.item : null
147 property Item desktopStage: desktopStageLoader.status === Loader.Ready ? desktopStageLoader.item : null
150+ // wait until unity8-dash is up and running.
151+ // it's started automatically by ApplicationManager mock implementation
152+ tryCompare(ApplicationManager, "count", 1);
153+ var dashApp = ApplicationManager.findApplication("unity8-dash");
155+ tryCompare(dashApp, "state", ApplicationInfoInterface.Running);
157+ tryCompare(topSurfaceList, "count", 1);
158+ tryCompareFunction(function(){return topSurfaceList.surfaceAt(0) != null;}, true);
159+ compare(MirFocusController.focusedSurface, topSurfaceList.surfaceAt(0));
140 function cleanup() {
162 function cleanup() {
141 desktopStageLoader.itemDestroyed = false;
163 desktopStageLoader.itemDestroyed = false;
142 desktopStageLoader.active = false;
164 desktopStageLoader.active = false;
@@ -149,43 +171,71 @@ Item {
149 // Shell instance gets destroyed.
171 // Shell instance gets destroyed.
150 tryCompare(desktopStageLoader, "itemDestroyed", true);
172 tryCompare(desktopStageLoader, "itemDestroyed", true);
152− killAllRunningApps();
174+ killApps();
176+ root.resetGeometry();
154 desktopStageLoader.active = true;
178 desktopStageLoader.active = true;
155 tryCompare(desktopStageLoader, "status", Loader.Ready);
179 tryCompare(desktopStageLoader, "status", Loader.Ready);
156− root.resetGeometry();
159− function killAllRunningApps() {
160− while (ApplicationManager.count > 0) {
161− ApplicationManager.stopApplication(ApplicationManager.get(0).appId);
163− compare(ApplicationManager.count, 0)
166− function waitUntilAppSurfaceShowsUp(appId) {
183+ function waitUntilAppSurfaceShowsUp(surfaceId) {
167− var appWindow = findChild(desktopStage, "appWindow_" + appId);
184+ var appDelegate = findChild(desktopStage, "appDelegate_" + surfaceId);
185+ verify(appDelegate);
186+ var appWindow = findChild(appDelegate, "appWindow");
168 verify(appWindow);
187 verify(appWindow);
169 var appWindowStates = findInvisibleChild(appWindow, "applicationWindowStateGroup");
188 var appWindowStates = findInvisibleChild(appWindow, "applicationWindowStateGroup");
170 verify(appWindowStates);
189 verify(appWindowStates);
171 tryCompare(appWindowStates, "state", "surface");
190 tryCompare(appWindowStates, "state", "surface");
194+ Returns the appDelegate of the first surface created by the app with the specified appId
174 function startApplication(appId) {
196 function startApplication(appId) {
175− var app = ApplicationManager.findApplication(appId);
198+ var app = ApplicationManager.findApplication(appId);
176− if (!app) {
199+ if (app) {
200+ for (var i = 0; i < topSurfaceList.count; i++) {
201+ if (topSurfaceList.applicationAt(i).appId === appId) {
202+ var appRepeater = findChild(desktopStage, "appRepeater");
203+ verify(appRepeater);
204+ return appRepeater.itemAt(i);
209+ var surfaceId = topSurfaceList.nextId;
177 app = ApplicationManager.startApplication(appId);
210 app = ApplicationManager.startApplication(appId);
212+ waitUntilAppSurfaceShowsUp(surfaceId);
213+ compare(app.surfaceList.count, 1);
215+ return findChild(desktopStage, "appDelegate_" + surfaceId);
217+ throw new Error("startApplication("+appId+") called from line " + util.callerLine(1) + " failed!");
221+ function maximizeAppDelegate(appDelegate) {
222+ var maximizeButton = findChild(appDelegate, "maximizeWindowButton");
223+ if (!maximizeButton) {
224+ fail("Could not find maximizeWindowButton of appDelegate=" + appDelegate);
226+ mouseClick(maximizeButton);
229+ tryCompare(appDelegate, "visuallyMaximized", true);
231+ fail("appDelegate.visuallyMaximized !== true");
180− waitUntilAppSurfaceShowsUp(appId);
181− verify(app.session.lastSurface);
185 function test_appFocusSwitch_data() {
235 function test_appFocusSwitch_data() {
187− {tag: "dash to dialer", apps: [ "unity8-dash", "dialer-app", "camera-app" ], focusfrom: 0, focusTo: 1 },
237+ {tag: "dash to dialer", apps: [ "unity8-dash", "dialer-app", "gmail-webapp" ], focusfrom: 0, focusTo: 1 },
188− {tag: "dialer to dash", apps: [ "unity8-dash", "dialer-app", "camera-app" ], focusfrom: 1, focusTo: 0 },
238+ {tag: "dialer to dash", apps: [ "unity8-dash", "dialer-app", "gmail-webapp" ], focusfrom: 1, focusTo: 0 },
@@ -193,10 +243,10 @@ Item {
193 data.apps.forEach(startApplication);
243 data.apps.forEach(startApplication);
195 ApplicationManager.requestFocusApplication(data.apps[data.focusfrom]);
245 ApplicationManager.requestFocusApplication(data.apps[data.focusfrom]);
196− tryCompare(ApplicationManager.findApplication(data.apps[data.focusfrom]).session.lastSurface, "activeFocus", true);
246+ tryCompare(ApplicationManager.findApplication(data.apps[data.focusfrom]).surfaceList.get(0), "activeFocus", true);
198 ApplicationManager.requestFocusApplication(data.apps[data.focusTo]);
248 ApplicationManager.requestFocusApplication(data.apps[data.focusTo]);
199− tryCompare(ApplicationManager.findApplication(data.apps[data.focusTo]).session.lastSurface, "activeFocus", true);
249+ tryCompare(ApplicationManager.findApplication(data.apps[data.focusTo]).surfaceList.get(0), "activeFocus", true);
202 function test_tappingOnWindowChangesFocusedApp_data() {
252 function test_tappingOnWindowChangesFocusedApp_data() {
@@ -207,21 +257,24 @@ Item {
209 function test_tappingOnWindowChangesFocusedApp(data) {
259 function test_tappingOnWindowChangesFocusedApp(data) {
260+ var appDelegates = [];
261+ for (var i = 0; i < data.apps.length; i++) {
210− data.apps.forEach(startApplication);
262+ appDelegates[i] = startApplication(data.apps[i]);
211− var fromAppId = data.apps[data.focusfrom];
264+ var fromDelegate = appDelegates[data.focusfrom];
212− var toAppId = data.apps[data.focusTo]
265+ var toDelegate = appDelegates[data.focusTo];
214− var fromAppWindow = findChild(desktopStage, "appWindow_" + fromAppId);
267+ var fromAppWindow = findChild(fromDelegate, "appWindow");
215 verify(fromAppWindow);
268 verify(fromAppWindow);
216 tap(fromAppWindow);
269 tap(fromAppWindow);
217− compare(fromAppWindow.application.session.lastSurface.activeFocus, true);
270+ compare(fromDelegate.surface.activeFocus, true);
218− compare(ApplicationManager.focusedApplicationId, fromAppId);
271+ compare(MirFocusController.focusedSurface, fromDelegate.surface);
220− var toAppWindow = findChild(desktopStage, "appWindow_" + toAppId);
273+ var toAppWindow = findChild(toDelegate, "appWindow");
221 verify(toAppWindow);
274 verify(toAppWindow);
222 tap(toAppWindow);
275 tap(toAppWindow);
223− compare(toAppWindow.application.session.lastSurface.activeFocus, true);
276+ compare(toDelegate.surface.activeFocus, true);
224− compare(ApplicationManager.focusedApplicationId, toAppId);
277+ compare(MirFocusController.focusedSurface, toDelegate.surface);
227 function test_clickingOnWindowChangesFocusedApp_data() {
280 function test_clickingOnWindowChangesFocusedApp_data() {
@@ -229,21 +282,24 @@ Item {
231 function test_clickingOnWindowChangesFocusedApp(data) {
284 function test_clickingOnWindowChangesFocusedApp(data) {
285+ var appDelegates = [];
286+ for (var i = 0; i < data.apps.length; i++) {
232− data.apps.forEach(startApplication);
287+ appDelegates[i] = startApplication(data.apps[i]);
233− var fromAppId = data.apps[data.focusfrom];
289+ var fromDelegate = appDelegates[data.focusfrom];
234− var toAppId = data.apps[data.focusTo]
290+ var toDelegate = appDelegates[data.focusTo];
236− var fromAppWindow = findChild(desktopStage, "appWindow_" + fromAppId);
292+ var fromAppWindow = findChild(fromDelegate, "appWindow");
237 verify(fromAppWindow);
293 verify(fromAppWindow);
238 mouseClick(fromAppWindow);
294 mouseClick(fromAppWindow);
239− compare(fromAppWindow.application.session.lastSurface.activeFocus, true);
295+ compare(fromDelegate.surface.activeFocus, true);
240− compare(ApplicationManager.focusedApplicationId, fromAppId);
296+ compare(MirFocusController.focusedSurface, fromDelegate.surface);
242− var toAppWindow = findChild(desktopStage, "appWindow_" + toAppId);
298+ var toAppWindow = findChild(toDelegate, "appWindow");
243 verify(toAppWindow);
299 verify(toAppWindow);
244 mouseClick(toAppWindow);
300 mouseClick(toAppWindow);
245− compare(toAppWindow.application.session.lastSurface.activeFocus, true);
301+ compare(toDelegate.surface.activeFocus, true);
246− compare(ApplicationManager.focusedApplicationId, toAppId);
302+ compare(MirFocusController.focusedSurface, toDelegate.surface);
249 function test_tappingOnDecorationFocusesApplication_data() {
305 function test_tappingOnDecorationFocusesApplication_data() {
@@ -253,24 +309,49 @@ Item {
312+ function findDecoratedWindow(surfaceId) {
313+ var appDelegate = findChild(desktopStage, "appDelegate_" + surfaceId);
315+ console.warn("Could not find appDelegate for surfaceId="+surfaceId);
318+ return findChild(appDelegate, "decoratedWindow");
321+ function findWindowDecoration(surfaceId) {
322+ var appDelegate = findChild(desktopStage, "appDelegate_" + surfaceId);
324+ console.warn("Could not find appDelegate for surfaceId="+surfaceId);
327+ return findChild(appDelegate, "appWindowDecoration");
256 function test_tappingOnDecorationFocusesApplication(data) {
330 function test_tappingOnDecorationFocusesApplication(data) {
331+ var appDelegates = [];
332+ for (var i = 0; i < data.apps.length; i++) {
257− data.apps.forEach(startApplication);
333+ appDelegates[i] = startApplication(data.apps[i]);
336+ var fromDelegate = appDelegates[data.focusfrom];
337+ var toDelegate = appDelegates[data.focusTo];
259− var fromAppDecoration = findChild(desktopStage, "appWindowDecoration_" + data.apps[data.focusfrom]);
339+ var fromAppDecoration = findChild(fromDelegate, "appWindowDecoration");
260 verify(fromAppDecoration);
340 verify(fromAppDecoration);
261 tap(fromAppDecoration);
341 tap(fromAppDecoration);
263− var fromApp = ApplicationManager.findApplication(data.apps[data.focusfrom]);
265− tryCompare(fromApp.session.lastSurface, "activeFocus", true);
343+ tryCompare(fromDelegate.surface, "activeFocus", true);
267− var toAppDecoration = findChild(desktopStage, "appWindowDecoration_" + data.apps[data.focusTo]);
345+ var toAppDecoration = findChild(toDelegate, "appWindowDecoration");
268 verify(toAppDecoration);
346 verify(toAppDecoration);
348+ // FIXME: Wait a bit before the second tap or the window decoration will say it got double clicked.
269 tap(toAppDecoration);
352 tap(toAppDecoration);
271− var toApp = ApplicationManager.findApplication(data.apps[data.focusTo]);
273− tryCompare(toApp.session.lastSurface, "activeFocus", true);
354+ tryCompare(toDelegate.surface, "activeFocus", true);
276 function test_clickingOnDecorationFocusesApplication_data() {
357 function test_clickingOnDecorationFocusesApplication_data() {
@@ -278,159 +359,170 @@ Item {
280 function test_clickingOnDecorationFocusesApplication(data) {
361 function test_clickingOnDecorationFocusesApplication(data) {
362+ var appDelegates = [];
363+ for (var i = 0; i < data.apps.length; i++) {
281− data.apps.forEach(startApplication);
364+ appDelegates[i] = startApplication(data.apps[i]);
366+ var fromDelegate = appDelegates[data.focusfrom];
367+ var toDelegate = appDelegates[data.focusTo];
283− var fromAppDecoration = findChild(desktopStage, "appWindowDecoration_" + data.apps[data.focusfrom]);
369+ var fromAppDecoration = findChild(fromDelegate, "appWindowDecoration");
284 verify(fromAppDecoration);
370 verify(fromAppDecoration);
285 mouseClick(fromAppDecoration);
371 mouseClick(fromAppDecoration);
286− tryCompare(ApplicationManager.findApplication(data.apps[data.focusfrom]).session.lastSurface, "activeFocus", true);
372+ tryCompare(fromDelegate.surface, "activeFocus", true);
288− var toAppDecoration = findChild(desktopStage, "appWindowDecoration_" + data.apps[data.focusTo]);
374+ var toAppDecoration = findChild(toDelegate, "appWindowDecoration");
289 verify(toAppDecoration);
375 verify(toAppDecoration);
290 mouseClick(toAppDecoration);
376 mouseClick(toAppDecoration);
291− tryCompare(ApplicationManager.findApplication(data.apps[data.focusTo]).session.lastSurface, "activeFocus", true);
377+ tryCompare(toDelegate.surface, "activeFocus", true);
294 function test_windowMaximize() {
380 function test_windowMaximize() {
295− var apps = ["unity8-dash", "dialer-app", "camera-app"];
381+ var dialerDelegate = startApplication("dialer-app");
296− apps.forEach(startApplication);
382+ startApplication("camera-app");
297− var appName = "dialer-app";
383+
298− var appDelegate = findChild(desktopStage, "appDelegate_" + appName);
384+ tryCompareFunction(function(){ return dialerDelegate.surface !== null; }, true);
299− verify(appDelegate);
385+ dialerDelegate.surface.requestFocus();
300− ApplicationManager.focusApplication(appName);
386+ tryCompare(dialerDelegate, "focus", true);
301 keyClick(Qt.Key_Up, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+Up shortcut to maximize
388 keyClick(Qt.Key_Up, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+Up shortcut to maximize
302− tryCompare(appDelegate, "maximized", true);
389+ tryCompare(dialerDelegate, "maximized", true);
303− tryCompare(appDelegate, "minimized", false);
390+ tryCompare(dialerDelegate, "minimized", false);
306 function test_windowMaximizeLeft() {
393 function test_windowMaximizeLeft() {
307− var apps = ["unity8-dash", "dialer-app", "camera-app"];
394+ var dialerDelegate = startApplication("dialer-app");
308− apps.forEach(startApplication);
395+ startApplication("camera-app");
309− var appName = "dialer-app";
396+
310− var appDelegate = findChild(desktopStage, "appDelegate_" + appName);
397+ tryCompareFunction(function(){ return dialerDelegate.surface !== null; }, true);
311− verify(appDelegate);
398+ dialerDelegate.surface.requestFocus();
312− ApplicationManager.focusApplication(appName);
399+ tryCompare(dialerDelegate, "focus", true);
313 keyClick(Qt.Key_Left, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+Left shortcut to maximizeLeft
401 keyClick(Qt.Key_Left, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+Left shortcut to maximizeLeft
314− tryCompare(appDelegate, "maximized", false);
402+ tryCompare(dialerDelegate, "maximized", false);
315− tryCompare(appDelegate, "minimized", false);
403+ tryCompare(dialerDelegate, "minimized", false);
316− tryCompare(appDelegate, "maximizedLeft", true);
404+ tryCompare(dialerDelegate, "maximizedLeft", true);
317− tryCompare(appDelegate, "maximizedRight", false);
405+ tryCompare(dialerDelegate, "maximizedRight", false);
320 function test_windowMaximizeRight() {
408 function test_windowMaximizeRight() {
321− var apps = ["unity8-dash", "dialer-app", "camera-app"];
409+ var dialerDelegate = startApplication("dialer-app");
322− apps.forEach(startApplication);
410+ startApplication("camera-app");
323− var appName = "dialer-app";
411+
324− var appDelegate = findChild(desktopStage, "appDelegate_" + appName);
412+ tryCompareFunction(function(){ return dialerDelegate.surface !== null; }, true);
325− verify(appDelegate);
413+ dialerDelegate.surface.requestFocus();
326− ApplicationManager.focusApplication(appName);
414+ tryCompare(dialerDelegate, "focus", true);
327 keyClick(Qt.Key_Right, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+Right shortcut to maximizeRight
416 keyClick(Qt.Key_Right, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+Right shortcut to maximizeRight
328− tryCompare(appDelegate, "maximized", false);
417+ tryCompare(dialerDelegate, "maximized", false);
329− tryCompare(appDelegate, "minimized", false);
418+ tryCompare(dialerDelegate, "minimized", false);
330− tryCompare(appDelegate, "maximizedLeft", false);
419+ tryCompare(dialerDelegate, "maximizedLeft", false);
331− tryCompare(appDelegate, "maximizedRight", true);
420+ tryCompare(dialerDelegate, "maximizedRight", true);
334 function test_windowMinimize() {
423 function test_windowMinimize() {
335− var apps = ["unity8-dash", "dialer-app", "camera-app"];
424+ var dialerDelegate = startApplication("dialer-app");
336− apps.forEach(startApplication);
425+ startApplication("camera-app");
337− var appName = "dialer-app";
426+
338− var appDelegate = findChild(desktopStage, "appDelegate_" + appName);
427+ tryCompareFunction(function(){ return dialerDelegate.surface !== null; }, true);
339− verify(appDelegate);
428+ dialerDelegate.surface.requestFocus();
340− ApplicationManager.focusApplication(appName);
429+ tryCompare(dialerDelegate, "focus", true);
341 keyClick(Qt.Key_Down, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+Down shortcut to minimize
431 keyClick(Qt.Key_Down, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+Down shortcut to minimize
342− tryCompare(appDelegate, "maximized", false);
432+ tryCompare(dialerDelegate, "maximized", false);
343− tryCompare(appDelegate, "minimized", true);
433+ tryCompare(dialerDelegate, "minimized", true);
344 verify(ApplicationManager.focusedApplicationId != ""); // verify we don't lose focus when minimizing an app
434 verify(ApplicationManager.focusedApplicationId != ""); // verify we don't lose focus when minimizing an app
347 function test_windowMinimizeAll() {
437 function test_windowMinimizeAll() {
348 var apps = ["unity8-dash", "dialer-app", "camera-app"];
438 var apps = ["unity8-dash", "dialer-app", "camera-app"];
349 apps.forEach(startApplication);
439 apps.forEach(startApplication);
350− verify(ApplicationManager.count == 3);
440+ verify(topSurfaceList.count == 3);
351 keyClick(Qt.Key_D, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+D shortcut to minimize all
441 keyClick(Qt.Key_D, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+D shortcut to minimize all
352 tryCompare(ApplicationManager, "focusedApplicationId", ""); // verify no app is focused
442 tryCompare(ApplicationManager, "focusedApplicationId", ""); // verify no app is focused
355 function test_windowClose() {
445 function test_windowClose() {
356− var apps = ["unity8-dash", "dialer-app", "camera-app"];
446+ var dialerSurfaceId = topSurfaceList.nextId;
357− apps.forEach(startApplication);
447+ var dialerDelegate = startApplication("dialer-app");
448+ verify(topSurfaceList.indexForId(dialerSurfaceId) !== -1);
449+ startApplication("gmail-webapp");
358− verify(ApplicationManager.count == 3);
450+ verify(topSurfaceList.count == 3);
359− var appName = "dialer-app";
451+
360− var appDelegate = findChild(desktopStage, "appDelegate_" + appName);
452+ mouseClick(dialerDelegate);
361− verify(appDelegate);
453+
362− ApplicationManager.focusApplication(appName);
454+ var desktopStagePriv = findInvisibleChild(desktopStage, "DesktopStagePrivate");
455+ tryCompare(desktopStagePriv, "focusedAppDelegate", dialerDelegate);
363 keyClick(Qt.Key_F4, Qt.AltModifier); // Alt+F4 shortcut to close
457 keyClick(Qt.Key_F4, Qt.AltModifier); // Alt+F4 shortcut to close
364− verify(ApplicationManager.count == 2); // verify the app is gone
459+ // verify the surface is gone
365− verify(ApplicationManager.findApplication(appName) === null); // and it's not in running apps
460+ tryCompare(topSurfaceList, "count", 2);
461+ verify(topSurfaceList.indexForId(dialerSurfaceId) === -1);
368 function test_smashCursorKeys() {
464 function test_smashCursorKeys() {
369− var apps = ["unity8-dash", "dialer-app", "camera-app"];
465+ var apps = ["dialer-app", "gmail-webapp"];
370 apps.forEach(startApplication);
466 apps.forEach(startApplication);
371− verify(ApplicationManager.count == 3);
467+ verify(topSurfaceList.count == 3);
372 keyClick(Qt.Key_D, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+D shortcut to minimize all
468 keyClick(Qt.Key_D, Qt.MetaModifier|Qt.ControlModifier); // Ctrl+Super+D shortcut to minimize all
373− tryCompare(ApplicationManager, "focusedApplicationId", ""); // verify no app is focused
469+ tryCompare(MirFocusController, "focusedSurface", null); // verify no surface is focused
375 // now try pressing all 4 arrow keys + ctrl + meta
471 // now try pressing all 4 arrow keys + ctrl + meta
376 keyClick(Qt.Key_Up | Qt.Key_Down | Qt.Key_Left | Qt.Key_Right, Qt.MetaModifier|Qt.ControlModifier); // smash it!!!
472 keyClick(Qt.Key_Up | Qt.Key_Down | Qt.Key_Left | Qt.Key_Right, Qt.MetaModifier|Qt.ControlModifier); // smash it!!!
377− tryCompare(ApplicationManager, "focusedApplicationId", ""); // verify still no app is focused
473+ tryCompare(MirFocusController, "focusedSurface", null); // verify still no surface is focused
380 function test_minimizeApplicationHidesSurface() {
476 function test_minimizeApplicationHidesSurface() {
381− var dashApp = startApplication("unity8-dash");
477+ compare(topSurfaceList.applicationAt(0).appId, "unity8-dash");
478+ var dashSurface = topSurfaceList.surfaceAt(0);
479+ var dashSurfaceId = topSurfaceList.idAt(0);
383− var dashDelegate = findChild(desktopStage, "appDelegate_unity8-dash");
481+ var decoratedWindow = findDecoratedWindow(dashSurfaceId);
384− verify(dashDelegate);
482+ verify(decoratedWindow);
484+ tryCompare(dashSurface, "visible", true);
386− findChild(dashDelegate, "decoratedWindow").minimize();
485+ decoratedWindow.minimize();
387− tryCompare(dashApp.session.lastSurface, "visible", false);
486+ tryCompare(dashSurface, "visible", false);
390 function test_maximizeApplicationHidesSurfacesBehindIt() {
489 function test_maximizeApplicationHidesSurfacesBehindIt() {
391− var dashApp = startApplication("unity8-dash");
490+ var dashDelegate = startApplication("unity8-dash");
392− var dialerApp = startApplication("dialer-app");
491+ var dialerDelegate = startApplication("dialer-app");
393− var gmailApp = startApplication("gmail-webapp");
492+ var gmailDelegate = startApplication("gmail-webapp");
395− var dashDelegate = findChild(desktopStage, "appDelegate_unity8-dash");
396− verify(dashDelegate);
397− var dialerDelegate = findChild(desktopStage, "appDelegate_dialer-app");
398− verify(dialerDelegate);
399− var gmailDelegate = findChild(desktopStage, "appDelegate_gmail-webapp");
400− verify(gmailDelegate);
402− // maximize
494+ // maximize without raising
403 dialerDelegate.maximize();
495 dialerDelegate.maximize();
404 tryCompare(dialerDelegate, "visuallyMaximized", true);
496 tryCompare(dialerDelegate, "visuallyMaximized", true);
406− tryCompare(dashApp.session.lastSurface, "visible", false);
498+ tryCompare(dashDelegate.surface, "visible", false);
407− compare(gmailApp.session.lastSurface.visible, true);
499+ compare(gmailDelegate.surface.visible, true);
409− // restore
501+ // restore without raising
410 dialerDelegate.restoreFromMaximized();
502 dialerDelegate.restoreFromMaximized();
411− compare(dashApp.session.lastSurface.visible, true);
503+ compare(dashDelegate.surface.visible, true);
412− compare(gmailApp.session.lastSurface.visible, true);
504+ compare(gmailDelegate.surface.visible, true);
415 function test_applicationsBecomeVisibleWhenOccludingAppRemoved() {
507 function test_applicationsBecomeVisibleWhenOccludingAppRemoved() {
416− var dashApp = startApplication("unity8-dash");
508+ var dashApp = topSurfaceList.applicationAt(0);
417− var dashDelegate = findChild(desktopStage, "appDelegate_unity8-dash");
418− verify(dashDelegate);
420− var dialerApp = startApplication("dialer-app");
510+ var dialerSurfaceId = topSurfaceList.nextId;
421− var dialerDelegate = findChild(desktopStage, "appDelegate_dialer-app");
511+ var dialerDelegate = startApplication("dialer-app");
422 verify(dialerDelegate);
512 verify(dialerDelegate);
513+ var dialerApp = dialerDelegate.application;
424 var dialerMaximizeButton = findChild(dialerDelegate, "maximizeWindowButton");
515 var dialerMaximizeButton = findChild(dialerDelegate, "maximizeWindowButton");
425 verify(dialerMaximizeButton);
516 verify(dialerMaximizeButton);
426 mouseClick(dialerMaximizeButton);
517 mouseClick(dialerMaximizeButton);
428− var mapApp = startApplication("map");
519+ var mapSurfaceId = topSurfaceList.nextId;
429− var mapDelegate = findChild(desktopStage, "appDelegate_map");
520+ var mapDelegate = startApplication("map");
430 verify(mapDelegate);
521 verify(mapDelegate);
522+ var mapApp = mapDelegate.application;
432− var gmailApp = startApplication("gmail-webapp");
524+ var gmailSurfaceId = topSurfaceList.nextId;
433− var gmailDelegate = findChild(desktopStage, "appDelegate_gmail-webapp");
525+ var gmailDelegate = startApplication("gmail-webapp");
434 verify(gmailDelegate);
526 verify(gmailDelegate);
436 var gmailMaximizeButton = findChild(gmailDelegate, "maximizeWindowButton");
528 var gmailMaximizeButton = findChild(gmailDelegate, "maximizeWindowButton");
@@ -440,29 +532,27 @@ Item {
440 tryCompare(dialerDelegate, "visuallyMaximized", true);
532 tryCompare(dialerDelegate, "visuallyMaximized", true);
441 tryCompare(gmailDelegate, "visuallyMaximized", true);
533 tryCompare(gmailDelegate, "visuallyMaximized", true);
443− tryCompare(dashApp.session.lastSurface, "visible", false);
535+ tryCompare(dashApp.surfaceList.get(0), "visible", false);
444− tryCompare(dialerApp.session.lastSurface, "visible", false);
536+ tryCompare(dialerApp.surfaceList.get(0), "visible", false);
445− tryCompare(mapApp.session.lastSurface, "visible", false);
537+ tryCompare(mapApp.surfaceList.get(0), "visible", false);
447 ApplicationManager.stopApplication("gmail-webapp");
539 ApplicationManager.stopApplication("gmail-webapp");
449− compare(mapApp.session.lastSurface.visible, true);
541+ tryCompare(mapApp.surfaceList.get(0), "visible", true);
450− tryCompare(dialerApp.session.lastSurface, "visible", true);
542+ tryCompare(dialerApp.surfaceList.get(0), "visible", true);
451− tryCompare(dashApp.session.lastSurface, "visible", false); // still occluded by maximised dialer
543+ tryCompare(dashApp.surfaceList.get(0), "visible", false); // still occluded by maximised dialer
454 function test_maximisedAppStaysVisibleWhenAppStarts() {
546 function test_maximisedAppStaysVisibleWhenAppStarts() {
455− var dashApp = startApplication("unity8-dash");
547+ var dashDelegate = startApplication("unity8-dash");
456− var dashDelegate = findChild(desktopStage, "appDelegate_unity8-dash");
548+
457− verify(dashDelegate);
458 // maximize
549 // maximize
459 var dashMaximizeButton = findChild(dashDelegate, "maximizeWindowButton");
550 var dashMaximizeButton = findChild(dashDelegate, "maximizeWindowButton");
460 verify(dashMaximizeButton);
551 verify(dashMaximizeButton);
461 mouseClick(dashMaximizeButton);
552 mouseClick(dashMaximizeButton);
462 tryCompare(dashDelegate, "visuallyMaximized", true);
553 tryCompare(dashDelegate, "visuallyMaximized", true);
464− var dialerApp = startApplication("dialer-app");
555+ var dialerDelegate = startApplication("dialer-app");
465− var dialerDelegate = findChild(desktopStage, "appDelegate_dialer-app");
466 verify(dialerDelegate);
556 verify(dialerDelegate);
468 compare(dialerDelegate.visible, true, "Dialer should be visible");
558 compare(dialerDelegate.visible, true, "Dialer should be visible");
@@ -470,14 +560,11 @@ Item {
472 function test_occlusionWithMultipleMaximized() {
562 function test_occlusionWithMultipleMaximized() {
473− var dashApp = startApplication("unity8-dash");
563+ var dashAppDelegate = startApplication("unity8-dash");
474− var dashAppDelegate = findChild(desktopStage, "appDelegate_unity8-dash");
476− var dialerApp = startApplication("dialer-app");
565+ var dialerAppDelegate = startApplication("dialer-app");
477− var dialerAppDelegate = findChild(desktopStage, "appDelegate_dialer-app");
479− var facebookApp = startApplication("facebook-webapp");
567+ var facebookAppDelegate = startApplication("facebook-webapp");
480− var facebookAppDelegate = findChild(desktopStage, "appDelegate_facebook-webapp");
482 // all of them are in restored state now. all should be visible
569 // all of them are in restored state now. all should be visible
483 tryCompare(dashAppDelegate, "visible", true);
570 tryCompare(dashAppDelegate, "visible", true);
@@ -491,13 +578,13 @@ Item {
491 tryCompare(facebookAppDelegate, "visible", true);
578 tryCompare(facebookAppDelegate, "visible", true);
493 // Bring dash to front. make sure dash and the maximized facebook are visible, the restored one behind is hidden
580 // Bring dash to front. make sure dash and the maximized facebook are visible, the restored one behind is hidden
494− ApplicationManager.focusApplication("unity8-dash");
581+ dashAppDelegate.focus = true;
495 tryCompare(dashAppDelegate, "visible", true);
582 tryCompare(dashAppDelegate, "visible", true);
496 tryCompare(dialerAppDelegate, "visible", false);
583 tryCompare(dialerAppDelegate, "visible", false);
497 tryCompare(facebookAppDelegate, "visible", true);
584 tryCompare(facebookAppDelegate, "visible", true);
499 // Now focus the dialer app. all 3 should be visible again
586 // Now focus the dialer app. all 3 should be visible again
500− ApplicationManager.focusApplication("dialer-app");
587+ dialerAppDelegate.focus = true;
501 tryCompare(dashAppDelegate, "visible", true);
588 tryCompare(dashAppDelegate, "visible", true);
502 tryCompare(dialerAppDelegate, "visible", true);
589 tryCompare(dialerAppDelegate, "visible", true);
503 tryCompare(facebookAppDelegate, "visible", true);
590 tryCompare(facebookAppDelegate, "visible", true);
@@ -510,20 +597,15 @@ Item {
512 function test_dropShadow() {
599 function test_dropShadow() {
513− // verify the drop shadow is not visible initially
514− verify(PanelState.dropShadow == false);
516 // start an app, maximize it
600 // start an app, maximize it
517− var facebookApp = startApplication("facebook-webapp");
601+ var facebookAppDelegate = startApplication("facebook-webapp");
518− var facebookAppDelegate = findChild(desktopStage, "appDelegate_facebook-webapp");
519 facebookAppDelegate.maximize();
602 facebookAppDelegate.maximize();
521 // verify the drop shadow is still not visible
604 // verify the drop shadow is still not visible
522 verify(PanelState.dropShadow == false);
605 verify(PanelState.dropShadow == false);
524 // start a foreground app, not maximized
607 // start a foreground app, not maximized
525− var dialerApp = startApplication("dialer-app");
608+ var dialerAppDelegate = startApplication("dialer-app");
526− var dialerAppDelegate = findChild(desktopStage, "appDelegate_dialer-app");
528 // verify the drop shadow becomes visible
610 // verify the drop shadow becomes visible
529 verify(PanelState.dropShadow == true);
611 verify(PanelState.dropShadow == true);
@@ -532,7 +614,7 @@ Item {
532 ApplicationManager.stopApplication("facebook-webapp");
614 ApplicationManager.stopApplication("facebook-webapp");
534 // verify the drop shadow is gone
616 // verify the drop shadow is gone
535− verify(PanelState.dropShadow == false);
617+ tryCompare(PanelState, "dropShadow", false);