@@ -110,28 +110,16 @@ StyledItem {
111 anchors { left: parent.left; right: parent.right; top: parent.top; margins: units.gu(1) }
111 anchors { left: parent.left; right: parent.right; top: parent.top; margins: units.gu(1) }
112 spacing: units.gu(1)
112 spacing: units.gu(1)
115− text: "Show Last Chance"
116− onClicked: loader.item.showLastChance()
121 text: "Hide"
115 text: "Hide"
122 onClicked: loader.item.hide()
116 onClicked: loader.item.hide()
128− onClicked: loader.item.reset()
133 text: "Show Message"
121 text: "Show Message"
134− onClicked: loader.item.showMessage(messageField.text)
122+ onClicked: LightDMService.prompts.append(messageField.text, LightDMService.prompts.Message)
136 TextField {
124 TextField {
137 id: messageField
125 id: messageField
@@ -142,7 +130,7 @@ StyledItem {
144 text: "Show Prompt"
132 text: "Show Prompt"
145− onClicked: loader.item.showPrompt(promptField.text, isSecretCheckBox.checked, isDefaultPromptCheckBox.checked)
133+ onClicked: LightDMService.prompts.append(promptField.text, isSecretCheckBox.checked ? LightDMService.prompts.Secret : LightDMService.prompts.Question)
147 TextField {
135 TextField {
148 id: promptField
136 id: promptField
@@ -155,30 +143,14 @@ StyledItem {
156 text: "secret"
144 text: "secret"
159− id: isDefaultPromptCheckBox
167− text: "Authenticated"
149+ text: "Notify Auth Failure"
168 onClicked: {
150 onClicked: {
169− if (successCheckBox.checked) {
170− loader.item.notifyAuthenticationSucceeded(false);
172− loader.item.notifyAuthenticationFailed();
151+ loader.item.notifyAuthenticationFailed();
@@ -359,12 +331,17 @@ StyledItem {
360 function init() {
332 function init() {
361 selectIndex(0); // break binding with text field
333 selectIndex(0); // break binding with text field
334+ tryCompare(LightDMService.prompts, "count", 1);
362 selectedSpy.clear();
335 selectedSpy.clear();
363 respondedSpy.clear();
336 respondedSpy.clear();
364 teaseSpy.clear();
337 teaseSpy.clear();
365 emergencySpy.clear();
338 emergencySpy.clear();
366− LightDMController.sessionMode = "full";
339+ LightDMController.reset();
367 LightDM.Sessions.iconSearchDirectories = [testIconDirectory];
340 LightDM.Sessions.iconSearchDirectories = [testIconDirectory];
342+ waitForRendering(view);
343+ var userList = findChild(view, "userList");
344+ tryCompare(userList, "movingInternally", false);
370 function cleanup() {
347 function cleanup() {
@@ -391,8 +368,14 @@ StyledItem {
393 function selectIndex(i) {
370 function selectIndex(i) {
394− view.currentIndex = i;
371+ var user = LightDM.Users.data(i, LightDM.UserRoles.NameRole);
372+ LightDM.Greeter.authenticate(user);
395 var userList = findChild(view, "userList");
374 var userList = findChild(view, "userList");
375+ var promptList = findChild(view, "promptList");
377+ view.currentIndex = i;
378+ tryCompare(promptList, "opacity", 1);
396 tryCompare(userList, "movingInternally", false);
379 tryCompare(userList, "movingInternally", false);
@@ -412,34 +395,16 @@ StyledItem {
414 function test_changingSessionSticksToUser() {
397 function test_changingSessionSticksToUser() {
415− LightDMController.sessionMode = "full";
417 var loginList = findChild(view, "loginList");
398 var loginList = findChild(view, "loginList");
418− var fakeSession1 = "ASessionWillNeverBeCalledThis";
419− var fakeSession2 = "ASessionWillAlsoNeverBeCalledThis";
421− // For this test to work, a user has to be selected and the
422− // mock must be made aware of that user
423− selectUser("has-password")
424− LightDMController.currentUsername = "has-password"
425− compare(LightDM.Sessions.count > 1, true);
426− compare(loginList.currentSession != fakeSession1, true);
427− LightDMController.sessionName = fakeSession1;
429− selectUser("has-pin")
430− LightDMController.currentUsername = "has-pin"
431− compare(loginList.currentSession != fakeSession2, true);
432− LightDMController.sessionName = fakeSession2;
434− selectUser("has-password")
400+ selectUser("invalid-session");
435− tryCompare(loginList, "currentSession", fakeSession1);
401+ tryCompare(loginList, "currentSession", "invalid");
437− selectUser("has-pin")
403+ selectUser("has-password");
438− tryCompare(loginList, "currentSession", fakeSession2);
404+ tryCompare(loginList, "currentSession", "ubuntu");
440− // Force a model reset
406+ selectUser("invalid-session")
441− LightDMController.userMode = "single";
407+ tryCompare(loginList, "currentSession", "invalid");
442− LightDMController.userMode = "full";
445 function test_tease_data() {
410 function test_tease_data() {
@@ -512,9 +477,6 @@ StyledItem {
514 function test_sessionIconNotShownWithActiveUser() {
479 function test_sessionIconNotShownWithActiveUser() {
515− LightDMController.sessionMode = "full";
516− compare(LightDM.Sessions.count > 1, true);
518 selectUser("active");
480 selectUser("active");
520 var sessionChooserButton = findChild(view, "sessionChooserButton");
482 var sessionChooserButton = findChild(view, "sessionChooserButton");
@@ -522,9 +484,6 @@ StyledItem {
524 function test_sessionIconShownWithMultipleSessions() {
486 function test_sessionIconShownWithMultipleSessions() {
525− LightDMController.sessionMode = "full";
526− compare(LightDM.Sessions.count > 1, true);
528 selectUser("has-password");
487 selectUser("has-password");
530 var sessionChooserButton = findChild(view, "sessionChooserButton");
489 var sessionChooserButton = findChild(view, "sessionChooserButton");
@@ -558,12 +517,9 @@ StyledItem {
560 function test_respondedWithPassword() {
519 function test_respondedWithPassword() {
561− view.locked = true;
520+ selectUser("has-password");
562− view.showPrompt("Prompt", true, false);
521+ var greeterPrompt = findChild(view, "greeterPrompt0");
563− var passwordInput = findChild(view, "passwordInput");
564− compare(passwordInput.text, "Prompt");
565− verify(passwordInput.isSecret);
522+ verify(greeterPrompt.isSecret);
567 typeString("password");
523 typeString("password");
568 keyClick(Qt.Key_Enter);
524 keyClick(Qt.Key_Enter);
569 compare(respondedSpy.count, 1);
525 compare(respondedSpy.count, 1);
@@ -571,12 +527,9 @@ StyledItem {
573 function test_respondedWithNonSecret() {
529 function test_respondedWithNonSecret() {
574− view.locked = true;
530+ selectUser("question-prompt");
575− view.showPrompt("otp", false, false);
531+ var greeterPrompt = findChild(view, "greeterPrompt0");
576− var passwordInput = findChild(view, "passwordInput");
577− compare(passwordInput.text, "otp");
578− verify(!passwordInput.isSecret);
532+ verify(!greeterPrompt.isSecret);
580 typeString("foo");
533 typeString("foo");
581 keyClick(Qt.Key_Enter);
534 keyClick(Qt.Key_Enter);
582 compare(respondedSpy.count, 1);
535 compare(respondedSpy.count, 1);
@@ -601,24 +554,47 @@ StyledItem {
601 tryCompare(view, "required", false);
554 tryCompare(view, "required", false);
604− function test_showMessage() {
557+ function test_infoPrompt() {
605− view.showMessage("Welcome to Unity Greeter");
558+ selectUser("info-prompt");
606− view.showMessage("<font color=\"#df382c\">This is an error</font>");
559+
607− view.showMessage("You should have seen three messages and this is a really long message too. wow so long much length");
608− var infoLabel = findChild(view, "infoLabel");
560+ var infoLabel = findChild(view, "infoLabel0");
609− compare(infoLabel.text, "Welcome to Unity Greeter<br><font color=\"#df382c\">This is an error</font><br>You should have seen three messages and this is a really long message too. wow so long much length");
561+ compare(infoLabel.text, "Welcome to Unity Greeter");
610− compare(infoLabel.textFormat, Text.StyledText);
562+ compare(infoLabel.textFormat, Text.PlainText);
564+ verify(findChild(view, "greeterPrompt1") != null);
567+ function test_longInfoPrompt() {
568+ selectUser("long-info-prompt");
570+ var infoLabel = findChild(view, "infoLabel0");
571+ compare(infoLabel.text, "Welcome to Unity Greeter\n\nWe like to annoy you with super ridiculously long messages.\nLike this one\n\nThis is the last line of a multiple line message.");
611 verify(infoLabel.contentWidth > infoLabel.width);
572 verify(infoLabel.contentWidth > infoLabel.width);
612− verify(infoLabel.opacity < 1);
573+
613− tryCompare(infoLabel, "opacity", 1);
574+ verify(findChild(view, "greeterPrompt1") != null);
577+ function test_multiInfoPrompt() {
578+ selectUser("multi-info-prompt");
580+ var infoLabel0 = findChild(view, "infoLabel0");
581+ compare(infoLabel0.text, "Welcome to Unity Greeter");
583+ var infoLabel1 = findChild(view, "infoLabel1");
584+ compare(infoLabel1.text, "This is an error");
585+ compare(infoLabel1.color, theme.palette.normal.negative);
587+ var infoLabel2 = findChild(view, "infoLabel2");
588+ compare(infoLabel2.text, "You should have seen three messages");
590+ verify(findChild(view, "greeterPrompt3") != null);
616 // Escape is used to reset the authentication, especially if PAM is unresponsive
593 // Escape is used to reset the authentication, especially if PAM is unresponsive
617 function test_escape() {
594 function test_escape() {
618− selectIndex(1);
595+ var index = selectUser("has-password");
619 selectedSpy.clear();
596 selectedSpy.clear();
620 view.locked = true;
597 view.locked = true;
621− view.showPrompt("Prompt", true, true);
622 var promptField = findChild(view, "promptField");
598 var promptField = findChild(view, "promptField");
623 tap(promptField);
599 tap(promptField);
624 verify(promptField.activeFocus);
600 verify(promptField.activeFocus);
@@ -632,9 +608,10 @@ StyledItem {
632 compare(selectedSpy.count, 0);
608 compare(selectedSpy.count, 0);
633 keyClick(Qt.Key_Escape);
609 keyClick(Qt.Key_Escape);
634 compare(selectedSpy.count, 1);
610 compare(selectedSpy.count, 1);
635− compare(selectedSpy.signalArguments[0][0], 1);
611+ compare(selectedSpy.signalArguments[0][0], index);
637− view.reset();
613+ selectIndex(index);
614+ var promptField = findChild(view, "promptField");
638 verify(promptField.activeFocus);
615 verify(promptField.activeFocus);
639 compare(promptField.opacity, 1);
616 compare(promptField.opacity, 1);
@@ -645,21 +622,22 @@ StyledItem {
645 tryCompare(label, "text", "가나다라마");
622 tryCompare(label, "text", "가나다라마");
648− function test_promptless() {
625+ function test_authError() {
649− var passwordInput = findChild(view, "passwordInput");
626+ var index = selectUser("auth-error");
650−
627+ var greeterPrompt = findChild(view, "greeterPrompt1"); // after error message
651 view.locked = true;
628 view.locked = true;
652− compare(passwordInput.text, "Retry");
629+ compare(greeterPrompt.text, "Retry");
653− tap(passwordInput);
630+ tap(greeterPrompt);
654 compare(respondedSpy.count, 0);
631 compare(respondedSpy.count, 0);
655 compare(selectedSpy.count, 1);
632 compare(selectedSpy.count, 1);
656− compare(selectedSpy.signalArguments[0][0], 0);
633+ compare(selectedSpy.signalArguments[0][0], index);
657− selectedSpy.clear();
634+ }
659− view.reset();
636+ function test_noPassword() {
660− view.locked = false;
637+ selectUser("no-password");
638+ var greeterPrompt = findChild(view, "greeterPrompt0");
661− compare(passwordInput.text, "Log In");
639+ compare(greeterPrompt.text, "Log In");
662− tap(passwordInput);
640+ tap(greeterPrompt);
663 compare(selectedSpy.count, 0);
641 compare(selectedSpy.count, 0);
664 compare(respondedSpy.count, 1);
642 compare(respondedSpy.count, 1);
665 compare(respondedSpy.signalArguments[0][0], "");
643 compare(respondedSpy.signalArguments[0][0], "");
@@ -691,8 +669,8 @@ StyledItem {
693 function test_passphrase() {
671 function test_passphrase() {
672+ var index = selectUser("has-password");
694 var promptField = findChild(view, "promptField");
673 var promptField = findChild(view, "promptField");
695− view.showPrompt("", true, true);
697 verify(view.alphanumeric);
675 verify(view.alphanumeric);
698 compare(promptField.inputMethodHints & Qt.ImhDigitsOnly, 0);
676 compare(promptField.inputMethodHints & Qt.ImhDigitsOnly, 0);
@@ -702,8 +680,8 @@ StyledItem {
704 function test_passcode() {
682 function test_passcode() {
683+ var index = selectUser("has-pin");
705 var promptField = findChild(view, "promptField");
684 var promptField = findChild(view, "promptField");
706− view.showPrompt("", true, true);
708 view.alphanumeric = false;
686 view.alphanumeric = false;
709 compare(promptField.inputMethodHints & Qt.ImhDigitsOnly, Qt.ImhDigitsOnly);
687 compare(promptField.inputMethodHints & Qt.ImhDigitsOnly, Qt.ImhDigitsOnly);
@@ -737,42 +715,44 @@ StyledItem {
739 function test_focusStaysActive() {
717 function test_focusStaysActive() {
740− var promptField = findChild(view, "promptField");
718+ selectUser("no-password");
741− var promptButton = findChild(view, "promptButton");
719+ var greeterPrompt = findChild(view, "greeterPrompt0");
743− verify(promptButton.activeFocus);
720+ verify(greeterPrompt.activeFocus);
744 keyClick(Qt.Key_Enter);
721 keyClick(Qt.Key_Enter);
745 compare(selectedSpy.count, 0);
722 compare(selectedSpy.count, 0);
746 compare(respondedSpy.count, 1);
723 compare(respondedSpy.count, 1);
747 compare(respondedSpy.signalArguments[0][0], "");
724 compare(respondedSpy.signalArguments[0][0], "");
748− verify(promptButton.activeFocus);
725+ verify(greeterPrompt.activeFocus);
749 keyClick(Qt.Key_Enter);
726 keyClick(Qt.Key_Enter);
750 compare(respondedSpy.count, 1);
727 compare(respondedSpy.count, 1);
752− view.showPrompt("", true, true);
729+ selectUser("has-password");
730+ var greeterPrompt = findChild(view, "greeterPrompt0");
753− verify(promptField.activeFocus);
731+ verify(greeterPrompt.activeFocus);
754 keyClick(Qt.Key_D);
732 keyClick(Qt.Key_D);
755 keyClick(Qt.Key_Enter);
733 keyClick(Qt.Key_Enter);
756 compare(selectedSpy.count, 0);
734 compare(selectedSpy.count, 0);
757 compare(respondedSpy.count, 2);
735 compare(respondedSpy.count, 2);
758 compare(respondedSpy.signalArguments[1][0], "d");
736 compare(respondedSpy.signalArguments[1][0], "d");
759− verify(promptField.activeFocus);
737+ verify(greeterPrompt.activeFocus);
760 keyClick(Qt.Key_Enter);
738 keyClick(Qt.Key_Enter);
761 compare(respondedSpy.count, 2);
739 compare(respondedSpy.count, 2);
763− view.reset();
741+ var index = selectUser("no-password");
742+ var greeterPrompt = findChild(view, "greeterPrompt0");
764 view.locked = true;
743 view.locked = true;
765− verify(promptButton.activeFocus);
744+ verify(greeterPrompt.activeFocus);
766 keyClick(Qt.Key_Enter);
745 keyClick(Qt.Key_Enter);
767 compare(respondedSpy.count, 2);
746 compare(respondedSpy.count, 2);
768 compare(selectedSpy.count, 1);
747 compare(selectedSpy.count, 1);
769− compare(selectedSpy.signalArguments[0][0], 0);
748+ compare(selectedSpy.signalArguments[0][0], index);
770− verify(promptButton.activeFocus);
749+ verify(greeterPrompt.activeFocus);
771 keyClick(Qt.Key_Enter);
750 keyClick(Qt.Key_Enter);
772 compare(selectedSpy.count, 1);
751 compare(selectedSpy.count, 1);
774− view.showPrompt("", true, true);
753+ selectUser("no-password");
754+ var greeterPrompt = findChild(view, "greeterPrompt0");
775− verify(promptField.activeFocus);
755+ verify(greeterPrompt.activeFocus);