@@ -23,6 +23,28 @@ endfunction
2323
2424
2525function ! 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
2648endfunction
2749
2850
@@ -49,27 +71,10 @@ function! OmniSharp#testrunner#Navigate() abort
4971 endif
5072 endif
5173 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
7378 endif
7479 endif
7580 endif
@@ -245,13 +250,15 @@ function! OmniSharp#testrunner#SetTests(bufferTests) abort
245250 let testproject = get (job.tests, projectname, {})
246251 let job.tests[projectname] = testproject
247252 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
255262 endfor
256263 endfor
257264 call s: Open ()
@@ -404,6 +411,32 @@ let s:utils.state2char = {
404411\ ' Failed' : ' !'
405412\}
406413
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+
407440function ! s: utils .getProjectName (bufnr ) abort
408441 let project = OmniSharp#GetHost (a: bufnr ).project
409442 let msbuildproject = get (project, ' MsBuildProject' , {})
0 commit comments