on xenial help sign in
Fix up new tests to pass again
e409399Michael Terry
qml/Stages/DesktopStage.qml−2
@@ -163,8 +163,6 @@ AbstractStage {
163 (priv.foregroundMaximizedAppIdIndex === -1 || priv.foregroundMaximizedAppIdIndex >= index) ||
163 (priv.foregroundMaximizedAppIdIndex === -1 || priv.foregroundMaximizedAppIdIndex >= index) ||
164 (spread.state == "altTab" && index === spread.highlightedIndex)
164 (spread.state == "altTab" && index === spread.highlightedIndex)
165
165
166− onVisibleChanged: console.log("VISIBLE", model.appId, visible)
167−
168 Binding {
166 Binding {
169 target: ApplicationManager.get(index)
167 target: ApplicationManager.get(index)
170 property: "requestedState"
168 property: "requestedState"
qml/Tutorial/InactivityTimer.qml+2
@@ -18,6 +18,8 @@ import QtQuick 2.4
18import Ubuntu.Components 1.3
18import Ubuntu.Components 1.3
19
19
20Item {
20Item {
21+ readonly property alias running: internalTimer.running
22+ property alias interval: internalTimer.interval
21 property var page
23 property var page
22 property int lastInputTimestamp
24 property int lastInputTimestamp
23
25
qml/Tutorial/TutorialContent.qml+10−1
@@ -75,8 +75,16 @@ Item {
75 AccountsService.demoEdgesCompleted.indexOf("left") != -1
75 AccountsService.demoEdgesCompleted.indexOf("left") != -1
76 isReady: !skipped && !paused && !keyboardVisible
76 isReady: !skipped && !paused && !keyboardVisible
77
77
78+ // Use an idle timer here, because when constructed, all our isReady variables will be false.
79+ // Qml needs a moment to copy their values from Tutorial.qml. So we idle it and recheck.
80+ Timer {
81+ id: tutorialLeftTimer
82+ interval: 0
83+ onTriggered: if (tutorialLeft.isReady && !tutorialLeft.shown) tutorialLeft.show()
84+ }
85+
78 onSkippedChanged: if (skipped && shown) hide()
86 onSkippedChanged: if (skipped && shown) hide()
79− onIsReadyChanged: if (isReady && !shown) show()
87+ onIsReadyChanged: if (isReady && !shown) tutorialLeftTimer.start()
80 onFinished: AccountsService.markDemoEdgeCompleted("left")
88 onFinished: AccountsService.markDemoEdgeCompleted("left")
81 }
89 }
82
90
@@ -129,6 +137,7 @@ Item {
129
137
130 InactivityTimer {
138 InactivityTimer {
131 id: tutorialRightInactivityTimer
139 id: tutorialRightInactivityTimer
140+ objectName: "tutorialRightInactivityTimer"
132 lastInputTimestamp: root.lastInputTimestamp
141 lastInputTimestamp: root.lastInputTimestamp
133 page: parent
142 page: parent
134 }
143 }
qml/Tutorial/TutorialPage.qml+11−5
@@ -42,17 +42,25 @@ Showable {
42 shown: false
42 shown: false
43
43
44 opacity: Math.max(Math.min(_showOpacity, opacityOverride), 0)
44 opacity: Math.max(Math.min(_showOpacity, opacityOverride), 0)
45− onOpacityOverrideChanged: if (opacityOverride <= 0) hide()
45+ onOpacityOverrideChanged: {
46+ if (opacityOverride <= 0) {
47+ d.showOnUnpause = false;
48+ hide();
49+ }
50+ }
46 property real _showOpacity: 0
51 property real _showOpacity: 0
47
52
48 onPausedChanged: {
53 onPausedChanged: {
49 if (paused && shown) {
54 if (paused && shown) {
55+ d.showOnUnpause = true;
50 hide();
56 hide();
51 } else if (!paused && d.showOnUnpause) {
57 } else if (!paused && d.showOnUnpause) {
52− d.showOnUnpause = false;
53 if (isReady) {
58 if (isReady) {
54 show();
59 show();
60+ } else if (hideAnimation.running) {
61+ hideAnimation.stop();
55 }
62 }
63+ d.showOnUnpause = false;
56 }
64 }
57 }
65 }
58
66
@@ -70,9 +78,7 @@ Showable {
70 duration: UbuntuAnimation.BriskDuration
78 duration: UbuntuAnimation.BriskDuration
71 onStopped: {
79 onStopped: {
72 root.visible = false;
80 root.visible = false;
73− if (root.paused) {
74− d.showOnUnpause = true;
81+ if (!d.showOnUnpause) {
75− } else {
76 root.finished();
82 root.finished();
77 }
83 }
78 }
84 }
tests/qmltests/Tutorial/tst_Tutorial.qml+28−22
@@ -24,6 +24,7 @@ import Unity.Application 0.1
24import Unity.Test 0.1 as UT
24import Unity.Test 0.1 as UT
25
25
26import "../../../qml"
26import "../../../qml"
27+import "../../../qml/Components"
27
28
28Item {
29Item {
29 id: root
30 id: root
@@ -73,6 +74,10 @@ Item {
73 sourceComponent: Component {
74 sourceComponent: Component {
74 Shell {
75 Shell {
75 property string indicatorProfile: "phone"
76 property string indicatorProfile: "phone"
77+ orientations: Orientations {
78+ native_: Qt.PortraitOrientation
79+ primary: Qt.PortraitOrientation
80+ }
76
81
77 Component.onDestruction: {
82 Component.onDestruction: {
78 shellLoader.itemDestroyed = true;
83 shellLoader.itemDestroyed = true;
@@ -221,6 +226,7 @@ Item {
221
226
222 // kill all (fake) running apps
227 // kill all (fake) running apps
223 killApps();
228 killApps();
229+ SurfaceManager.inputMethodSurface().destroy(); // so that InputMethod will notice new one
224
230
225 // reload our test subject to get it in a fresh state once again
231 // reload our test subject to get it in a fresh state once again
226 shellLoader.active = true;
232 shellLoader.active = true;
@@ -288,20 +294,6 @@ Item {
288 tryCompare(tutorialBottom, "opacity", 1);
294 tryCompare(tutorialBottom, "opacity", 1);
289 }
295 }
290
296
291− function test_longPressDismissesTutorialPage() {
292− var tutorialLeft = findChild(shell, "tutorialLeft");
293−
294− verify(tutorialLeft.shown);
295− compare(AccountsService.demoEdgesCompleted, []);
296−
297− mousePress(tutorialLeft);
298− wait(1000);
299− mouseRelease(tutorialLeft);
300−
301− tryCompare(tutorialLeft, "shown", false);
302− tryCompare(AccountsService, "demoEdgesCompleted", ["left"]);
303− }
304−
305 function test_tutorialLeftEdges() {
297 function test_tutorialLeftEdges() {
306 var tutorial = findChild(shell, "tutorial");
298 var tutorial = findChild(shell, "tutorial");
307 var tutorialLeft = findChild(tutorial, "tutorialLeft");
299 var tutorialLeft = findChild(tutorial, "tutorialLeft");
@@ -377,6 +369,18 @@ Item {
377 tryCompare(AccountsService, "demoEdgesCompleted", ["left"]);
369 tryCompare(AccountsService, "demoEdgesCompleted", ["left"]);
378 }
370 }
379
371
372+ function test_tutorialLeftAutoSkipped() {
373+ // Test that we skip the tutorial if user uses left edge themselves
374+
375+ var tutorialLeft = findChild(shell, "tutorialLeft");
376+ LightDM.Greeter.showGreeter();
377+ tryCompare(tutorialLeft, "visible", false);
378+ compare(AccountsService.demoEdgesCompleted, []);
379+
380+ touchFlick(shell, 0, halfHeight, halfWidth, halfHeight);
381+ tryCompare(AccountsService, "demoEdgesCompleted", ["left"]);
382+ }
383+
380 function test_tutorialTopEdges() {
384 function test_tutorialTopEdges() {
381 var tutorial = findChild(shell, "tutorial");
385 var tutorial = findChild(shell, "tutorial");
382 var tutorialTop = findChild(tutorial, "tutorialTop");
386 var tutorialTop = findChild(tutorial, "tutorialTop");
@@ -491,17 +495,16 @@ Item {
491 // Test that if we exit the top tutorial, we don't immediately
495 // Test that if we exit the top tutorial, we don't immediately
492 // jump into right tutorial.
496 // jump into right tutorial.
493 var tutorialRight = findChild(shell, "tutorialRight");
497 var tutorialRight = findChild(shell, "tutorialRight");
494− var tutorialRightTimer = findInvisibleChild(tutorialRight, "tutorialRightTimer");
498+ var tutorialRightTimer = findInvisibleChild(tutorialRight, "tutorialRightInactivityTimer");
495
499
496 tutorialRightTimer.interval = 1;
500 tutorialRightTimer.interval = 1;
497 openTutorialTop();
501 openTutorialTop();
498− ApplicationManager.startApplication("dialer-app");
502+ ApplicationManager.startApplication("gallery-app");
499− ApplicationManager.startApplication("camera-app");
500− ApplicationManager.startApplication("messaging-app");
503+ ApplicationManager.startApplication("facebook-webapp");
501 tryCompare(ApplicationManager, "count", 3);
504 tryCompare(ApplicationManager, "count", 3);
502
505
503 AccountsService.demoEdgesCompleted = ["left", "top"];
506 AccountsService.demoEdgesCompleted = ["left", "top"];
504− verify(tutorialRightTimer.running);
507+ verify(tutorialRightTimer.running, true);
505 verify(!tutorialRight.shown);
508 verify(!tutorialRight.shown);
506 tryCompare(tutorialRight, "shown", true);
509 tryCompare(tutorialRight, "shown", true);
507 }
510 }
@@ -576,7 +579,7 @@ Item {
576 tryCompare(tutorialLeft, "visible", false);
579 tryCompare(tutorialLeft, "visible", false);
577
580
578 callManager.foregroundCall = null;
581 callManager.foregroundCall = null;
579− verify(tutorialLeft.shown);
582+ tryCompare(tutorialLeft, "shown", true);
580 verify(!tutorialLeft.paused);
583 verify(!tutorialLeft.paused);
581 }
584 }
582
585
@@ -659,13 +662,16 @@ Item {
659 surface.setState(Mir.RestoredState);
662 surface.setState(Mir.RestoredState);
660 tryCompare(inputMethod, "state", "shown");
663 tryCompare(inputMethod, "state", "shown");
661
664
665+ var tutorial = findChild(shell, "tutorial");
666+ tryCompare(tutorial, "keyboardVisible", true);
667+
662 AccountsService.demoEdges = true;
668 AccountsService.demoEdges = true;
663 var tutorialLeft = findChild(shell, "tutorialLeft");
669 var tutorialLeft = findChild(shell, "tutorialLeft");
664 verify(!tutorialLeft.shown);
670 verify(!tutorialLeft.shown);
665
671
666 surface.setState(Mir.MinimizedState);
672 surface.setState(Mir.MinimizedState);
667 tryCompare(inputMethod, "state", "hidden");
673 tryCompare(inputMethod, "state", "hidden");
668− verify(tutorialLeft.shown);
674+ tryCompare(tutorialLeft, "shown", false);
669 }
675 }
670
676
671 function test_accountsServiceSettings() {
677 function test_accountsServiceSettings() {
@@ -679,7 +685,7 @@ Item {
679 AccountsService.demoEdges = true;
685 AccountsService.demoEdges = true;
680 tutorialLeft = findChild(shell, "tutorialLeft");
686 tutorialLeft = findChild(shell, "tutorialLeft");
681 verify(tutorialLeft != null);
687 verify(tutorialLeft != null);
682− verify(tutorialLeft.shown);
688+ tryCompare(tutorialLeft, "shown", true);
683 }
689 }
684 }
690 }
685}
691}