From b7c5d6791c8301adda387e64e9aba35a7bcf00dd Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Wed, 6 Sep 2017 11:32:52 +0200 Subject: [PATCH] fix #33691 --- extensions/vscode-api-tests/src/window.test.ts | 17 +++++++++++++++++ .../parts/quickopen/quickOpenController.ts | 13 ++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/extensions/vscode-api-tests/src/window.test.ts b/extensions/vscode-api-tests/src/window.test.ts index c92cae33aab..a9d78e8cad3 100644 --- a/extensions/vscode-api-tests/src/window.test.ts +++ b/extensions/vscode-api-tests/src/window.test.ts @@ -329,6 +329,23 @@ suite('window namespace tests', () => { return Promise.all([a, b]); }); + test('Default value for showInput Box accepted even if fails validateInput, #33691', function () { + const result = window.showInputBox({ + validateInput: (value: string) => { + if (!value || value.trim().length === 0) { + return 'Cannot set empty description'; + } + return null; + } + }).then(value => { + assert.equal(value, undefined); + }); + + const exec = commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem'); + return Promise.all([result, exec]); + }); + + test('editor, selection change kind', () => { return workspace.openTextDocument(join(workspace.rootPath || '', './far.js')).then(doc => window.showTextDocument(doc)).then(editor => { diff --git a/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts b/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts index 48394dca936..ab33817c228 100644 --- a/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts +++ b/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts @@ -169,7 +169,7 @@ export class QuickOpenController extends Component implements IQuickOpenService : nls.localize('inputModeEntry', "Press 'Enter' to confirm your input or 'Escape' to cancel"); let currentPick = defaultMessage; - let currentValidation = TPromise.as(true); + let currentValidation: TPromise; let currentDecoration: Severity; let lastValue: string; @@ -215,6 +215,17 @@ export class QuickOpenController extends Component implements IQuickOpenService }; return new TPromise(init).then(item => { + + if (!currentValidation) { + if (options.validateInput) { + currentValidation = options + .validateInput(lastValue === void 0 ? options.value : lastValue) + .then(message => !message); + } else { + currentValidation = TPromise.as(true); + } + } + return currentValidation.then(valid => { if (valid && item) { return lastValue === void 0 ? (options.value || '') : lastValue;