Multi-step input API (#49340)

This commit is contained in:
Christof Marti
2018-05-14 12:51:12 +02:00
parent 1055627274
commit e142962e1b
10 changed files with 254 additions and 32 deletions

View File

@@ -405,6 +405,84 @@ suite('window namespace tests', () => {
return Promise.all([a, b]);
});
test('multiStepInput, two steps', async function () {
const picks = window.multiStepInput(async (input, token) => {
const pick1 = input.showQuickPick(['eins', 'zwei', 'drei']);
await commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem');
assert.equal(await pick1, 'eins');
const pick2 = input.showQuickPick(['vier', 'fünf', 'sechs']);
await commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem');
assert.equal(await pick2, 'vier');
return [ await pick1, await pick2 ];
});
assert.deepEqual(await picks, ['eins', 'vier']);
});
test('multiStepInput, interrupted by showQuickPick', async function () {
const picks = window.multiStepInput(async (input, token) => {
const pick1 = input.showQuickPick(['eins', 'zwei', 'drei']);
await commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem');
assert.equal(await pick1, 'eins');
assert.ok(!token.isCancellationRequested);
const otherPick = window.showQuickPick(['sieben', 'acht', 'neun']);
await commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem');
assert.equal(await otherPick, 'sieben');
assert.ok(token.isCancellationRequested);
const pick2 = input.showQuickPick(['vier', 'fünf', 'sechs']);
await commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem');
assert.equal(await pick2, undefined);
return [ await pick1, await pick2 ];
});
assert.deepEqual(await picks, ['eins', undefined]);
});
test('multiStepInput, interrupted by multiStepInput', async function () {
const picks = window.multiStepInput(async (input, token) => {
const pick1 = input.showQuickPick(['eins', 'zwei', 'drei']);
await commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem');
assert.equal(await pick1, 'eins');
assert.ok(!token.isCancellationRequested);
const otherPick = window.multiStepInput(async (input, token) => {
const otherPick = window.showQuickPick(['sieben', 'acht', 'neun']);
await commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem');
assert.equal(await otherPick, 'sieben');
return otherPick;
});
assert.equal(await otherPick, 'sieben');
assert.ok(token.isCancellationRequested);
const pick2 = input.showQuickPick(['vier', 'fünf', 'sechs']);
await commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem');
assert.equal(await pick2, undefined);
return [ await pick1, await pick2 ];
});
assert.deepEqual(await picks, ['eins', undefined]);
});
test('multiStepInput, interrupted by error', async function () {
try {
const picks = window.multiStepInput(async (input, token) => {
const pick1 = input.showQuickPick(['eins', 'zwei', 'drei']);
await commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem');
assert.equal(await pick1, 'eins');
throw new Error('because');
});
await picks;
assert.ok(false);
} catch (error) {
assert.equal(error.message, 'because');
}
});
test('showWorkspaceFolderPick', function () {
const p = window.showWorkspaceFolderPick(undefined);

View File

@@ -4,4 +4,5 @@
*--------------------------------------------------------------------------------------------*/
/// <reference path="../../../../src/vs/vscode.d.ts" />
/// <reference path="../../../../src/vs/vscode.proposed.d.ts" />
/// <reference types='@types/node'/>