@@ -110,28 +110,16 @@ StyledItem {
110110 Column {
111111 anchors { left: parent.left; right: parent.right; top: parent.top; margins: units.gu(1) }
112112 spacing: units.gu(1)
113− Row {
114− Button {
115− text: "Show Last Chance"
116− onClicked: loader.item.showLastChance()
117− }
118− }
119113 Row {
120114 Button {
121115 text: "Hide"
122116 onClicked: loader.item.hide()
123117 }
124118 }
125− Row {
126− Button {
127− text: "Reset"
128− onClicked: loader.item.reset()
129− }
130− }
131119 Row {
132120 Button {
133121 text: "Show Message"
134− onClicked: loader.item.showMessage(messageField.text)
122+ onClicked: LightDMService.prompts.append(messageField.text, LightDMService.prompts.Message)
135123 }
136124 TextField {
137125 id: messageField
@@ -142,7 +130,7 @@ StyledItem {
142130 Row {
143131 Button {
144132 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)
146134 }
147135 TextField {
148136 id: promptField
@@ -155,30 +143,14 @@ StyledItem {
155143 Label {
156144 text: "secret"
157145 }
158− CheckBox {
159− id: isDefaultPromptCheckBox
160− }
161− Label {
162− text: "default"
163− }
164146 }
165147 Row {
166148 Button {
167− text: "Authenticated"
149+ text: "Notify Auth Failure"
168150 onClicked: {
169− if (successCheckBox.checked) {
170− loader.item.notifyAuthenticationSucceeded(false);
171− } else {
172− loader.item.notifyAuthenticationFailed();
173− }
151+ loader.item.notifyAuthenticationFailed();
174152 }
175153 }
176− CheckBox {
177− id: successCheckBox
178− }
179− Label {
180− text: "success"
181− }
182154 }
183155 Row {
184156 Button {
@@ -359,12 +331,17 @@ StyledItem {
359331
360332 function init() {
361333 selectIndex(0); // break binding with text field
334+ tryCompare(LightDMService.prompts, "count", 1);
362335 selectedSpy.clear();
363336 respondedSpy.clear();
364337 teaseSpy.clear();
365338 emergencySpy.clear();
366− LightDMController.sessionMode = "full";
339+ LightDMController.reset();
367340 LightDM.Sessions.iconSearchDirectories = [testIconDirectory];
341+
342+ waitForRendering(view);
343+ var userList = findChild(view, "userList");
344+ tryCompare(userList, "movingInternally", false);
368345 }
369346
370347 function cleanup() {
@@ -391,8 +368,14 @@ StyledItem {
391368 }
392369
393370 function selectIndex(i) {
394− view.currentIndex = i;
371+ var user = LightDM.Users.data(i, LightDM.UserRoles.NameRole);
372+ LightDM.Greeter.authenticate(user);
373+
395374 var userList = findChild(view, "userList");
375+ var promptList = findChild(view, "promptList");
376+
377+ view.currentIndex = i;
378+ tryCompare(promptList, "opacity", 1);
396379 tryCompare(userList, "movingInternally", false);
397380 }
398381
@@ -412,34 +395,16 @@ StyledItem {
412395 }
413396
414397 function test_changingSessionSticksToUser() {
415− LightDMController.sessionMode = "full";
416−
417398 var loginList = findChild(view, "loginList");
418− var fakeSession1 = "ASessionWillNeverBeCalledThis";
419− var fakeSession2 = "ASessionWillAlsoNeverBeCalledThis";
420−
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;
428−
429− selectUser("has-pin")
430− LightDMController.currentUsername = "has-pin"
431− compare(loginList.currentSession != fakeSession2, true);
432− LightDMController.sessionName = fakeSession2;
433399
434− selectUser("has-password")
435− tryCompare(loginList, "currentSession", fakeSession1);
400+ selectUser("invalid-session");
401+ tryCompare(loginList, "currentSession", "invalid");
436402
437− selectUser("has-pin")
438− tryCompare(loginList, "currentSession", fakeSession2);
403+ selectUser("has-password");
404+ tryCompare(loginList, "currentSession", "ubuntu");
439405
440− // Force a model reset
441− LightDMController.userMode = "single";
442− LightDMController.userMode = "full";
406+ selectUser("invalid-session")
407+ tryCompare(loginList, "currentSession", "invalid");
443408 }
444409
445410 function test_tease_data() {
@@ -512,9 +477,6 @@ StyledItem {
512477 }
513478
514479 function test_sessionIconNotShownWithActiveUser() {
515− LightDMController.sessionMode = "full";
516− compare(LightDM.Sessions.count > 1, true);
517−
518480 selectUser("active");
519481
520482 var sessionChooserButton = findChild(view, "sessionChooserButton");
@@ -522,9 +484,6 @@ StyledItem {
522484 }
523485
524486 function test_sessionIconShownWithMultipleSessions() {
525− LightDMController.sessionMode = "full";
526− compare(LightDM.Sessions.count > 1, true);
527−
528487 selectUser("has-password");
529488
530489 var sessionChooserButton = findChild(view, "sessionChooserButton");
@@ -558,12 +517,9 @@ StyledItem {
558517 }
559518
560519 function test_respondedWithPassword() {
561− view.locked = true;
562− view.showPrompt("Prompt", true, false);
563− var passwordInput = findChild(view, "passwordInput");
564− compare(passwordInput.text, "Prompt");
565− verify(passwordInput.isSecret);
566− tap(passwordInput);
520+ selectUser("has-password");
521+ var greeterPrompt = findChild(view, "greeterPrompt0");
522+ verify(greeterPrompt.isSecret);
567523 typeString("password");
568524 keyClick(Qt.Key_Enter);
569525 compare(respondedSpy.count, 1);
@@ -571,12 +527,9 @@ StyledItem {
571527 }
572528
573529 function test_respondedWithNonSecret() {
574− view.locked = true;
575− view.showPrompt("otp", false, false);
576− var passwordInput = findChild(view, "passwordInput");
577− compare(passwordInput.text, "otp");
578− verify(!passwordInput.isSecret);
579− tap(passwordInput);
530+ selectUser("question-prompt");
531+ var greeterPrompt = findChild(view, "greeterPrompt0");
532+ verify(!greeterPrompt.isSecret);
580533 typeString("foo");
581534 keyClick(Qt.Key_Enter);
582535 compare(respondedSpy.count, 1);
@@ -601,24 +554,47 @@ StyledItem {
601554 tryCompare(view, "required", false);
602555 }
603556
604− function test_showMessage() {
605− view.showMessage("Welcome to Unity Greeter");
606− view.showMessage("<font color=\"#df382c\">This is an error</font>");
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");
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");
610− compare(infoLabel.textFormat, Text.StyledText);
557+ function test_infoPrompt() {
558+ selectUser("info-prompt");
559+
560+ var infoLabel = findChild(view, "infoLabel0");
561+ compare(infoLabel.text, "Welcome to Unity Greeter");
562+ compare(infoLabel.textFormat, Text.PlainText);
563+
564+ verify(findChild(view, "greeterPrompt1") != null);
565+ }
566+
567+ function test_longInfoPrompt() {
568+ selectUser("long-info-prompt");
569+
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.");
611572 verify(infoLabel.contentWidth > infoLabel.width);
612− verify(infoLabel.opacity < 1);
613− tryCompare(infoLabel, "opacity", 1);
573+
574+ verify(findChild(view, "greeterPrompt1") != null);
575+ }
576+
577+ function test_multiInfoPrompt() {
578+ selectUser("multi-info-prompt");
579+
580+ var infoLabel0 = findChild(view, "infoLabel0");
581+ compare(infoLabel0.text, "Welcome to Unity Greeter");
582+
583+ var infoLabel1 = findChild(view, "infoLabel1");
584+ compare(infoLabel1.text, "This is an error");
585+ compare(infoLabel1.color, theme.palette.normal.negative);
586+
587+ var infoLabel2 = findChild(view, "infoLabel2");
588+ compare(infoLabel2.text, "You should have seen three messages");
589+
590+ verify(findChild(view, "greeterPrompt3") != null);
614591 }
615592
616593 // Escape is used to reset the authentication, especially if PAM is unresponsive
617594 function test_escape() {
618− selectIndex(1);
595+ var index = selectUser("has-password");
619596 selectedSpy.clear();
620597 view.locked = true;
621− view.showPrompt("Prompt", true, true);
622598 var promptField = findChild(view, "promptField");
623599 tap(promptField);
624600 verify(promptField.activeFocus);
@@ -632,9 +608,10 @@ StyledItem {
632608 compare(selectedSpy.count, 0);
633609 keyClick(Qt.Key_Escape);
634610 compare(selectedSpy.count, 1);
635− compare(selectedSpy.signalArguments[0][0], 1);
611+ compare(selectedSpy.signalArguments[0][0], index);
636612
637− view.reset();
613+ selectIndex(index);
614+ var promptField = findChild(view, "promptField");
638615 verify(promptField.activeFocus);
639616 compare(promptField.opacity, 1);
640617 }
@@ -645,21 +622,22 @@ StyledItem {
645622 tryCompare(label, "text", "가나다라마");
646623 }
647624
648− function test_promptless() {
649− var passwordInput = findChild(view, "passwordInput");
650−
625+ function test_authError() {
626+ var index = selectUser("auth-error");
627+ var greeterPrompt = findChild(view, "greeterPrompt1"); // after error message
651628 view.locked = true;
652− compare(passwordInput.text, "Retry");
653− tap(passwordInput);
629+ compare(greeterPrompt.text, "Retry");
630+ tap(greeterPrompt);
654631 compare(respondedSpy.count, 0);
655632 compare(selectedSpy.count, 1);
656− compare(selectedSpy.signalArguments[0][0], 0);
657− selectedSpy.clear();
633+ compare(selectedSpy.signalArguments[0][0], index);
634+ }
658635
659− view.reset();
660− view.locked = false;
661− compare(passwordInput.text, "Log In");
662− tap(passwordInput);
636+ function test_noPassword() {
637+ selectUser("no-password");
638+ var greeterPrompt = findChild(view, "greeterPrompt0");
639+ compare(greeterPrompt.text, "Log In");
640+ tap(greeterPrompt);
663641 compare(selectedSpy.count, 0);
664642 compare(respondedSpy.count, 1);
665643 compare(respondedSpy.signalArguments[0][0], "");
@@ -691,8 +669,8 @@ StyledItem {
691669 }
692670
693671 function test_passphrase() {
672+ var index = selectUser("has-password");
694673 var promptField = findChild(view, "promptField");
695− view.showPrompt("", true, true);
696674
697675 verify(view.alphanumeric);
698676 compare(promptField.inputMethodHints & Qt.ImhDigitsOnly, 0);
@@ -702,8 +680,8 @@ StyledItem {
702680 }
703681
704682 function test_passcode() {
683+ var index = selectUser("has-pin");
705684 var promptField = findChild(view, "promptField");
706− view.showPrompt("", true, true);
707685
708686 view.alphanumeric = false;
709687 compare(promptField.inputMethodHints & Qt.ImhDigitsOnly, Qt.ImhDigitsOnly);
@@ -737,42 +715,44 @@ StyledItem {
737715 }
738716
739717 function test_focusStaysActive() {
740− var promptField = findChild(view, "promptField");
741− var promptButton = findChild(view, "promptButton");
742−
743− verify(promptButton.activeFocus);
718+ selectUser("no-password");
719+ var greeterPrompt = findChild(view, "greeterPrompt0");
720+ verify(greeterPrompt.activeFocus);
744721 keyClick(Qt.Key_Enter);
745722 compare(selectedSpy.count, 0);
746723 compare(respondedSpy.count, 1);
747724 compare(respondedSpy.signalArguments[0][0], "");
748− verify(promptButton.activeFocus);
725+ verify(greeterPrompt.activeFocus);
749726 keyClick(Qt.Key_Enter);
750727 compare(respondedSpy.count, 1);
751728
752− view.showPrompt("", true, true);
753− verify(promptField.activeFocus);
729+ selectUser("has-password");
730+ var greeterPrompt = findChild(view, "greeterPrompt0");
731+ verify(greeterPrompt.activeFocus);
754732 keyClick(Qt.Key_D);
755733 keyClick(Qt.Key_Enter);
756734 compare(selectedSpy.count, 0);
757735 compare(respondedSpy.count, 2);
758736 compare(respondedSpy.signalArguments[1][0], "d");
759− verify(promptField.activeFocus);
737+ verify(greeterPrompt.activeFocus);
760738 keyClick(Qt.Key_Enter);
761739 compare(respondedSpy.count, 2);
762740
763− view.reset();
741+ var index = selectUser("no-password");
742+ var greeterPrompt = findChild(view, "greeterPrompt0");
764743 view.locked = true;
765− verify(promptButton.activeFocus);
744+ verify(greeterPrompt.activeFocus);
766745 keyClick(Qt.Key_Enter);
767746 compare(respondedSpy.count, 2);
768747 compare(selectedSpy.count, 1);
769− compare(selectedSpy.signalArguments[0][0], 0);
770− verify(promptButton.activeFocus);
748+ compare(selectedSpy.signalArguments[0][0], index);
749+ verify(greeterPrompt.activeFocus);
771750 keyClick(Qt.Key_Enter);
772751 compare(selectedSpy.count, 1);
773752
774− view.showPrompt("", true, true);
775− verify(promptField.activeFocus);
753+ selectUser("no-password");
754+ var greeterPrompt = findChild(view, "greeterPrompt0");
755+ verify(greeterPrompt.activeFocus);
776756 }
777757 }
778758}