Skip to content

Commit 031fbe1

Browse files
committed
Add spinner for running tests
1 parent 7b1a837 commit 031fbe1

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
lines changed

autoload/OmniSharp/testrunner.vim

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,11 @@ function! s:Paint() abort
7777
call add(lines, ' ' . fnamemodify(testfile, ':.'))
7878
for name in keys(job.tests[testfile])
7979
let test = job.tests[testfile][name]
80-
call add(lines, printf('%s %s', s:state2char[test.state], name))
80+
let state = s:state2char[test.state]
81+
call add(lines, printf('%s %s', state, name))
82+
if state ==# '-' && !has_key(test, 'spintimer')
83+
call s:SpinnerStart(test, len(lines))
84+
endif
8185
endfor
8286
endfor
8387
call add(lines, '')
@@ -92,6 +96,42 @@ function! s:Paint() abort
9296
if bufnr() == s:testrunner_bufnr |call winrestview(winview) | endif
9397
endfunction
9498

99+
function! s:SpinnerSpin(test, lnum, timer) abort
100+
if s:state2char[a:test.state] !=# '-'
101+
call timer_stop(a:timer)
102+
return
103+
endif
104+
let lines = getbufline(s:testrunner_bufnr, a:lnum)
105+
if len(lines) == 0
106+
call timer_stop(a:timer)
107+
return
108+
endif
109+
let line = lines[0]
110+
let steps = get(g:, 'OmniSharp_testrunner_spinnersteps', [
111+
\ '<*---->', '<-*--->', '<--*-->', '<---*->',
112+
\ '<----*>', '<---*->', '<--*-->', '<-*--->'])
113+
if !has_key(a:test.spinner, 'index')
114+
let line .= ' -- ' . steps[0]
115+
let a:test.spinner.index = 0
116+
else
117+
let a:test.spinner.index += 1
118+
if a:test.spinner.index >= len(steps)
119+
let a:test.spinner.index = 0
120+
endif
121+
let line = substitute(line, ' -- \zs.*$', steps[a:test.spinner.index], '')
122+
endif
123+
call setbufvar(s:testrunner_bufnr, '&modifiable', 1)
124+
call setbufline(s:testrunner_bufnr, a:lnum, line)
125+
call setbufvar(s:testrunner_bufnr, '&modifiable', 0)
126+
endfunction
127+
128+
function! s:SpinnerStart(test, lnum) abort
129+
let a:test.spinner = {}
130+
let a:test.spinner.timer = timer_start(300,
131+
\ funcref('s:SpinnerSpin', [a:test, a:lnum]),
132+
\ {'repeat': -1})
133+
endfunction
134+
95135
function! OmniSharp#testrunner#SetTests(bufferTests) abort
96136
let winid = win_getid()
97137
for buffer in a:bufferTests

syntax/omnisharptest.vim

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,19 @@ syn region ostIntro start="\%1l" end="^$" contains=ostIntroDelim transparent
99
syn match ostIntroDelim "^=\+$" contained
1010

1111
syn match ostStateNotRun "^|.*" contains=ostStateChar
12-
syn match ostStateRunning "^-.*" contains=ostStateChar
12+
syn match ostStateRunning "^-.*" contains=ostStateChar,ostRunningSuffix
1313
syn match ostStatePassed "^\*.*" contains=ostStateChar
1414
syn match ostStateFailed "^!.*" contains=ostStateChar
1515
syn match ostStateChar "^[|\*!-]" conceal contained
16+
syn match ostRunningSuffix " -- .*" contained contains=ostRunningSpinner,ostRunningSuffixDivider
17+
syn match ostRunningSuffixDivider " \zs--" conceal contained
18+
syn match ostRunningSpinner " -- \zs.*" contained
1619

1720
hi def link ostIntroDelim PreProc
1821

1922
hi def link ostStateNotRun Comment
2023
hi def link ostStateRunning Identifier
24+
hi def link ostRunningSpinner Normal
2125
hi def link ostStatePassed Title
2226
hi def link ostStateFailed WarningMsg
2327

0 commit comments

Comments
 (0)