Merge "Clear suggestions on autocomplete input change"
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 1eaad4e..f39398f 100644
--- a/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete.js
+++ b/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete.js
@@ -312,6 +312,12 @@
           // For any normal keypress, return focus to the input to allow for
           // unbroken user input.
           this.$.input.inputElement.focus();
+
+          // Since this has been a normal keypress, the suggestions will have
+          // been based on a previous input. Clear them. This prevents an
+          // outdated suggestion from being used if the input keystroke is
+          // immediately followed by a commit keystroke. @see Issue 8655
+          this._suggestions = [];
       }
       this.fire('input-keydown', {keyCode: e.keyCode, input: this.$.input});
     },
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 872f79f..d257cdd 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
@@ -379,6 +379,21 @@
       assert.isTrue(commitStub.calledOnce);
     });
 
+    test('issue 8655', () => {
+      function makeSuggestion(s) { return {name: s, text: s, value: s}; }
+      const keydownSpy = sandbox.spy(element, '_handleKeydown');
+      element.setText('file:');
+      element._suggestions =
+          [makeSuggestion('file:'), makeSuggestion('-file:')];
+      MockInteractions.pressAndReleaseKeyOn(element.$.input, 88, null, 'x');
+      // Must set the value, because the MockInteraction does not.
+      element.$.input.value = 'file:x';
+      assert.isTrue(keydownSpy.calledOnce);
+      MockInteractions.pressAndReleaseKeyOn(element.$.input, 13, null, 'enter');
+      assert.isTrue(keydownSpy.calledTwice);
+      assert.equal(element.text, 'file:x');
+    });
+
     suite('focus', () => {
       let commitSpy;
       let focusSpy;