@@ -211,6 +211,10 @@ endfunction
211
211
212
212
213
213
let s: buffer = {}
214
+ function ! s: buffer .delimiter () abort
215
+ return get (g: , ' OmniSharp_testrunner_banner_delimeter' , ' ─' )
216
+ endfunction
217
+
214
218
function ! s: buffer .focus () abort
215
219
if ! has_key (s: runner , ' bufnr' ) | return | endif
216
220
if getbufvar (s: runner .bufnr , ' &ft' ) !=# ' omnisharptest' | return | endif
@@ -231,28 +235,7 @@ function! s:buffer.paint() abort
231
235
let lines = []
232
236
endif
233
237
for key in sort (keys (s: tests ))
234
- let [assembly, sln] = split (key , ' ;' )
235
- if ! s: tests [key ].visible | continue | endif
236
- call add (lines , key . (len (s: tests [key ].errors) ? ' ERROR' : ' ' ))
237
- for errorline in s: tests [key ].errors
238
- call add (lines , ' < ' . trim (errorline, ' ' , 2 ))
239
- endfor
240
- let loglevel = get (g: , ' OmniSharp_testrunner_loglevel' , ' error' )
241
- if loglevel == ? ' all' || (loglevel == ? ' error' && len (s: tests [key ].errors))
242
- " The diagnostic logs (build output) are only displayed when a single file
243
- " is tested, otherwise multiple build outputs are intermingled
244
- if s: current .singlebuffer != -1
245
- let [ssln, sass, _] = s: utils .getProject (s: current .singlebuffer)
246
- if ssln == # sln && sass == # assembly
247
- if len (s: tests [key ].errors) > 0 && len (s: current .log ) > 1
248
- call add (lines , ' < ' . repeat (delimiter , 10 ))
249
- endif
250
- for log in s: current .log
251
- call add (lines , ' < ' . trim (log , ' ' , 2 ))
252
- endfor
253
- endif
254
- endif
255
- endif
238
+ call extend (lines , self .paintproject (key ))
256
239
for testfile in sort (keys (s: tests [key ].files ))
257
240
if ! s: tests [key ].files [testfile].visible | continue | endif
258
241
let tests = s: tests [key ].files [testfile].tests
@@ -280,18 +263,61 @@ endfunction
280
263
281
264
function ! s: buffer .paintbanner () abort
282
265
let lines = []
283
- let delimiter = get (g: , ' OmniSharp_testrunner_banner_delimeter' , ' ─' )
284
- call add (lines , ' `' . repeat (delimiter , 80 ))
266
+ call add (lines , ' `' . repeat (self .delimiter (), 80 ))
285
267
call add (lines , ' ` OmniSharp Test Runner' )
286
- call add (lines , ' ` ' . repeat (delimiter , 76 ))
268
+ call add (lines , ' ` ' . repeat (self . delimiter () , 76 ))
287
269
call add (lines , ' ` <F1> Toggle this menu (:help omnisharp-test-runner for more)' )
288
270
call add (lines , ' ` <F5> Run test or tests in file under cursor' )
289
271
call add (lines , ' ` <F6> Debug test under cursor' )
290
272
call add (lines , ' ` <CR> Navigate to test or stack trace' )
291
- call add (lines , ' `' . repeat (delimiter , 80 ))
273
+ call add (lines , ' `' . repeat (self .delimiter (), 80 ))
274
+ return lines
275
+ endfunction
276
+
277
+ function ! s: buffer .paintproject (key ) abort
278
+ let [assembly, sln] = split (a: key , ' ;' )
279
+ if ! s: tests [a: key ].visible
280
+ return []
281
+ endif
282
+ let lines = []
283
+ call add (lines , a: key . (len (s: tests [a: key ].errors) ? ' ERROR' : ' ' ))
284
+ for errorline in s: tests [a: key ].errors
285
+ call add (lines , ' < ' . trim (errorline, ' ' , 2 ))
286
+ endfor
287
+ let loglevel = get (g: , ' OmniSharp_testrunner_loglevel' , ' error' )
288
+ if loglevel == ? ' all' || (loglevel == ? ' error' && len (s: tests [a: key ].errors))
289
+ " The diagnostic logs (build output) are only displayed when a single file
290
+ " is tested, otherwise multiple build outputs are intermingled
291
+ if s: current .singlebuffer != -1
292
+ let [ssln, sass, _] = s: utils .getProject (s: current .singlebuffer)
293
+ if ssln == # sln && sass == # assembly
294
+ if len (s: tests [a: key ].errors) > 0 && len (s: current .log ) > 1
295
+ call add (lines , ' < ' . repeat (self .delimiter (), 10 ))
296
+ endif
297
+ for log in s: current .log
298
+ call add (lines , ' < ' . trim (log , ' ' , 2 ))
299
+ endfor
300
+ endif
301
+ endif
302
+ endif
292
303
return lines
293
304
endfunction
294
305
306
+ function ! s: buffer .repaintproject (key ) abort
307
+ if ! has_key (s: runner , ' bufnr' ) | return | endif
308
+ let projectlines = s: buffer .paintproject (a: key )
309
+ call setbufvar (s: runner .bufnr , ' &modifiable' , 1 )
310
+ let lines = getbufline (s: runner .bufnr , 1 , ' $' )
311
+ let pattern = ' ^' . substitute (a: key , ' /' , ' \\/' , ' g' )
312
+ let projectline = match (lines , pattern) + 1
313
+ let pattern = ' ^ '
314
+ let endline = match (lines , ' ^ ' , projectline)
315
+ call deletebufline (s: runner .bufnr , projectline, endline)
316
+ call appendbufline (s: runner .bufnr , projectline - 1 , projectlines)
317
+ call setbufvar (s: runner .bufnr , ' &modifiable' , 0 )
318
+ call setbufvar (s: runner .bufnr , ' &modified' , 0 )
319
+ endfunction
320
+
295
321
function ! s: buffer .painttest (test, lnum) abort
296
322
if a: test .state == # ' hidden'
297
323
return []
@@ -332,6 +358,27 @@ function! s:buffer.painttest(test, lnum) abort
332
358
return lines
333
359
endfunction
334
360
361
+ function ! s: buffer .repainttest (filename, testname, test) abort
362
+ if ! has_key (s: runner , ' bufnr' ) | return | endif
363
+ call setbufvar (s: runner .bufnr , ' &modifiable' , 1 )
364
+ let lines = getbufline (s: runner .bufnr , 1 , ' $' )
365
+ let pattern = ' ^ ' . substitute (a: filename , ' /' , ' \\/' , ' g' )
366
+ let fileline = match (lines , pattern) + 1
367
+ let pattern = ' ^[-|*!] \%(|| .\{-} || \)\?' . a: testname
368
+ let testline = match (lines , pattern, fileline) + 1
369
+ let endline = min (
370
+ \ filter (
371
+ \ map (
372
+ \ [' ^[-|*!] \S' , ' ^__$' , ' ^$' ],
373
+ \ {_,pattern - > match (lines , pattern, testline)}),
374
+ \ {_,matchline - > matchline >= testline}))
375
+ let testlines = s: buffer .painttest (a: test , testline)
376
+ call deletebufline (s: runner .bufnr , testline, endline)
377
+ call appendbufline (s: runner .bufnr , testline - 1 , testlines)
378
+ call setbufvar (s: runner .bufnr , ' &modifiable' , 0 )
379
+ call setbufvar (s: runner .bufnr , ' &modified' , 0 )
380
+ endfunction
381
+
335
382
336
383
function ! OmniSharp#testrunner#SetBreakpoints () abort
337
384
if ! OmniSharp#util#HasVimspector ()
@@ -439,27 +486,8 @@ function! s:UpdateState(bufnr, state, ...) abort
439
486
let test.message = get (opts, ' message' , [])
440
487
let test.stacktrace = stacktrace
441
488
let test.output = get (opts, ' output' , [])
442
-
443
- if ! has_key (s: runner , ' bufnr' ) | continue | endif
444
- call setbufvar (s: runner .bufnr , ' &modifiable' , 1 )
445
- let lines = getbufline (s: runner .bufnr , 1 , ' $' )
446
- let pattern = ' ^ ' . substitute (filename, ' /' , ' \\/' , ' g' )
447
- let fileline = match (lines , pattern) + 1
448
- let pattern = ' ^[-|*!] \%(|| .\{-} || \)\?' . testname
449
- let testline = match (lines , pattern, fileline) + 1
450
-
451
- let patterns = [' ^[-|*!] \S' , ' ^__$' , ' ^$' ]
452
- let endline = min (
453
- \ filter (
454
- \ map (
455
- \ patterns,
456
- \ {_,pattern - > match (lines , pattern, testline)}),
457
- \ {_,matchline - > matchline >= testline}))
458
- let testlines = s: buffer .painttest (test, testline)
459
- call deletebufline (s: runner .bufnr , testline, endline)
460
- call appendbufline (s: runner .bufnr , testline - 1 , testlines)
461
- call setbufvar (s: runner .bufnr , ' &modifiable' , 0 )
462
- call setbufvar (s: runner .bufnr , ' &modified' , 0 )
489
+ call s: buffer .repaintproject (key )
490
+ call s: buffer .repainttest (filename, testname, test)
463
491
endif
464
492
endfor
465
493
if ! get (g: , ' OmniSharp_testrunner' , 1 ) | return | endif
0 commit comments