@@ -23,6 +23,28 @@ endfunction
23
23
24
24
25
25
function ! OmniSharp#testrunner#Run () abort
26
+ let filename = ' '
27
+ let line = getline (' .' )
28
+ if line = ~# ' ^\a'
29
+ " Project selected - run all tests
30
+ let projectname = getline (' .' )
31
+ for sln_or_dir in OmniSharp#proc#ListRunningJobs ()
32
+ let job = OmniSharp#proc#GetJob (sln_or_dir)
33
+ if has_key (job, ' tests' ) && has_key (job.tests, projectname)
34
+ call OmniSharp#actions#test#RunInFile (1 , keys (job.tests[projectname]))
35
+ endif
36
+ endfor
37
+ elseif line = ~# ' ^ \f'
38
+ " File selected
39
+ let filename = trim (line )
40
+ call OmniSharp#actions#test#RunInFile (0 , filename)
41
+ return
42
+ else
43
+ let test = s: utils .findTest ()
44
+ if has_key (test, ' filename' )
45
+ call OmniSharp#actions#test#Run (0 , test.filename, test.name)
46
+ endif
47
+ endif
26
48
endfunction
27
49
28
50
@@ -49,27 +71,10 @@ function! OmniSharp#testrunner#Navigate() abort
49
71
endif
50
72
endif
51
73
if filename == # ' '
52
- " Search for test
53
- let testpattern = ' [-|*!] \S'
54
- if line = ~# testpattern
55
- let testline = line (' .' )
56
- else
57
- let testline = search (testpattern, ' bcnWz' )
58
- endif
59
- if testline > 0
60
- let testname = matchlist (getline (testline), ' [-|*!] \zs.*$' )[0 ]
61
- let projectline = search (' ^\a' , ' bcnWz' )
62
- let projectname = matchlist (getline (projectline), ' ^\S\+' )[0 ]
63
- let fileline = search (' ^ \f' , ' bcnWz' )
64
- let filename = matchlist (getline (fileline), ' ^ \zs.*$' )[0 ]
65
- let filename = fnamemodify (filename, ' :p' )
66
- for sln_or_dir in OmniSharp#proc#ListRunningJobs ()
67
- let job = OmniSharp#proc#GetJob (sln_or_dir)
68
- if has_key (job, ' tests' ) && has_key (job.tests, projectname)
69
- let lnum = job.tests[projectname][filename][testname].lnum
70
- break
71
- endif
72
- endfor
74
+ let test = s: utils .findTest ()
75
+ if has_key (test, ' filename' )
76
+ let filename = test.filename
77
+ let lnum = test.lnum
73
78
endif
74
79
endif
75
80
endif
@@ -245,13 +250,15 @@ function! OmniSharp#testrunner#SetTests(bufferTests) abort
245
250
let testproject = get (job.tests, projectname, {})
246
251
let job.tests[projectname] = testproject
247
252
let filename = fnamemodify (bufname (buffer .bufnr ), ' :p' )
248
- let existing = get (testproject, filename, {})
249
- let testproject[filename] = existing
250
- for test in buffer .tests
251
- let extest = get (existing, test.name, { ' state' : ' Not run' })
252
- let existing[test.name] = extest
253
- let extest.framework = test.framework
254
- let extest.lnum = test.nameRange.Start.Line
253
+ let filetests = get (testproject, filename, {})
254
+ let testproject[filename] = filetests
255
+ for buffertest in buffer .tests
256
+ let test = get (filetests, buffertest.name, { ' state' : ' Not run' })
257
+ let filetests[buffertest.name] = test
258
+ let test.name = buffertest.name
259
+ let test.filename = filename
260
+ let test.framework = buffertest.framework
261
+ let test.lnum = buffertest.nameRange.Start.Line
255
262
endfor
256
263
endfor
257
264
call s: Open ()
@@ -404,6 +411,32 @@ let s:utils.state2char = {
404
411
\ ' Failed' : ' !'
405
412
\}
406
413
414
+ function ! s: utils .findTest () abort
415
+ if &filetype !=# ' omnisharptest' | return {} | endif
416
+ let testpattern = ' [-|*!] \S'
417
+ let line = getline (' .' )
418
+ if line = ~# testpattern
419
+ let testline = line (' .' )
420
+ else
421
+ let testline = search (testpattern, ' bcnWz' )
422
+ endif
423
+ if testline > 0
424
+ let testname = matchlist (getline (testline), ' [-|*!] \zs.*$' )[0 ]
425
+ let projectline = search (' ^\a' , ' bcnWz' )
426
+ let projectname = matchlist (getline (projectline), ' ^\S\+' )[0 ]
427
+ let fileline = search (' ^ \f' , ' bcnWz' )
428
+ let filename = matchlist (getline (fileline), ' ^ \zs.*$' )[0 ]
429
+ let filename = fnamemodify (filename, ' :p' )
430
+ for sln_or_dir in OmniSharp#proc#ListRunningJobs ()
431
+ let job = OmniSharp#proc#GetJob (sln_or_dir)
432
+ if has_key (job, ' tests' ) && has_key (job.tests, projectname)
433
+ return job.tests[projectname][filename][testname]
434
+ endif
435
+ endfor
436
+ endif
437
+ return {}
438
+ endfunction
439
+
407
440
function ! s: utils .getProjectName (bufnr ) abort
408
441
let project = OmniSharp#GetHost (a: bufnr ).project
409
442
let msbuildproject = get (project, ' MsBuildProject' , {})
0 commit comments