@@ -26,6 +26,7 @@ StyledItem {
2626 id: root
2727 width: units.gu(120)
2828 height: units.gu(80)
29+ focus: true
2930
3031 theme.name: "Ubuntu.Components.Themes.SuruDark"
3132
@@ -41,6 +42,7 @@ StyledItem {
4142 id: loader
4243 width: root.width - controls.width
4344 height: parent.height
45+ focus: true
4446
4547 property bool itemDestroyed: false
4648 sourceComponent: Component {
@@ -63,7 +65,8 @@ StyledItem {
6365 }
6466
6567 onSelected: {
66− currentIndexField.text = index;
68+ if (index >= 0)
69+ currentIndexField.text = index;
6770 }
6871
6972 QtObject {
@@ -392,7 +395,7 @@ StyledItem {
392395
393396 function test_respondedWithPassword() {
394397 view.locked = true;
395− view.showPrompt("Prompt", true, true);
398+ view.showPrompt("Prompt", true, false);
396399 var passwordInput = findChild(view, "passwordInput");
397400 compare(passwordInput.text, "Prompt");
398401 verify(passwordInput.isSecret);
@@ -454,13 +457,13 @@ StyledItem {
454457 view.showPrompt("Prompt", true, true);
455458 var promptField = findChild(view, "promptField");
456459 tap(promptField);
457− compare(promptField.focus, true);
458− compare(promptField.enabled, true);
460+ verify(promptField.activeFocus);
461+ compare(promptField.opacity, 1);
459462
460463 typeString("password");
461464 keyClick(Qt.Key_Enter);
462− compare(promptField.focus, true);
463− compare(promptField.enabled, false);
465+ verify(promptField.activeFocus);
466+ compare(promptField.opacity, 0); // hidden by fakeLabel
464467
465468 compare(selectedSpy.count, 0);
466469 keyClick(Qt.Key_Escape);
@@ -468,8 +471,8 @@ StyledItem {
468471 compare(selectedSpy.signalArguments[0][0], 1);
469472
470473 view.reset();
471− compare(promptField.focus, false);
472− compare(promptField.enabled, true);
474+ verify(promptField.activeFocus);
475+ compare(promptField.opacity, 1);
473476 }
474477
475478 function test_unicode() {
@@ -489,6 +492,7 @@ StyledItem {
489492 compare(selectedSpy.signalArguments[0][0], 0);
490493 selectedSpy.clear();
491494
495+ view.reset();
492496 view.locked = false;
493497 compare(passwordInput.text, "Log In");
494498 tap(passwordInput);
@@ -518,13 +522,89 @@ StyledItem {
518522 tryCompare(loginList, "height", view.height);
519523 }
520524
521− function test_alphanumeric() {
522− var passwordInput = findChild(view, "passwordInput");
525+ function test_passphrase() {
526+ var promptField = findChild(view, "promptField");
527+ view.showPrompt("", true, true);
523528
524529 verify(view.alphanumeric);
525− verify(passwordInput.isAlphanumeric);
530+ compare(promptField.inputMethodHints & Qt.ImhDigitsOnly, 0);
531+
532+ keyClick(Qt.Key_D);
533+ compare(promptField.text, "d");
534+ }
535+
536+ function test_passcode() {
537+ var promptField = findChild(view, "promptField");
538+ view.showPrompt("", true, true);
539+
526540 view.alphanumeric = false;
527− verify(!passwordInput.isAlphanumeric);
541+ compare(promptField.inputMethodHints & Qt.ImhDigitsOnly, Qt.ImhDigitsOnly);
542+
543+ keyClick(Qt.Key_D);
544+ compare(promptField.text, "");
545+
546+ keyClick(Qt.Key_0);
547+ keyClick(Qt.Key_0);
548+ keyClick(Qt.Key_0);
549+ keyClick(Qt.Key_0);
550+ compare(promptField.text, "0000");
551+
552+ compare(respondedSpy.count, 1);
553+ compare(respondedSpy.signalArguments[0][0], "0000");
554+
555+ compare(promptField.opacity, 0);
556+ }
557+
558+ function test_loginListMovement_data() {
559+ return [
560+ {tag: "up", key: Qt.Key_Up, result: -1},
561+ {tag: "down", key: Qt.Key_Down, result: 1},
562+ ]
563+ }
564+
565+ function test_loginListMovement(data) {
566+ keyClick(data.key);
567+ compare(selectedSpy.count, 1);
568+ compare(selectedSpy.signalArguments[0][0], data.result);
569+ }
570+
571+ function test_focusStaysActive() {
572+ var promptField = findChild(view, "promptField");
573+ var promptButton = findChild(view, "promptButton");
574+
575+ verify(promptButton.activeFocus);
576+ keyClick(Qt.Key_Enter);
577+ compare(selectedSpy.count, 0);
578+ compare(respondedSpy.count, 1);
579+ compare(respondedSpy.signalArguments[0][0], "");
580+ verify(promptButton.activeFocus);
581+ keyClick(Qt.Key_Enter);
582+ compare(respondedSpy.count, 1);
583+
584+ view.showPrompt("", true, true);
585+ verify(promptField.activeFocus);
586+ keyClick(Qt.Key_D);
587+ keyClick(Qt.Key_Enter);
588+ compare(selectedSpy.count, 0);
589+ compare(respondedSpy.count, 2);
590+ compare(respondedSpy.signalArguments[1][0], "d");
591+ verify(promptField.activeFocus);
592+ keyClick(Qt.Key_Enter);
593+ compare(respondedSpy.count, 2);
594+
595+ view.reset();
596+ view.locked = true;
597+ verify(promptButton.activeFocus);
598+ keyClick(Qt.Key_Enter);
599+ compare(respondedSpy.count, 2);
600+ compare(selectedSpy.count, 1);
601+ compare(selectedSpy.signalArguments[0][0], 0);
602+ verify(promptButton.activeFocus);
603+ keyClick(Qt.Key_Enter);
604+ compare(selectedSpy.count, 1);
605+
606+ view.showPrompt("", true, true);
607+ verify(promptField.activeFocus);
528608 }
529609 }
530610}