@@ -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,6 +331,7 @@ 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();
@@ -391,8 +364,17 @@ StyledItem {
391364 }
392365
393366 function selectIndex(i) {
394− view.currentIndex = i;
367+ var user = LightDM.Users.data(i, LightDM.UserRoles.NameRole);
368+ LightDM.Greeter.authenticate(user);
369+
370+ if (view.currentIndex == i)
371+ return;
372+
395373 var userList = findChild(view, "userList");
374+ var promptList = findChild(view, "promptList");
375+
376+ view.currentIndex = i;
377+ tryCompare(promptList, "opacity", 1);
396378 tryCompare(userList, "movingInternally", false);
397379 }
398380
@@ -527,12 +509,9 @@ StyledItem {
527509 }
528510
529511 function test_respondedWithPassword() {
530− view.locked = true;
531− view.showPrompt("Prompt", true, false);
532− var passwordInput = findChild(view, "passwordInput");
533− compare(passwordInput.text, "Prompt");
534− verify(passwordInput.isSecret);
535− tap(passwordInput);
512+ selectUser("has-password");
513+ var greeterPrompt = findChild(view, "greeterPrompt0");
514+ verify(greeterPrompt.isSecret);
536515 typeString("password");
537516 keyClick(Qt.Key_Enter);
538517 compare(respondedSpy.count, 1);
@@ -540,12 +519,9 @@ StyledItem {
540519 }
541520
542521 function test_respondedWithNonSecret() {
543− view.locked = true;
544− view.showPrompt("otp", false, false);
545− var passwordInput = findChild(view, "passwordInput");
546− compare(passwordInput.text, "otp");
547− verify(!passwordInput.isSecret);
548− tap(passwordInput);
522+ selectUser("question-prompt");
523+ var greeterPrompt = findChild(view, "greeterPrompt0");
524+ verify(!greeterPrompt.isSecret);
549525 typeString("foo");
550526 keyClick(Qt.Key_Enter);
551527 compare(respondedSpy.count, 1);
@@ -570,24 +546,47 @@ StyledItem {
570546 tryCompare(view, "required", false);
571547 }
572548
573− function test_showMessage() {
574− view.showMessage("Welcome to Unity Greeter");
575− view.showMessage("<font color=\"#df382c\">This is an error</font>");
576− view.showMessage("You should have seen three messages and this is a really long message too. wow so long much length");
577− var infoLabel = findChild(view, "infoLabel");
578− 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");
579− compare(infoLabel.textFormat, Text.StyledText);
549+ function test_infoPrompt() {
550+ selectUser("info-prompt");
551+
552+ var infoLabel = findChild(view, "infoLabel0");
553+ compare(infoLabel.text, "Welcome to Unity Greeter");
554+ compare(infoLabel.textFormat, Text.PlainText);
555+
556+ verify(findChild(view, "greeterPrompt1") != null);
557+ }
558+
559+ function test_longInfoPrompt() {
560+ selectUser("long-info-prompt");
561+
562+ var infoLabel = findChild(view, "infoLabel0");
563+ 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.");
580564 verify(infoLabel.contentWidth > infoLabel.width);
581− verify(infoLabel.opacity < 1);
582− tryCompare(infoLabel, "opacity", 1);
565+
566+ verify(findChild(view, "greeterPrompt1") != null);
567+ }
568+
569+ function test_multiInfoPrompt() {
570+ selectUser("multi-info-prompt");
571+
572+ var infoLabel0 = findChild(view, "infoLabel0");
573+ compare(infoLabel0.text, "Welcome to Unity Greeter");
574+
575+ var infoLabel1 = findChild(view, "infoLabel1");
576+ compare(infoLabel1.text, "This is an error");
577+ compare(infoLabel1.color, theme.palette.normal.negative);
578+
579+ var infoLabel2 = findChild(view, "infoLabel2");
580+ compare(infoLabel2.text, "You should have seen three messages");
581+
582+ verify(findChild(view, "greeterPrompt3") != null);
583583 }
584584
585585 // Escape is used to reset the authentication, especially if PAM is unresponsive
586586 function test_escape() {
587− selectIndex(1);
587+ var index = selectUser("has-password");
588588 selectedSpy.clear();
589589 view.locked = true;
590− view.showPrompt("Prompt", true, true);
591590 var promptField = findChild(view, "promptField");
592591 tap(promptField);
593592 verify(promptField.activeFocus);
@@ -601,9 +600,10 @@ StyledItem {
601600 compare(selectedSpy.count, 0);
602601 keyClick(Qt.Key_Escape);
603602 compare(selectedSpy.count, 1);
604− compare(selectedSpy.signalArguments[0][0], 1);
603+ compare(selectedSpy.signalArguments[0][0], index);
605604
606− view.reset();
605+ selectIndex(index);
606+ var promptField = findChild(view, "promptField");
607607 verify(promptField.activeFocus);
608608 compare(promptField.opacity, 1);
609609 }
@@ -614,21 +614,22 @@ StyledItem {
614614 tryCompare(label, "text", "가나다라마");
615615 }
616616
617− function test_promptless() {
618− var passwordInput = findChild(view, "passwordInput");
619−
617+ function test_authError() {
618+ var index = selectUser("auth-error");
619+ var greeterPrompt = findChild(view, "greeterPrompt1"); // after error message
620620 view.locked = true;
621− compare(passwordInput.text, "Retry");
622− tap(passwordInput);
621+ compare(greeterPrompt.text, "Retry");
622+ tap(greeterPrompt);
623623 compare(respondedSpy.count, 0);
624624 compare(selectedSpy.count, 1);
625− compare(selectedSpy.signalArguments[0][0], 0);
626− selectedSpy.clear();
625+ compare(selectedSpy.signalArguments[0][0], index);
626+ }
627627
628− view.reset();
629− view.locked = false;
630− compare(passwordInput.text, "Log In");
631− tap(passwordInput);
628+ function test_noPassword() {
629+ selectUser("no-password");
630+ var greeterPrompt = findChild(view, "greeterPrompt0");
631+ compare(greeterPrompt.text, "Log In");
632+ tap(greeterPrompt);
632633 compare(selectedSpy.count, 0);
633634 compare(respondedSpy.count, 1);
634635 compare(respondedSpy.signalArguments[0][0], "");
@@ -660,8 +661,8 @@ StyledItem {
660661 }
661662
662663 function test_passphrase() {
664+ var index = selectUser("has-password");
663665 var promptField = findChild(view, "promptField");
664− view.showPrompt("", true, true);
665666
666667 verify(view.alphanumeric);
667668 compare(promptField.inputMethodHints & Qt.ImhDigitsOnly, 0);
@@ -671,8 +672,8 @@ StyledItem {
671672 }
672673
673674 function test_passcode() {
675+ var index = selectUser("has-pin");
674676 var promptField = findChild(view, "promptField");
675− view.showPrompt("", true, true);
676677
677678 view.alphanumeric = false;
678679 compare(promptField.inputMethodHints & Qt.ImhDigitsOnly, Qt.ImhDigitsOnly);
@@ -706,42 +707,44 @@ StyledItem {
706707 }
707708
708709 function test_focusStaysActive() {
709− var promptField = findChild(view, "promptField");
710− var promptButton = findChild(view, "promptButton");
711−
712− verify(promptButton.activeFocus);
710+ selectUser("no-password");
711+ var greeterPrompt = findChild(view, "greeterPrompt0");
712+ verify(greeterPrompt.activeFocus);
713713 keyClick(Qt.Key_Enter);
714714 compare(selectedSpy.count, 0);
715715 compare(respondedSpy.count, 1);
716716 compare(respondedSpy.signalArguments[0][0], "");
717− verify(promptButton.activeFocus);
717+ verify(greeterPrompt.activeFocus);
718718 keyClick(Qt.Key_Enter);
719719 compare(respondedSpy.count, 1);
720720
721− view.showPrompt("", true, true);
722− verify(promptField.activeFocus);
721+ selectUser("has-password");
722+ var greeterPrompt = findChild(view, "greeterPrompt0");
723+ verify(greeterPrompt.activeFocus);
723724 keyClick(Qt.Key_D);
724725 keyClick(Qt.Key_Enter);
725726 compare(selectedSpy.count, 0);
726727 compare(respondedSpy.count, 2);
727728 compare(respondedSpy.signalArguments[1][0], "d");
728− verify(promptField.activeFocus);
729+ verify(greeterPrompt.activeFocus);
729730 keyClick(Qt.Key_Enter);
730731 compare(respondedSpy.count, 2);
731732
732− view.reset();
733+ var index = selectUser("no-password");
734+ var greeterPrompt = findChild(view, "greeterPrompt0");
733735 view.locked = true;
734− verify(promptButton.activeFocus);
736+ verify(greeterPrompt.activeFocus);
735737 keyClick(Qt.Key_Enter);
736738 compare(respondedSpy.count, 2);
737739 compare(selectedSpy.count, 1);
738− compare(selectedSpy.signalArguments[0][0], 0);
739− verify(promptButton.activeFocus);
740+ compare(selectedSpy.signalArguments[0][0], index);
741+ verify(greeterPrompt.activeFocus);
740742 keyClick(Qt.Key_Enter);
741743 compare(selectedSpy.count, 1);
742744
743− view.showPrompt("", true, true);
744− verify(promptField.activeFocus);
745+ selectUser("no-password");
746+ var greeterPrompt = findChild(view, "greeterPrompt0");
747+ verify(greeterPrompt.activeFocus);
745748 }
746749 }
747750}