/* eslint-disable */ import assert from 'assert' import { Delayer } from '../../language-client/utils/async' import { wait } from '../../util/index' test('Delayer', () => { let count = 0 let factory = () => { return Promise.resolve(++count) } let delayer = new Delayer(0) let promises: Thenable[] = [] assert(!delayer.isTriggered()) promises.push(delayer.trigger(factory).then((result) => { assert.equal(result, 1); assert(!delayer.isTriggered()) })) assert(delayer.isTriggered()) promises.push(delayer.trigger(factory).then((result) => { assert.equal(result, 1); assert(!delayer.isTriggered()) })) assert(delayer.isTriggered()) promises.push(delayer.trigger(factory).then((result) => { assert.equal(result, 1); assert(!delayer.isTriggered()) })) assert(delayer.isTriggered()) return Promise.all(promises).then(() => { assert(!delayer.isTriggered()) }).finally(() => { delayer.dispose() }) }) test('Delayer - forceDelivery', async () => { let count = 0 let factory = () => { return Promise.resolve(++count) } let delayer = new Delayer(150) delayer.forceDelivery() delayer.trigger(factory).then((result) => { assert.equal(result, 1); assert(!delayer.isTriggered()) }) await wait(10) delayer.forceDelivery() expect(count).toBe(1) void delayer.trigger(factory) await wait(10) delayer.cancel() expect(count).toBe(1) }) test('Delayer - last task should be the one getting called', function() { let factoryFactory = (n: number) => () => { return Promise.resolve(n) } let delayer = new Delayer(0) let promises: Thenable[] = [] assert(!delayer.isTriggered()) promises.push(delayer.trigger(factoryFactory(1)).then((n) => { assert.equal(n, 3) })) promises.push(delayer.trigger(factoryFactory(2)).then((n) => { assert.equal(n, 3) })) promises.push(delayer.trigger(factoryFactory(3)).then((n) => { assert.equal(n, 3) })) const p = Promise.all(promises).then(() => { assert(!delayer.isTriggered()) }) assert(delayer.isTriggered()) return p })