Files
vim-lsp-mirror/test/lsp/utils/work_done_progress.vimspec
micchy326 7770b7d5a3 Add public api get window/workDoneProgress (#979)
* impl lsp#get_progress() for statusline plugin.

* add workDoneProgress spec link

* refactor s:handle_work_done_progress()

* [workDoneProgress] prevent to subscribe multiple times

* [workDoneProgress] Fixed s:lsp_progress['percentage'] to always be float

* [workDoneProgress] support multiple progress registration.

* [workDoneProgress] Fixed s:lsp_progress['percentage'] to uinteger

* [workDoneProgress] fix for vint

* [workDoneProgress] rename variable

* [workDoneProgress] add test

* [workDoneProgress] write document

* [workDoneProgress] initialize s:progress_ui when enable/disable

* [workDoneProgress] refactor test code

* [workDoneProgress] add lsp_progress_updated

* [workDoneProgress] fix typo

* [workDoneProgress] refactor token handling

* [workDoneProgress] Fixed differences from
specifications(messages->message)

* [workDoneProgress] fix test
2020-12-31 10:51:20 -08:00

93 lines
5.9 KiB
VimL

Describe lsp#internal#work_done_progress
Before each
let g:lsp_work_done_progress_enabled = 1
call lsp#internal#work_done_progress#_enable()
End
After each
let g:lsp_work_done_progress_enabled = 0
call lsp#internal#work_done_progress#_disable()
End
It should be able to subscribe to $progress stream
let l:server1_response1 = {'method': '$/progress', 'params':{'token':'token text','value':{'kind':'begin', 'title':'title'}}}
let l:server1_response2 = {'method': '$/progress', 'params':{'token':'token text','value':{'percentage':50,'message':'test message','kind':'report'}}}
let l:server1_response3 = {'method': '$/progress', 'params':{'token':'token text','value':{'kind':'end'}}}
Assert Equals(lsp#internal#work_done_progress#get_progress(), [])
call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response1 })
Assert Equals(lsp#internal#work_done_progress#get_progress(),
\ [{'message': '', 'token': 'token text', 'title': 'title', 'server': 'server1'}])
call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response2 })
Assert Equals(lsp#internal#work_done_progress#get_progress(),
\ [{'message': 'test message', 'token': 'token text', 'percentage': 50, 'title': 'title', 'server': 'server1'}])
call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response3 })
Assert Equals(lsp#internal#work_done_progress#get_progress(), [])
End
It should be able to subscribe to multi $progress stream
let l:server1_response1 = {'method': '$/progress', 'params':{'token':'token text','value':{'kind':'begin', 'title':'title1'}}}
let l:server1_response2 = {'method': '$/progress', 'params':{'token':'token text','value':{'percentage':50,'message':'msg1','kind':'report'}}}
let l:server1_response3 = {'method': '$/progress', 'params':{'token':'token text','value':{'percentage':90,'message':'msg1','kind':'report'}}}
let l:server1_response4 = {'method': '$/progress', 'params':{'token':'token text','value':{'kind':'end'}}}
let l:server2_response1 = {'method': '$/progress', 'params':{'token':'server2_token','value':{'kind':'begin', 'title':'title2'}}}
let l:server2_response2 = {'method': '$/progress', 'params':{'token':'server2_token','value':{'percentage':0,'message':'msg2','kind':'report'}}}
let l:server2_response3 = {'method': '$/progress', 'params':{'token':'server2_token','value':{'kind':'end'}}}
Assert Equals(lsp#internal#work_done_progress#get_progress(), [])
call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response1 })
Assert Equals(lsp#internal#work_done_progress#get_progress(),
\ [{'message': '', 'token': 'token text', 'title': 'title1', 'server': 'server1'}])
call lsp#stream(1, { 'server': 'server2', 'response': l:server2_response1 })
Assert Equals(lsp#internal#work_done_progress#get_progress(),
\ [{'message': '', 'token': 'server2_token', 'title': 'title2', 'server': 'server2'},
\ {'message': '', 'token': 'token text', 'title': 'title1', 'server': 'server1'}])
call lsp#stream(1, { 'server': 'server2', 'response': l:server2_response2 })
Assert Equals(lsp#internal#work_done_progress#get_progress(),
\ [{'message': 'msg2', 'token': 'server2_token', 'percentage':0, 'title': 'title2', 'server': 'server2'},
\ {'message': '', 'token': 'token text', 'title': 'title1', 'server': 'server1'}])
call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response2 })
Assert Equals(lsp#internal#work_done_progress#get_progress(),
\ [{'message': 'msg1', 'token': 'token text', 'percentage':50, 'title': 'title1', 'server': 'server1'},
\ {'message': 'msg2', 'token': 'server2_token', 'percentage':0, 'title': 'title2', 'server': 'server2'}])
call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response3 })
Assert Equals(lsp#internal#work_done_progress#get_progress(),
\ [{'message': 'msg1', 'token': 'token text', 'percentage':90, 'title': 'title1', 'server': 'server1'},
\ {'message': 'msg2', 'token': 'server2_token', 'percentage':0, 'title': 'title2', 'server': 'server2'}])
call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response4 })
Assert Equals(lsp#internal#work_done_progress#get_progress(),
\ [{'message': 'msg2', 'token': 'server2_token', 'percentage':0, 'title': 'title2', 'server': 'server2'}])
call lsp#stream(1, { 'server': 'server2', 'response': l:server2_response3 })
Assert Equals(lsp#internal#work_done_progress#get_progress(), [])
End
It should be returned correctly even if percentage and message do not exist.
let l:server1_response1 = {'method': '$/progress', 'params':{'token':'token text','value':{'kind':'begin', 'title':'title'}}}
let l:server1_response2 = {'method': '$/progress', 'params':{'token':'token text','value':{'kind':'report'}}}
let l:server1_response3 = {'method': '$/progress', 'params':{'token':'token text','value':{'kind':'end'}}}
Assert Equals(lsp#internal#work_done_progress#get_progress(), [])
call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response1 })
Assert Equals(lsp#internal#work_done_progress#get_progress(),
\ [{'message': '', 'token': 'token text', 'title': 'title', 'server': 'server1'}])
call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response2 })
Assert Equals(lsp#internal#work_done_progress#get_progress(),
\ [{'message': '', 'token': 'token text', 'title': 'title', 'server': 'server1'}])
call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response3 })
Assert Equals(lsp#internal#work_done_progress#get_progress(), [])
End
End