@@ -558,12 +558,12 @@ Rectangle {
559 property Item shell: shellLoader.status === Loader.Ready ? shellLoader.item : null
559 property Item shell: shellLoader.status === Loader.Ready ? shellLoader.item : null
561+ function initTestCase() {
561 function init() {
565 function init() {
562− if (shellLoader.active) {
566+ mouseMove(root, 0, 0);
563− // happens for the very first test function as shell
564− // is loaded by default
569 function cleanup() {
569 function cleanup() {
@@ -679,6 +679,103 @@ Rectangle {
679 tryCompareFunction(function() { return root.topLevelSurfaceList.inputMethodSurface !== null }, true);
679 tryCompareFunction(function() { return root.topLevelSurfaceList.inputMethodSurface !== null }, true);
682+ function addSnapDecisionNotification() {
684+ type: Notification.SnapDecision,
685+ hints: {"x-canonical-private-affirmative-tint": "true"},
687+ body: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.",
688+ icon: Qt.resolvedUrl("../graphics/avatars/funky.png"),
689+ secondaryIcon: Qt.resolvedUrl("../graphics/applicationIcons/facebook.png"),
690+ actions: [{ id: "ok_id", label: "Ok"},
691+ { id: "cancel_id", label: "Cancel"},
692+ { id: "notreally_id", label: "Not really"},
693+ { id: "noway_id", label: "messages:No way"},
694+ { id: "nada_id", label: "messages:Nada"}]
697+ mockNotificationsModel.append(n)
700+ function swipeAwayGreeter() {
701+ var greeter = findChild(shell, "greeter");
703+ if (!greeter.shown) {
704+ console.log("Greeter not shown. Not swiping.");
708+ tryCompare(greeter, "fullyShown", true);
709+ waitForGreeterToStabilize();
710+ removeTimeConstraintsFromSwipeAreas(greeter);
712+ var touchX = shell.width - (shell.edgeSize / 2);
713+ var touchY = shell.height / 2;
714+ touchFlick(shell, touchX, touchY, shell.width * 0.1, touchY);
716+ // wait until the animation has finished
717+ tryCompare(greeter, "shown", false);
718+ waitForRendering(greeter);
721+ function selectUserAtIndex(i) {
722+ // We could be anywhere in list; find target index to know which direction
723+ var greeter = findChild(shell, "greeter")
724+ var userlist = findChild(greeter, "userList")
725+ if (userlist.currentIndex == i)
726+ keyClick(Qt.Key_Escape) // Reset state if we're not moving
727+ while (userlist.currentIndex != i) {
728+ var next = userlist.currentIndex + 1
729+ var key = Qt.Key_Down;
730+ if (userlist.currentIndex > i) {
731+ next = userlist.currentIndex - 1
735+ tryCompare(userlist, "currentIndex", next)
737+ tryCompare(userlist, "movingInternally", false);
738+ tryCompare(shell, "waitingOnGreeter", false); // wait for PAM to settle
741+ function selectUser(name) {
742+ // Find index of user with the right name
743+ for (var i = 0; i < LightDM.Users.count; i++) {
744+ if (LightDM.Users.data(i, LightDM.UserRoles.NameRole) == name) {
748+ if (i == LightDM.Users.count) {
749+ fail("Didn't find name")
752+ selectUserAtIndex(i)
756+ function clickPasswordInput(isButton) {
757+ var greeter = findChild(shell, "greeter")
758+ tryCompare(greeter, "fullyShown", true);
760+ var promptButton = findChild(greeter, "promptButton");
761+ tryCompare(promptButton, "visible", isButton);
763+ var promptField = findChild(greeter, "promptField");
764+ tryCompare(promptField, "visible", !isButton);
766+ mouseClick(promptButton);
769+ function confirmLoggedIn(loggedIn) {
770+ var greeter = findChild(shell, "greeter");
771+ tryCompare(greeter, "shown", loggedIn ? false : true);
772+ verify(loggedIn ? sessionSpy.count > 0 : sessionSpy.count === 0);
775+ function setLightDMMockMode(mode) {
776+ LightDMController.userMode = mode;
682 function test_snapDecisionDismissalReturnsFocus() {
779 function test_snapDecisionDismissalReturnsFocus() {
683 loadShell("phone");
780 loadShell("phone");
684 swipeAwayGreeter();
781 swipeAwayGreeter();
@@ -722,24 +819,6 @@ Rectangle {
722 compare(stage.interactive, true, "Stages not interactive again after modal notification has closed");
819 compare(stage.interactive, true, "Stages not interactive again after modal notification has closed");
725− function addSnapDecisionNotification() {
727− type: Notification.SnapDecision,
728− hints: {"x-canonical-private-affirmative-tint": "true"},
730− body: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.",
731− icon: Qt.resolvedUrl("../graphics/avatars/funky.png"),
732− secondaryIcon: Qt.resolvedUrl("../graphics/applicationIcons/facebook.png"),
733− actions: [{ id: "ok_id", label: "Ok"},
734− { id: "cancel_id", label: "Cancel"},
735− { id: "notreally_id", label: "Not really"},
736− { id: "noway_id", label: "messages:No way"},
737− { id: "nada_id", label: "messages:Nada"}]
740− mockNotificationsModel.append(n)
743 function test_suspend() {
822 function test_suspend() {
744 loadShell("phone");
823 loadShell("phone");
745 swipeAwayGreeter();
824 swipeAwayGreeter();
@@ -810,86 +889,6 @@ Rectangle {
814− function swipeAwayGreeter() {
815− var greeter = findChild(shell, "greeter");
817− if (!greeter.shown) {
818− console.log("Greeter not shown. Not swiping.");
822− tryCompare(greeter, "fullyShown", true);
823− waitForGreeterToStabilize();
824− removeTimeConstraintsFromSwipeAreas(greeter);
826− var touchX = shell.width - (shell.edgeSize / 2);
827− var touchY = shell.height / 2;
828− touchFlick(shell, touchX, touchY, shell.width * 0.1, touchY);
830− // wait until the animation has finished
831− tryCompare(greeter, "shown", false);
832− waitForRendering(greeter);
835− function selectUserAtIndex(i) {
836− // We could be anywhere in list; find target index to know which direction
837− var greeter = findChild(shell, "greeter")
838− var userlist = findChild(greeter, "userList")
839− if (userlist.currentIndex == i)
840− keyClick(Qt.Key_Escape) // Reset state if we're not moving
841− while (userlist.currentIndex != i) {
842− var next = userlist.currentIndex + 1
843− var key = Qt.Key_Down;
844− if (userlist.currentIndex > i) {
845− next = userlist.currentIndex - 1
849− tryCompare(userlist, "currentIndex", next)
851− tryCompare(userlist, "movingInternally", false);
852− tryCompare(shell, "waitingOnGreeter", false); // wait for PAM to settle
855− function selectUser(name) {
856− // Find index of user with the right name
857− for (var i = 0; i < LightDM.Users.count; i++) {
858− if (LightDM.Users.data(i, LightDM.UserRoles.NameRole) == name) {
862− if (i == LightDM.Users.count) {
863− fail("Didn't find name")
866− selectUserAtIndex(i)
870− function clickPasswordInput(isButton) {
871− var greeter = findChild(shell, "greeter")
872− tryCompare(greeter, "fullyShown", true);
874− var promptButton = findChild(greeter, "promptButton");
875− tryCompare(promptButton, "visible", isButton);
877− var promptField = findChild(greeter, "promptField");
878− tryCompare(promptField, "visible", !isButton);
880− mouseClick(promptButton);
883− function confirmLoggedIn(loggedIn) {
884− var greeter = findChild(shell, "greeter");
885− tryCompare(greeter, "shown", loggedIn ? false : true);
886− verify(loggedIn ? sessionSpy.count > 0 : sessionSpy.count === 0);
889− function setLightDMMockMode(mode) {
890− LightDMController.userMode = mode;
893 function test_showInputMethod() {
892 function test_showInputMethod() {
894 loadShell("phone");
893 loadShell("phone");
895 swipeAwayGreeter();
894 swipeAwayGreeter();
@@ -1691,26 +1690,26 @@ Rectangle {
1691 keyRelease(Qt.Key_Alt);
1690 keyRelease(Qt.Key_Alt);
1694− function otest_highlightFollowsMouse() {
1693+ function test_highlightFollowsMouse() {
1695 loadDesktopShellWithApps()
1694 loadDesktopShellWithApps()
1697− var spreadRepeater = findInvisibleChild(shell, "spreadRepeater");
1696+ var spreadItem = findChild(shell, "spreadItem");
1698− verify(spreadRepeater !== null);
1697+ verify(spreadItem !== null);
1700 keyPress(Qt.Key_Alt)
1699 keyPress(Qt.Key_Alt)
1701 keyClick(Qt.Key_Tab);
1700 keyClick(Qt.Key_Tab);
1703− tryCompare(spreadRepeater, "highlightedIndex", 1);
1702+ tryCompare(spreadItem, "highlightedIndex", 1);
1705 var x = 0;
1704 var x = 0;
1706 var y = shell.height * .75;
1705 var y = shell.height * .75;
1707 mouseMove(shell, x, y)
1706 mouseMove(shell, x, y)
1709 for (var i = 0; i < 7; i++) {
1708 for (var i = 0; i < 7; i++) {
1710− while (spreadRepeater.highlightedIndex != i && x <= 4000) {
1709+ while (spreadItem.highlightedIndex != i && x <= 4000) {
1712 mouseMove(shell, x, y)
1711 mouseMove(shell, x, y)
1713− wait(0); // spin the loop so bindings get evaluated
1712+ wait(10); // spin the loop so bindings get evaluated
@@ -1742,7 +1741,7 @@ Rectangle {
1742 while (spreadItem.highlightedIndex !== 2 && x <= 4000) {
1741 while (spreadItem.highlightedIndex !== 2 && x <= 4000) {
1744 mouseMove(shell, x, y)
1743 mouseMove(shell, x, y)
1745− wait(0); // spin the loop so bindings get evaluated
1744+ wait(1); // spin the loop so bindings get evaluated
1747 tryCompare(closeMouseArea, "enabled", true)
1746 tryCompare(closeMouseArea, "enabled", true)
@@ -1750,7 +1749,10 @@ Rectangle {
1750 verify(topLevelSurfaceList.indexForId(surfaceId) === 2);
1749 verify(topLevelSurfaceList.indexForId(surfaceId) === 2);
1752 // Close the app using the close button
1751 // Close the app using the close button
1752+ // The button doesn't appear until the mouse is over the surface
1753+ mouseMove(closeMouseArea, closeMouseArea.width / 2, closeMouseArea.height / 2, 10);
1754+ tryCompare(closeMouseArea, "visible", true);
1753− mouseClick(closeMouseArea, closeMouseArea.width / 2, closeMouseArea.height / 2)
1755+ mouseClick(closeMouseArea, closeMouseArea.width / 2, closeMouseArea.height / 2);
1755 tryCompare(topLevelSurfaceList, "count", countBeforeClickingCloseButton - 1);
1757 tryCompare(topLevelSurfaceList, "count", countBeforeClickingCloseButton - 1);
1756 verify(topLevelSurfaceList.indexForId(surfaceId) === -1);
1758 verify(topLevelSurfaceList.indexForId(surfaceId) === -1);
@@ -1791,7 +1793,7 @@ Rectangle {
1791 while (spreadItem.highlightedIndex !== 2 && x <= 4000) {
1793 while (spreadItem.highlightedIndex !== 2 && x <= 4000) {
1793 mouseMove(shell, x, y)
1795 mouseMove(shell, x, y)
1794− wait(0); // spin the loop so bindings get evaluated
1796+ wait(1); // spin the loop so bindings get evaluated
1796 tryCompare(decoratedWindow, "showHighlight", true);
1798 tryCompare(decoratedWindow, "showHighlight", true);
@@ -1811,21 +1813,22 @@ Rectangle {
1811 var appRepeater = findInvisibleChild(shell, "appRepeater");
1813 var appRepeater = findInvisibleChild(shell, "appRepeater");
1812 verify(appRepeater !== null);
1814 verify(appRepeater !== null);
1814− keyPress(Qt.Key_Alt)
1816+ keyPress(Qt.Key_Alt);
1815 keyClick(Qt.Key_Tab);
1817 keyClick(Qt.Key_Tab);
1817− var spreadFlickable = findChild(shell, "spreadFlickable")
1819+ var spreadFlickable = findChild(shell, "spreadFlickable");
1820+ waitForRendering(spreadFlickable);
1819 compare(spreadFlickable.contentX, 0);
1822 compare(spreadFlickable.contentX, 0);
1821 // Move the mouse to the right and make sure it scrolls the Flickable
1824 // Move the mouse to the right and make sure it scrolls the Flickable
1822 var x = 0;
1825 var x = 0;
1823− var y = shell.height * .5
1826+ var y = shell.height * .5;
1824 mouseMove(shell, x, y)
1827 mouseMove(shell, x, y)
1825 while (x <= shell.width) {
1828 while (x <= shell.width) {
1827− mouseMove(shell, x, y)
1830+ mouseMove(shell, x, y);
1828− wait(0); // spin the loop so bindings get evaluated
1831+ wait(1); // spin the loop so bindings get evaluated
1830 tryCompare(spreadFlickable, "contentX", spreadFlickable.contentWidth - spreadFlickable.width);
1833 tryCompare(spreadFlickable, "contentX", spreadFlickable.contentWidth - spreadFlickable.width);
@@ -1833,7 +1836,7 @@ Rectangle {
1833 while (x > 0) {
1836 while (x > 0) {
1835 mouseMove(shell, x, y)
1838 mouseMove(shell, x, y)
1836− wait(0); // spin the loop so bindings get evaluated
1839+ wait(1); // spin the loop so bindings get evaluated
1838 tryCompare(spreadFlickable, "contentX", 0);
1841 tryCompare(spreadFlickable, "contentX", 0);