94 lines
2.3 KiB
TypeScript
94 lines
2.3 KiB
TypeScript
import { Neovim } from '@chemzqm/neovim'
|
|
import { Disposable } from 'vscode-languageserver-protocol'
|
|
import Handler from '../../handler/index'
|
|
import { disposeAll } from '../../util'
|
|
import helper from '../helper'
|
|
|
|
let nvim: Neovim
|
|
let handler: Handler
|
|
let disposables: Disposable[] = []
|
|
beforeAll(async () => {
|
|
await helper.setup()
|
|
nvim = helper.nvim
|
|
handler = (helper.plugin as any).handler
|
|
})
|
|
|
|
afterAll(async () => {
|
|
await helper.shutdown()
|
|
})
|
|
|
|
beforeEach(async () => {
|
|
await helper.createDocument()
|
|
})
|
|
|
|
afterEach(async () => {
|
|
disposeAll(disposables)
|
|
await helper.reset()
|
|
})
|
|
|
|
describe('Handler', () => {
|
|
describe('hasProvider', () => {
|
|
it('should check provider for document', async () => {
|
|
let res = await handler.hasProvider('definition')
|
|
expect(res).toBe(false)
|
|
})
|
|
})
|
|
|
|
describe('checkProvier', () => {
|
|
it('should throw error when provider not found', async () => {
|
|
let doc = await helper.createDocument()
|
|
let err
|
|
try {
|
|
handler.checkProvier('definition', doc.textDocument)
|
|
} catch (e) {
|
|
err = e
|
|
}
|
|
expect(err).toBeDefined()
|
|
})
|
|
})
|
|
|
|
describe('withRequestToken', () => {
|
|
it('should cancel previous request when called again', async () => {
|
|
let cancelled = false
|
|
let p = handler.withRequestToken('test', token => {
|
|
return new Promise(s => {
|
|
token.onCancellationRequested(() => {
|
|
cancelled = true
|
|
clearTimeout(timer)
|
|
s(undefined)
|
|
})
|
|
let timer = setTimeout(() => {
|
|
s(undefined)
|
|
}, 3000)
|
|
})
|
|
}, false)
|
|
setTimeout(async () => {
|
|
await handler.withRequestToken('test', () => {
|
|
return Promise.resolve(undefined)
|
|
}, false)
|
|
}, 50)
|
|
await p
|
|
expect(cancelled).toBe(true)
|
|
})
|
|
|
|
it('should cancel request on insert start', async () => {
|
|
let cancelled = false
|
|
let p = handler.withRequestToken('test', token => {
|
|
return new Promise(s => {
|
|
token.onCancellationRequested(() => {
|
|
cancelled = true
|
|
clearTimeout(timer)
|
|
s(undefined)
|
|
})
|
|
let timer = setTimeout(() => {
|
|
s(undefined)
|
|
}, 3000)
|
|
})
|
|
}, false)
|
|
await nvim.input('i')
|
|
await p
|
|
expect(cancelled).toBe(true)
|
|
})
|
|
})
|
|
})
|