ensure show() hide() show() hide() emits two didHide events. Fixes #135747

This commit is contained in:
Tyler Leonhardt
2021-10-27 15:23:36 -07:00
parent c0d32634fb
commit 5c0e664fd3
2 changed files with 54 additions and 2 deletions

View File

@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import * as assert from 'assert';
import { commands, window } from 'vscode';
import { commands, Disposable, QuickPick, QuickPickItem, window } from 'vscode';
import { assertNoRpc, closeAllEditors } from '../utils';
interface QuickPickExpected {
@@ -204,6 +204,50 @@ suite('vscode API - quick input', function () {
quickPick.hide();
quickPick.dispose();
});
test('createQuickPick, hide and hide', function (_done) {
let done = (err?: any) => {
done = () => { };
_done(err);
};
let hidden = false;
const quickPick = window.createQuickPick();
quickPick.onDidHide(() => {
if (hidden) {
done(new Error('Already hidden'));
} else {
hidden = true;
setTimeout(done, 0);
}
});
quickPick.show();
quickPick.hide();
quickPick.hide();
});
test('createQuickPick, hide show hide', async function () {
async function waitForHide(quickPick: QuickPick<QuickPickItem>) {
let disposable: Disposable | undefined;
try {
await Promise.race([
new Promise(resolve => disposable = quickPick.onDidHide(() => resolve(true))),
new Promise((_, reject) => setTimeout(() => reject(), 4000))
]);
} finally {
disposable?.dispose();
}
}
const quickPick = window.createQuickPick();
quickPick.show();
const promise = waitForHide(quickPick);
quickPick.hide();
quickPick.show();
await promise;
quickPick.hide();
await waitForHide(quickPick);
});
});
function createQuickPick(expected: QuickPickExpected, done: (err?: any) => void, record = false) {