mirror of
1
0
Fork 0
ultimate-vim/sources_non_forked/coc.nvim/src/__tests__/handler/links.test.ts

138 lines
4.0 KiB
TypeScript

import { Neovim } from '@chemzqm/neovim'
import { Disposable, DocumentLink, Range } from 'vscode-languageserver-protocol'
import LinksHandler from '../../handler/links'
import languages from '../../languages'
import workspace from '../../workspace'
import events from '../../events'
import { disposeAll } from '../../util'
import helper from '../helper'
let nvim: Neovim
let links: LinksHandler
let disposables: Disposable[] = []
beforeAll(async () => {
await helper.setup()
nvim = helper.nvim
links = helper.plugin.getHandler().links
})
afterAll(async () => {
await helper.shutdown()
})
afterEach(async () => {
disposeAll(disposables)
await helper.reset()
})
describe('Links', () => {
it('should get document links', async () => {
disposables.push(languages.registerDocumentLinkProvider([{ language: '*' }], {
provideDocumentLinks: (_doc, _token) => {
return [
DocumentLink.create(Range.create(0, 0, 0, 5), 'test:///foo'),
DocumentLink.create(Range.create(1, 0, 1, 5), 'test:///bar')
]
}
}))
let res = await links.getLinks()
expect(res.length).toBe(2)
})
it('should throw error when link target not resolved', async () => {
disposables.push(languages.registerDocumentLinkProvider([{ language: '*' }], {
provideDocumentLinks(_doc, _token) {
return [
DocumentLink.create(Range.create(0, 0, 0, 5))
]
},
resolveDocumentLink(link) {
return link
}
}))
let res = await links.getLinks()
let err
try {
await links.openLink(res[0])
} catch (e) {
err = e
}
expect(err).toBeDefined()
})
it('should open link at current position', async () => {
await nvim.setLine('foo')
await nvim.command('normal! 0')
disposables.push(workspace.registerTextDocumentContentProvider('test', {
provideTextDocumentContent: () => {
return 'test'
}
}))
disposables.push(languages.registerDocumentLinkProvider([{ language: '*' }], {
provideDocumentLinks(_doc, _token) {
return [
DocumentLink.create(Range.create(0, 0, 0, 5)),
]
},
resolveDocumentLink(link) {
link.target = 'test:///foo'
return link
}
}))
await links.openCurrentLink()
let bufname = await nvim.call('bufname', '%')
expect(bufname).toBe('test:///foo')
await nvim.call('setline', [1, ['a', 'b', 'c']])
await nvim.call('cursor', [3, 1])
let res = await links.openCurrentLink()
expect(res).toBe(false)
})
it('should return false when current links not found', async () => {
await nvim.setLine('foo')
await nvim.command('normal! 0')
disposables.push(languages.registerDocumentLinkProvider([{ language: '*' }], {
provideDocumentLinks(_doc, _token) {
return []
}
}))
let res = await links.openCurrentLink()
expect(res).toBe(false)
})
it('should show tooltip', async () => {
await nvim.setLine('foo')
await nvim.call('cursor', [1, 1])
disposables.push(languages.registerDocumentLinkProvider([{ language: '*' }], {
provideDocumentLinks(_doc, _token) {
let link = DocumentLink.create(Range.create(0, 0, 0, 5))
link.tooltip = 'test'
return [link]
},
resolveDocumentLink(link) {
link.target = 'http://example.com'
return link
}
}))
await links.showTooltip()
let win = await helper.getFloat()
let buf = await win.buffer
let lines = await buf.lines
expect(lines[0]).toMatch('test')
})
it('should enable tooltip on CursorHold', async () => {
let doc = await workspace.document
helper.updateConfiguration('links.tooltip', true)
await nvim.setLine('http://www.baidu.com')
await nvim.call('cursor', [1, 1])
let link = await links.getCurrentLink()
expect(link).toBeDefined()
await events.fire('CursorHold', [doc.bufnr])
let win = await helper.getFloat()
let buf = await win.buffer
let lines = await buf.lines
expect(lines[0]).toMatch('Press')
})
})