@@ -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,6 +331,7 @@ 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();
@@ -391,8 +364,17 @@ StyledItem {
393 function selectIndex(i) {
366 function selectIndex(i) {
367+ var user = LightDM.Users.data(i, LightDM.UserRoles.NameRole);
368+ LightDM.Greeter.authenticate(user);
394− view.currentIndex = i;
370+ if (view.currentIndex == i)
395 var userList = findChild(view, "userList");
373 var userList = findChild(view, "userList");
374+ var promptList = findChild(view, "promptList");
376+ view.currentIndex = i;
377+ tryCompare(promptList, "opacity", 1);
396 tryCompare(userList, "movingInternally", false);
378 tryCompare(userList, "movingInternally", false);
@@ -527,12 +509,9 @@ StyledItem {
529 function test_respondedWithPassword() {
511 function test_respondedWithPassword() {
530− view.locked = true;
512+ selectUser("has-password");
531− view.showPrompt("Prompt", true, false);
513+ var greeterPrompt = findChild(view, "greeterPrompt0");
532− var passwordInput = findChild(view, "passwordInput");
533− compare(passwordInput.text, "Prompt");
534− verify(passwordInput.isSecret);
514+ verify(greeterPrompt.isSecret);
536 typeString("password");
515 typeString("password");
537 keyClick(Qt.Key_Enter);
516 keyClick(Qt.Key_Enter);
538 compare(respondedSpy.count, 1);
517 compare(respondedSpy.count, 1);
@@ -540,12 +519,9 @@ StyledItem {
542 function test_respondedWithNonSecret() {
521 function test_respondedWithNonSecret() {
543− view.locked = true;
522+ selectUser("question-prompt");
544− view.showPrompt("otp", false, false);
523+ var greeterPrompt = findChild(view, "greeterPrompt0");
545− var passwordInput = findChild(view, "passwordInput");
546− compare(passwordInput.text, "otp");
547− verify(!passwordInput.isSecret);
524+ verify(!greeterPrompt.isSecret);
549 typeString("foo");
525 typeString("foo");
550 keyClick(Qt.Key_Enter);
526 keyClick(Qt.Key_Enter);
551 compare(respondedSpy.count, 1);
527 compare(respondedSpy.count, 1);
@@ -570,24 +546,47 @@ StyledItem {
570 tryCompare(view, "required", false);
546 tryCompare(view, "required", false);
573− function test_showMessage() {
549+ function test_infoPrompt() {
574− view.showMessage("Welcome to Unity Greeter");
550+ selectUser("info-prompt");
575− view.showMessage("<font color=\"#df382c\">This is an error</font>");
551+
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");
552+ var infoLabel = findChild(view, "infoLabel0");
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");
553+ compare(infoLabel.text, "Welcome to Unity Greeter");
579− compare(infoLabel.textFormat, Text.StyledText);
554+ compare(infoLabel.textFormat, Text.PlainText);
556+ verify(findChild(view, "greeterPrompt1") != null);
559+ function test_longInfoPrompt() {
560+ selectUser("long-info-prompt");
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.");
580 verify(infoLabel.contentWidth > infoLabel.width);
564 verify(infoLabel.contentWidth > infoLabel.width);
581− verify(infoLabel.opacity < 1);
565+
582− tryCompare(infoLabel, "opacity", 1);
566+ verify(findChild(view, "greeterPrompt1") != null);
569+ function test_multiInfoPrompt() {
570+ selectUser("multi-info-prompt");
572+ var infoLabel0 = findChild(view, "infoLabel0");
573+ compare(infoLabel0.text, "Welcome to Unity Greeter");
575+ var infoLabel1 = findChild(view, "infoLabel1");
576+ compare(infoLabel1.text, "This is an error");
577+ compare(infoLabel1.color, theme.palette.normal.negative);
579+ var infoLabel2 = findChild(view, "infoLabel2");
580+ compare(infoLabel2.text, "You should have seen three messages");
582+ verify(findChild(view, "greeterPrompt3") != null);
585 // Escape is used to reset the authentication, especially if PAM is unresponsive
585 // Escape is used to reset the authentication, especially if PAM is unresponsive
586 function test_escape() {
586 function test_escape() {
587− selectIndex(1);
587+ var index = selectUser("has-password");
588 selectedSpy.clear();
588 selectedSpy.clear();
589 view.locked = true;
589 view.locked = true;
590− view.showPrompt("Prompt", true, true);
591 var promptField = findChild(view, "promptField");
590 var promptField = findChild(view, "promptField");
592 tap(promptField);
591 tap(promptField);
593 verify(promptField.activeFocus);
592 verify(promptField.activeFocus);
@@ -601,9 +600,10 @@ StyledItem {
601 compare(selectedSpy.count, 0);
600 compare(selectedSpy.count, 0);
602 keyClick(Qt.Key_Escape);
601 keyClick(Qt.Key_Escape);
603 compare(selectedSpy.count, 1);
602 compare(selectedSpy.count, 1);
604− compare(selectedSpy.signalArguments[0][0], 1);
603+ compare(selectedSpy.signalArguments[0][0], index);
606− view.reset();
605+ selectIndex(index);
606+ var promptField = findChild(view, "promptField");
607 verify(promptField.activeFocus);
607 verify(promptField.activeFocus);
608 compare(promptField.opacity, 1);
608 compare(promptField.opacity, 1);
@@ -614,21 +614,22 @@ StyledItem {
614 tryCompare(label, "text", "가나다라마");
614 tryCompare(label, "text", "가나다라마");
617− function test_promptless() {
617+ function test_authError() {
618− var passwordInput = findChild(view, "passwordInput");
618+ var index = selectUser("auth-error");
619−
619+ var greeterPrompt = findChild(view, "greeterPrompt1"); // after error message
620 view.locked = true;
620 view.locked = true;
621− compare(passwordInput.text, "Retry");
621+ compare(greeterPrompt.text, "Retry");
622− tap(passwordInput);
622+ tap(greeterPrompt);
623 compare(respondedSpy.count, 0);
623 compare(respondedSpy.count, 0);
624 compare(selectedSpy.count, 1);
624 compare(selectedSpy.count, 1);
625− compare(selectedSpy.signalArguments[0][0], 0);
625+ compare(selectedSpy.signalArguments[0][0], index);
626− selectedSpy.clear();
626+ }
628− view.reset();
628+ function test_noPassword() {
629− view.locked = false;
629+ selectUser("no-password");
630+ var greeterPrompt = findChild(view, "greeterPrompt0");
630− compare(passwordInput.text, "Log In");
631+ compare(greeterPrompt.text, "Log In");
631− tap(passwordInput);
632+ tap(greeterPrompt);
632 compare(selectedSpy.count, 0);
633 compare(selectedSpy.count, 0);
633 compare(respondedSpy.count, 1);
634 compare(respondedSpy.count, 1);
634 compare(respondedSpy.signalArguments[0][0], "");
635 compare(respondedSpy.signalArguments[0][0], "");
@@ -660,8 +661,8 @@ StyledItem {
662 function test_passphrase() {
663 function test_passphrase() {
664+ var index = selectUser("has-password");
663 var promptField = findChild(view, "promptField");
665 var promptField = findChild(view, "promptField");
664− view.showPrompt("", true, true);
666 verify(view.alphanumeric);
667 verify(view.alphanumeric);
667 compare(promptField.inputMethodHints & Qt.ImhDigitsOnly, 0);
668 compare(promptField.inputMethodHints & Qt.ImhDigitsOnly, 0);
@@ -671,8 +672,8 @@ StyledItem {
673 function test_passcode() {
674 function test_passcode() {
675+ var index = selectUser("has-pin");
674 var promptField = findChild(view, "promptField");
676 var promptField = findChild(view, "promptField");
675− view.showPrompt("", true, true);
677 view.alphanumeric = false;
678 view.alphanumeric = false;
678 compare(promptField.inputMethodHints & Qt.ImhDigitsOnly, Qt.ImhDigitsOnly);
679 compare(promptField.inputMethodHints & Qt.ImhDigitsOnly, Qt.ImhDigitsOnly);
@@ -706,42 +707,44 @@ StyledItem {
708 function test_focusStaysActive() {
709 function test_focusStaysActive() {
709− var promptField = findChild(view, "promptField");
710+ selectUser("no-password");
710− var promptButton = findChild(view, "promptButton");
711+ var greeterPrompt = findChild(view, "greeterPrompt0");
712− verify(promptButton.activeFocus);
712+ verify(greeterPrompt.activeFocus);
713 keyClick(Qt.Key_Enter);
713 keyClick(Qt.Key_Enter);
714 compare(selectedSpy.count, 0);
714 compare(selectedSpy.count, 0);
715 compare(respondedSpy.count, 1);
715 compare(respondedSpy.count, 1);
716 compare(respondedSpy.signalArguments[0][0], "");
716 compare(respondedSpy.signalArguments[0][0], "");
717− verify(promptButton.activeFocus);
717+ verify(greeterPrompt.activeFocus);
718 keyClick(Qt.Key_Enter);
718 keyClick(Qt.Key_Enter);
719 compare(respondedSpy.count, 1);
719 compare(respondedSpy.count, 1);
721− view.showPrompt("", true, true);
721+ selectUser("has-password");
722+ var greeterPrompt = findChild(view, "greeterPrompt0");
722− verify(promptField.activeFocus);
723+ verify(greeterPrompt.activeFocus);
723 keyClick(Qt.Key_D);
724 keyClick(Qt.Key_D);
724 keyClick(Qt.Key_Enter);
725 keyClick(Qt.Key_Enter);
725 compare(selectedSpy.count, 0);
726 compare(selectedSpy.count, 0);
726 compare(respondedSpy.count, 2);
727 compare(respondedSpy.count, 2);
727 compare(respondedSpy.signalArguments[1][0], "d");
728 compare(respondedSpy.signalArguments[1][0], "d");
728− verify(promptField.activeFocus);
729+ verify(greeterPrompt.activeFocus);
729 keyClick(Qt.Key_Enter);
730 keyClick(Qt.Key_Enter);
730 compare(respondedSpy.count, 2);
731 compare(respondedSpy.count, 2);
732− view.reset();
733+ var index = selectUser("no-password");
734+ var greeterPrompt = findChild(view, "greeterPrompt0");
733 view.locked = true;
735 view.locked = true;
734− verify(promptButton.activeFocus);
736+ verify(greeterPrompt.activeFocus);
735 keyClick(Qt.Key_Enter);
737 keyClick(Qt.Key_Enter);
736 compare(respondedSpy.count, 2);
738 compare(respondedSpy.count, 2);
737 compare(selectedSpy.count, 1);
739 compare(selectedSpy.count, 1);
738− compare(selectedSpy.signalArguments[0][0], 0);
740+ compare(selectedSpy.signalArguments[0][0], index);
739− verify(promptButton.activeFocus);
741+ verify(greeterPrompt.activeFocus);
740 keyClick(Qt.Key_Enter);
742 keyClick(Qt.Key_Enter);
741 compare(selectedSpy.count, 1);
743 compare(selectedSpy.count, 1);
743− view.showPrompt("", true, true);
745+ selectUser("no-password");
746+ var greeterPrompt = findChild(view, "greeterPrompt0");
744− verify(promptField.activeFocus);
747+ verify(greeterPrompt.activeFocus);