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