mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-05 01:25:38 -05:00
Merge from vscode e3c4990c67c40213af168300d1cfeb71d680f877 (#16569)
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
import * as assert from 'assert';
|
||||
import { Event, Emitter, EventBufferer, EventMultiplexer, PauseableEmitter } from 'vs/base/common/event';
|
||||
import { Event, Emitter, EventBufferer, EventMultiplexer, PauseableEmitter, Relay } from 'vs/base/common/event';
|
||||
import { IDisposable, DisposableStore } from 'vs/base/common/lifecycle';
|
||||
import { errorHandler, setUnexpectedErrorHandler } from 'vs/base/common/errors';
|
||||
import { AsyncEmitter, IWaitUntil, timeout } from 'vs/base/common/async';
|
||||
@@ -894,4 +894,70 @@ suite('Event utils', () => {
|
||||
listener.dispose();
|
||||
});
|
||||
|
||||
test('dispose is reentrant', () => {
|
||||
const emitter = new Emitter<number>({
|
||||
onLastListenerRemove: () => {
|
||||
emitter.dispose();
|
||||
}
|
||||
});
|
||||
|
||||
const listener = emitter.event(() => undefined);
|
||||
listener.dispose(); // should not crash
|
||||
});
|
||||
|
||||
suite('Relay', () => {
|
||||
test('should input work', () => {
|
||||
const e1 = new Emitter<number>();
|
||||
const e2 = new Emitter<number>();
|
||||
const relay = new Relay<number>();
|
||||
|
||||
const result: number[] = [];
|
||||
const listener = (num: number) => result.push(num);
|
||||
const subscription = relay.event(listener);
|
||||
|
||||
e1.fire(1);
|
||||
assert.deepStrictEqual(result, []);
|
||||
|
||||
relay.input = e1.event;
|
||||
e1.fire(2);
|
||||
assert.deepStrictEqual(result, [2]);
|
||||
|
||||
relay.input = e2.event;
|
||||
e1.fire(3);
|
||||
e2.fire(4);
|
||||
assert.deepStrictEqual(result, [2, 4]);
|
||||
|
||||
subscription.dispose();
|
||||
e1.fire(5);
|
||||
e2.fire(6);
|
||||
assert.deepStrictEqual(result, [2, 4]);
|
||||
});
|
||||
|
||||
test('should Relay dispose work', () => {
|
||||
const e1 = new Emitter<number>();
|
||||
const e2 = new Emitter<number>();
|
||||
const relay = new Relay<number>();
|
||||
|
||||
const result: number[] = [];
|
||||
const listener = (num: number) => result.push(num);
|
||||
relay.event(listener);
|
||||
|
||||
e1.fire(1);
|
||||
assert.deepStrictEqual(result, []);
|
||||
|
||||
relay.input = e1.event;
|
||||
e1.fire(2);
|
||||
assert.deepStrictEqual(result, [2]);
|
||||
|
||||
relay.input = e2.event;
|
||||
e1.fire(3);
|
||||
e2.fire(4);
|
||||
assert.deepStrictEqual(result, [2, 4]);
|
||||
|
||||
relay.dispose();
|
||||
e1.fire(5);
|
||||
e2.fire(6);
|
||||
assert.deepStrictEqual(result, [2, 4]);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user