Merge from vscode e3c4990c67c40213af168300d1cfeb71d680f877 (#16569)

This commit is contained in:
Cory Rivera
2021-08-25 16:28:29 -07:00
committed by GitHub
parent ab1112bfb3
commit cb7b7da0a4
1752 changed files with 59525 additions and 33878 deletions

View File

@@ -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]);
});
});
});