Close autocomplete suggestions on tap

When autocompletion "commits" a value, it should always clear the list
of suggestions and hide it from view. This change moves that logic from
the individual event handlers into _commit, so this now occurs on tap.
Also refocuses on the input after a suggestion is tapped so the user can
continue typing.

Bug: Issue 4473
Change-Id: If0343b38bcc61a49fcca2fb5eabea09a7b36fdd6
diff --git a/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete.js b/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete.js
index 467acb7..45d55eb 100644
--- a/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete.js
+++ b/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete.js
@@ -200,13 +200,11 @@
           if (this._suggestions.length > 0) {
             e.preventDefault();
             this._commit(this.tabCompleteWithoutCommit);
-            this._suggestions = [];
           }
           break;
         case 13: // Enter
           e.preventDefault();
           this._commit();
-          this._suggestions = [];
           break;
       }
     },
@@ -245,6 +243,7 @@
     _handleSuggestionTap: function(e) {
       this.$.cursor.setCursor(e.target);
       this._commit();
+      this.focus();
     },
 
     /**
@@ -275,6 +274,7 @@
         }
       }
 
+      this._suggestions = [];
       if (!silent) {
         this.fire('commit', {value: value});
       }
diff --git a/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete_test.html b/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete_test.html
index 63c1b3c..c87521e 100644
--- a/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete_test.html
+++ b/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete_test.html
@@ -271,5 +271,16 @@
       assert.isTrue(element._computeSuggestionsHidden(suggestions, false));
       assert.isFalse(element._computeSuggestionsHidden(suggestions, true));
     });
+
+    test('tap on suggestion commits and refocuses on input', function() {
+      var focusStub = sinon.stub(element, 'focus');
+      element._focused = true;
+      element._suggestions = [{name: 'first suggestion'}];
+      assert.isFalse(element.$.suggestions.hasAttribute('hidden'));
+      MockInteractions.tap(element.$$('#suggestions li:first-child'));
+      assert.isTrue(focusStub.called);
+      assert.isTrue(element.$.suggestions.hasAttribute('hidden'));
+      focusStub.restore();
+    });
   });
 </script>