From c826496a7cd5f10beafc68b21b04f8a86a6c9c30 Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Fri, 16 Sep 2016 12:18:39 +0200 Subject: [PATCH] event: support initial buffer --- src/vs/base/common/event.ts | 5 +++-- src/vs/base/test/common/event.test.ts | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/vs/base/common/event.ts b/src/vs/base/common/event.ts index 95ae379649d..91ca4b04804 100644 --- a/src/vs/base/common/event.ts +++ b/src/vs/base/common/event.ts @@ -375,8 +375,9 @@ export function stopwatch(event: Event): Event { * // 4 * ``` */ -export function buffer(event: Event, nextTick = false): Event { - let buffer: T[] = []; +export function buffer(event: Event, nextTick = false, buffer: T[] = []): Event { + buffer = buffer.slice(); + let listener = event(e => { if (buffer) { buffer.push(e); diff --git a/src/vs/base/test/common/event.test.ts b/src/vs/base/test/common/event.test.ts index 0251118b73f..7faccca0e84 100644 --- a/src/vs/base/test/common/event.test.ts +++ b/src/vs/base/test/common/event.test.ts @@ -402,6 +402,21 @@ suite('Event utils', () => { assert.deepEqual(result, [1,2,3,4]); }); }); + + test('should fire initial buffer events', () => { + const result = []; + const emitter = new Emitter(); + const event = emitter.event; + const bufferedEvent = buffer(event, false, [-2, -1, 0]); + + emitter.fire(1); + emitter.fire(2); + emitter.fire(3); + assert.deepEqual(result, []); + + bufferedEvent(num => result.push(num)); + assert.deepEqual(result, [-2,-1,0,1,2,3]); + }); }); }); \ No newline at end of file