|  | // Copyright 2017 The Chromium Authors. All | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | /** | 
|  | * @fileoverview using private properties isn't a Closure violation in tests. | 
|  | * @suppress {accessControls} | 
|  | */ | 
|  |  | 
|  | SourcesTestRunner.dumpSuggestions = function(textEditor, lines) { | 
|  | let resolve; | 
|  | const promise = new Promise(fulfill => resolve = fulfill); | 
|  | let lineNumber = -1; | 
|  | let columnNumber; | 
|  |  | 
|  | for (let i = 0; i < lines.length; ++i) { | 
|  | columnNumber = lines[i].indexOf('|'); | 
|  |  | 
|  | if (columnNumber !== -1) { | 
|  | lineNumber = i; | 
|  | break; | 
|  | } | 
|  | } | 
|  |  | 
|  | if (lineNumber === -1) { | 
|  | throw new Error('Test case is invalid: cursor position is not marked with \'|\' symbol.'); | 
|  | } | 
|  |  | 
|  | textEditor.setText(lines.join('\n').replace('|', '')); | 
|  | textEditor.setSelection(TextUtils.TextRange.createFromLocation(lineNumber, columnNumber)); | 
|  | TestRunner.addSniffer( | 
|  | TextEditor.TextEditorAutocompleteController.prototype, '_onSuggestionsShownForTest', suggestionsShown); | 
|  | textEditor._autocompleteController.autocomplete(); | 
|  |  | 
|  | function suggestionsShown(words) { | 
|  | TestRunner.addResult('========= Selection In Editor ========='); | 
|  | SourcesTestRunner.dumpTextWithSelection(textEditor); | 
|  | TestRunner.addResult('======= Autocomplete Suggestions ======='); | 
|  | TestRunner.addResult('[' + words.map(item => item.text).join(', ') + ']'); | 
|  | resolve(); | 
|  | } | 
|  |  | 
|  | return promise; | 
|  | }; |