@@ -2,6 +2,19 @@ scriptencoding utf-8
2
2
let s: save_cpo = &cpoptions
3
3
set cpoptions &vim
4
4
5
+ let s: current = get (s: , ' current' , {})
6
+ let s: runner = get (s: , ' runner' , {})
7
+
8
+ function ! OmniSharp#testrunner#Init (buffers ) abort
9
+ let s: current .log = []
10
+ let s: current .singlebuffer = len (a: buffers ) == 1 ? a: buffers [0 ] : -1
11
+ let s: current .testnames = {}
12
+ endfunction
13
+
14
+ function ! OmniSharp#testrunner#Log (message) abort
15
+ call extend (s: current .log , a: message )
16
+ endfunction
17
+
5
18
function ! OmniSharp#testrunner#Open () abort
6
19
if ! OmniSharp#actions#test#Validate () | return | endif
7
20
call s: Open ()
@@ -30,18 +43,18 @@ function s:Open() abort
30
43
if &filetype !=# ft
31
44
botright new
32
45
endif
33
- let s: testrunner_bufnr = bufnr ()
46
+ let s: runner . bufnr = bufnr ()
34
47
let &filetype = ft
35
48
execute ' file' title
36
49
call s: Paint ()
37
50
endfunction
38
51
39
52
function ! s: Repaint () abort
40
- if ! exists ( ' s:testrunner_bufnr ' ) | return | endif
41
- if getbufvar (s: testrunner_bufnr , ' &ft' ) !=# ' omnisharptest' | return | endif
53
+ if ! has_key ( s: runner , ' bufnr ' ) | return | endif
54
+ if getbufvar (s: runner . bufnr , ' &ft' ) !=# ' omnisharptest' | return | endif
42
55
" If the buffer is listed in a window in the current tab, then focus it
43
56
for winnr in range (1 , winnr (' $' ))
44
- if winbufnr (winnr ) == s: testrunner_bufnr
57
+ if winbufnr (winnr ) == s: runner . bufnr
45
58
let l: winid = win_getid ()
46
59
call win_gotoid (win_getid (winnr ))
47
60
break
@@ -76,6 +89,16 @@ function! s:Paint() abort
76
89
for errorline in errors
77
90
call add (lines , ' < ' . trim (errorline, ' ' , 2 ))
78
91
endfor
92
+ " The diagnostic logs (build output) are only displayed when a single file
93
+ " is tested, otherwise multiple build outputs are intermingled
94
+ if OmniSharp#GetHost (s: current .singlebuffer).sln_or_dir == # sln_or_dir
95
+ if len (errors) > 0 && len (s: current .log ) > 1
96
+ call add (lines , ' < ' . repeat (delimiter , 10 ))
97
+ endif
98
+ for log in s: current .log
99
+ call add (lines , ' < ' . trim (log , ' ' , 2 ))
100
+ endfor
101
+ endif
79
102
for testfile in sort (keys (job.tests[testproject]))
80
103
call add (lines , ' ' . fnamemodify (testfile, ' :.' ))
81
104
let tests = job.tests[testproject][testfile]
@@ -111,13 +134,13 @@ function! s:Paint() abort
111
134
call add (lines , ' ' )
112
135
endfor
113
136
114
- if bufnr () == s: testrunner_bufnr | let winview = winsaveview () | endif
115
- call setbufvar (s: testrunner_bufnr , ' &modifiable' , 1 )
116
- call deletebufline (s: testrunner_bufnr , 1 , ' $' )
117
- call setbufline (s: testrunner_bufnr , 1 , lines )
118
- call setbufvar (s: testrunner_bufnr , ' &modifiable' , 0 )
119
- call setbufvar (s: testrunner_bufnr , ' &modified' , 0 )
120
- if bufnr () == s: testrunner_bufnr
137
+ if bufnr () == s: runner . bufnr | let winview = winsaveview () | endif
138
+ call setbufvar (s: runner . bufnr , ' &modifiable' , 1 )
139
+ call deletebufline (s: runner . bufnr , 1 , ' $' )
140
+ call setbufline (s: runner . bufnr , 1 , lines )
141
+ call setbufvar (s: runner . bufnr , ' &modifiable' , 0 )
142
+ call setbufvar (s: runner . bufnr , ' &modified' , 0 )
143
+ if bufnr () == s: runner . bufnr
121
144
call winrestview (winview)
122
145
syn sync fromstart
123
146
endif
@@ -152,10 +175,9 @@ function! s:UpdateState(bufnr, state, ...) abort
152
175
let projectname = s: utils .getProjectName (a: bufnr )
153
176
let job.testerrors = get (job, ' testerrors' , {})
154
177
let job.testerrors[projectname] = get (opts, ' errors' , [])
155
- " TODO: parse errors like the stacktrace
156
178
let filename = fnamemodify (bufname (a: bufnr ), ' :p' )
157
179
let tests = job.tests[projectname][filename]
158
- for testname in get (opts, ' testnames' , s: lasttestnames )
180
+ for testname in get (opts, ' testnames' , s: current .testnames[ a: bufnr ] )
159
181
if has_key (tests, testname)
160
182
let stacktrace = []
161
183
for st in get (opts, ' stacktrace' , [])
@@ -207,7 +229,7 @@ endfunction
207
229
208
230
function ! OmniSharp#testrunner#StateRunning (bufnr , testnames) abort
209
231
let testnames = type (a: testnames ) == type ([]) ? a: testnames : [a: testnames ]
210
- let s: lasttestnames = testnames
232
+ let s: current .testnames[ a: bufnr ] = testnames
211
233
call s: UpdateState (a: bufnr , ' Running' , {' testnames' : testnames})
212
234
endfunction
213
235
@@ -216,7 +238,7 @@ function! OmniSharp#testrunner#StateSkipped(bufnr) abort
216
238
endfunction
217
239
218
240
219
- function ! OmniSharp#testrunner#toggleBanner () abort
241
+ function ! OmniSharp#testrunner#ToggleBanner () abort
220
242
let g: OmniSharp_testrunner_banner = 1 - get (g: , ' OmniSharp_testrunner_banner' , 1 )
221
243
call s: Paint ()
222
244
endfunction
@@ -247,7 +269,7 @@ function! s:spinner.spin(test, lnum, timer) abort
247
269
return
248
270
endif
249
271
let lnum = a: lnum + (get (g: , ' OmniSharp_testrunner_banner' , 1 ) ? 8 : 0 )
250
- let lines = getbufline (s: testrunner_bufnr , lnum)
272
+ let lines = getbufline (s: runner . bufnr , lnum)
251
273
if len (lines ) == 0
252
274
call timer_stop (a: timer )
253
275
return
@@ -267,10 +289,10 @@ function! s:spinner.spin(test, lnum, timer) abort
267
289
let step = steps[a: test .spinner.index ]
268
290
let line = substitute (line , ' -- \zs.*$' , step, ' ' )
269
291
endif
270
- call setbufvar (s: testrunner_bufnr , ' &modifiable' , 1 )
271
- call setbufline (s: testrunner_bufnr , lnum, line )
272
- call setbufvar (s: testrunner_bufnr , ' &modifiable' , 0 )
273
- call setbufvar (s: testrunner_bufnr , ' &modified' , 0 )
292
+ call setbufvar (s: runner . bufnr , ' &modifiable' , 1 )
293
+ call setbufline (s: runner . bufnr , lnum, line )
294
+ call setbufvar (s: runner . bufnr , ' &modifiable' , 0 )
295
+ call setbufvar (s: runner . bufnr , ' &modified' , 0 )
274
296
endfunction
275
297
276
298
function ! s: spinner .start (test, lnum) abort
0 commit comments