73 lines
2.0 KiB
TypeScript
73 lines
2.0 KiB
TypeScript
/* 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<any>[] = []
|
|
|
|
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<any>[] = []
|
|
|
|
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
|
|
})
|