Skip to content

Commit d6d682d

Browse files
committed
Refactor test extraction into initialisation
1 parent 8e6d6ae commit d6d682d

File tree

1 file changed

+29
-24
lines changed

1 file changed

+29
-24
lines changed

autoload/OmniSharp/actions/test.vim

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ let s:run.running = 0
1010
let s:run.single = {}
1111
let s:run.multiple = {}
1212
let s:utils = {}
13+
let s:utils.init = {}
1314
let s:utils.log = {}
1415

1516
function! OmniSharp#actions#test#Debug(nobuild) abort
@@ -21,10 +22,9 @@ function! OmniSharp#actions#test#Debug(nobuild) abort
2122
call s:utils.initialize([bufnr('%')], s:debug.prepare)
2223
endfunction
2324

24-
function! s:debug.prepare(bufferCodeStructures) abort
25-
let bufnr = a:bufferCodeStructures[0][0]
26-
let codeElements = a:bufferCodeStructures[0][1]
27-
let tests = s:utils.extractTests(codeElements)
25+
function! s:debug.prepare(bufferTests) abort
26+
let bufnr = a:bufferTests[0].bufnr
27+
let tests = a:bufferTests[0].tests
2828
let currentTest = s:utils.findTest(tests)
2929
if type(currentTest) != type({})
3030
return s:utils.log.warn('No test found')
@@ -51,9 +51,7 @@ function! s:debug.launch(bufnr, tests, response) abort
5151
let testhost = [cmd] + args
5252
if !s:debug.process.start(testhost) | return | endif
5353
let s:run.running = 1
54-
let host = OmniSharp#GetHost()
5554
let s:omnisharp_pre_debug_cwd = getcwd()
56-
let new_cwd = fnamemodify(host.sln_or_dir, ':p:h')
5755
call vimspector#LaunchWithConfigurations({
5856
\ 'attach': {
5957
\ 'adapter': 'netcoredbg',
@@ -63,7 +61,8 @@ function! s:debug.launch(bufnr, tests, response) abort
6361
\ }
6462
\ }
6563
\})
66-
execute 'tcd' new_cwd
64+
let project_dir = fnamemodify(OmniSharp#GetHost(a:bufnr).sln_or_dir, ':p:h')
65+
execute 'tcd' project_dir
6766
let opts = {
6867
\ 'ResponseHandler': s:debug.complete,
6968
\ 'Parameters': {
@@ -108,10 +107,9 @@ function! OmniSharp#actions#test#Run(nobuild) abort
108107
call s:utils.initialize([bufnr('%')], s:run.single.test)
109108
endfunction
110109

111-
function! s:run.single.test(bufferCodeStructures) abort
112-
let bufnr = a:bufferCodeStructures[0][0]
113-
let codeElements = a:bufferCodeStructures[0][1]
114-
let tests = s:utils.extractTests(codeElements)
110+
function! s:run.single.test(bufferTests) abort
111+
let bufnr = a:bufferTests[0].bufnr
112+
let tests = a:bufferTests[0].tests
115113
let currentTest = s:utils.findTest(tests)
116114
if type(currentTest) != type({})
117115
return s:utils.log.warn('No test found')
@@ -184,12 +182,11 @@ function! OmniSharp#actions#test#RunInFile(nobuild, ...) abort
184182
call s:utils.initialize(buffers, s:run.multiple.prepare)
185183
endfunction
186184

187-
function! s:run.multiple.prepare(bufferCodeStructures) abort
185+
function! s:run.multiple.prepare(bufferTests) abort
188186
let Requests = []
189-
for bcs in a:bufferCodeStructures
190-
let bufnr = bcs[0]
191-
let codeElements = bcs[1]
192-
let tests = s:utils.extractTests(codeElements)
187+
for btests in a:bufferTests
188+
let bufnr = btests.bufnr
189+
let tests = btests.tests
193190
if len(tests)
194191
call add(Requests, funcref('s:run.multiple.inBuffer', [bufnr, tests]))
195192
endif
@@ -398,14 +395,22 @@ endfunction
398395
" code structures. All operations are performed asynchronously, and the
399396
" a:Callback is called when all buffer code structures have been fetched.
400397
function! s:utils.initialize(buffers, Callback) abort
401-
function! s:AwaitForBuffers(buffers, functionName, AwaitCallback, ...) abort
402-
call OmniSharp#util#AwaitParallel(
403-
\ map(copy(a:buffers), {i,b -> function(a:functionName, [b])}),
404-
\ a:AwaitCallback)
405-
endfunction
406-
call s:AwaitForBuffers(a:buffers, 'OmniSharp#actions#project#Get',
407-
\ function('s:AwaitForBuffers',
408-
\ [a:buffers, 'OmniSharp#actions#codestructure#Get', a:Callback]))
398+
call s:utils.init.await(a:buffers, 'OmniSharp#actions#project#Get',
399+
\ funcref('s:utils.init.await', [a:buffers, 'OmniSharp#actions#codestructure#Get',
400+
\ funcref('s:utils.init.extract', [a:Callback])]))
401+
endfunction
402+
403+
function! s:utils.init.await(buffers, functionName, Callback, ...) abort
404+
let Funcs = map(copy(a:buffers), {i,b -> function(a:functionName, [b])})
405+
call OmniSharp#util#AwaitParallel(Funcs, a:Callback)
406+
endfunction
407+
408+
function! s:utils.init.extract(Callback, codeStructures) abort
409+
let bufferTests = map(a:codeStructures, {i, cs -> {
410+
\ 'bufnr': cs[0],
411+
\ 'tests': s:utils.extractTests(cs[1])
412+
\}})
413+
call a:Callback(bufferTests)
409414
endfunction
410415

411416
function! s:utils.log.echo(highlightGroup, message) abort

0 commit comments

Comments
 (0)