@@ -71,7 +71,11 @@ function! s:Paint() abort
71
71
let job = OmniSharp#proc#GetJob (sln_or_dir)
72
72
if ! has_key (job, ' tests' ) | continue | endif
73
73
for testproject in sort (keys (job.tests))
74
- call add (lines , testproject)
74
+ let errors = get (get (job, ' testerrors' , {}), testproject, [])
75
+ call add (lines , testproject . (len (errors) ? ' - ERROR' : ' ' ))
76
+ for errorline in errors
77
+ call add (lines , ' < ' . trim (errorline, ' ' , 2 ))
78
+ endfor
75
79
for testfile in sort (keys (job.tests[testproject]))
76
80
call add (lines , ' ' . fnamemodify (testfile, ' :.' ))
77
81
let tests = job.tests[testproject][testfile]
@@ -82,33 +86,24 @@ function! s:Paint() abort
82
86
if state == # ' -' && ! has_key (test, ' spintimer' )
83
87
call s: spinner .start (test, len (lines ))
84
88
endif
85
- let message = get (test, ' message' , [])
86
- if len (message)
87
- for messageline in message
88
- call add (lines , ' > ' . trim (messageline, ' ' , 2 ))
89
- endfor
90
- endif
91
- let stacktrace = get (test, ' stacktrace' , [])
92
- if len (stacktrace)
93
- for st in stacktrace
94
- let line = trim (st .text)
95
- if has_key (st , ' filename' )
96
- let line = ' __ ' . line . ' __'
97
- else
98
- let line = ' _._ ' . line . ' _._'
99
- endif
100
- if has_key (st , ' lnum' )
101
- let line .= ' line ' . st .lnum
102
- endif
103
- call add (lines , ' > ' . line )
104
- endfor
105
- endif
106
- let output = get (test, ' output' , [])
107
- if len (output)
108
- for outputline in output
109
- call add (lines , ' // ' . trim (outputline, ' ' , 2 ))
110
- endfor
111
- endif
89
+ for messageline in get (test, ' message' , [])
90
+ call add (lines , ' > ' . trim (messageline, ' ' , 2 ))
91
+ endfor
92
+ for stacktraceline in get (test, ' stacktrace' , [])
93
+ let line = trim (stacktraceline.text)
94
+ if has_key (stacktraceline, ' filename' )
95
+ let line = ' __ ' . line . ' __'
96
+ else
97
+ let line = ' _._ ' . line . ' _._'
98
+ endif
99
+ if has_key (stacktraceline, ' lnum' )
100
+ let line .= ' line ' . stacktraceline.lnum
101
+ endif
102
+ call add (lines , ' > ' . line )
103
+ endfor
104
+ for outputline in get (test, ' output' , [])
105
+ call add (lines , ' // ' . trim (outputline, ' ' , 2 ))
106
+ endfor
112
107
endfor
113
108
call add (lines , ' __' )
114
109
endfor
@@ -151,17 +146,19 @@ function! OmniSharp#testrunner#SetTests(bufferTests) abort
151
146
call win_gotoid (winid)
152
147
endfunction
153
148
154
- function ! s: UpdateState (bufnr , testnames, state , ... ) abort
155
- let message = a: 0 ? a: 1 : []
156
- let stacktraceraw = a: 0 > 1 ? a: 2 : []
157
- let output = a: 0 > 2 ? a: 3 : []
149
+ function ! s: UpdateState (bufnr , state , ... ) abort
150
+ let opts = a: 0 ? a: 1 : {}
151
+ let job = OmniSharp#GetHost (a: bufnr ).job
158
152
let projectname = s: utils .getProjectName (a: bufnr )
153
+ let job.testerrors = get (job, ' testerrors' , {})
154
+ let job.testerrors[projectname] = get (opts, ' errors' , [])
155
+ " TODO: parse errors like the stacktrace
159
156
let filename = fnamemodify (bufname (a: bufnr ), ' :p' )
160
- let tests = OmniSharp#GetHost ( a: bufnr ). job.tests[projectname][filename]
161
- for testname in a: testnames
157
+ let tests = job.tests[projectname][filename]
158
+ for testname in get (opts, ' testnames' , s: lasttestnames )
162
159
if has_key (tests, testname)
163
160
let stacktrace = []
164
- for st in stacktraceraw
161
+ for st in get (opts, ' stacktrace ' , [])
165
162
let parsed = matchlist (st , ' at \(.\+\) in \([^:]\+\)\(:line \(\d\+\)\)\?' )
166
163
if len (parsed)
167
164
call add (stacktrace, {
@@ -180,20 +177,14 @@ function! s:UpdateState(bufnr, testnames, state, ...) abort
180
177
endfor
181
178
182
179
let tests[testname].state = a: state
183
- let tests[testname].message = message
180
+ let tests[testname].message = get (opts, ' message' , [])
184
181
let tests[testname].stacktrace = stacktrace
185
- let tests[testname].output = output
182
+ let tests[testname].output = get (opts, ' output' , [])
186
183
endif
187
184
endfor
188
185
call s: Repaint ()
189
186
endfunction
190
187
191
- function ! OmniSharp#testrunner#StateRunning (bufnr , testnames) abort
192
- let testnames = type (a: testnames ) == type ([]) ? a: testnames : [a: testnames ]
193
- let s: lasttestnames = testnames
194
- call s: UpdateState (a: bufnr , testnames, ' Running' )
195
- endfunction
196
-
197
188
function ! OmniSharp#testrunner#StateComplete (location) abort
198
189
if get (a: location , ' type' , ' ' ) == # ' E'
199
190
let state = ' Failed'
@@ -202,14 +193,26 @@ function! OmniSharp#testrunner#StateComplete(location) abort
202
193
else
203
194
let state = ' Passed'
204
195
endif
205
- call s: UpdateState (a: .location.bufnr , [a: location .fullname], state ,
206
- \ get (a: location , ' message' , []),
207
- \ get (a: location , ' stacktrace' , []),
208
- \ get (a: location , ' output' , []))
196
+ call s: UpdateState (a: .location.bufnr , state , {
197
+ \ ' testnames' : [a: location .fullname],
198
+ \ ' message' : get (a: location , ' message' , []),
199
+ \ ' stacktrace' : get (a: location , ' stacktrace' , []),
200
+ \ ' output' : get (a: location , ' output' , [])
201
+ \} )
202
+ endfunction
203
+
204
+ function ! OmniSharp#testrunner#StateError (bufnr , messages ) abort
205
+ call s: UpdateState (a: bufnr , ' Not run' , {' errors' : a: messages })
206
+ endfunction
207
+
208
+ function ! OmniSharp#testrunner#StateRunning (bufnr , testnames) abort
209
+ let testnames = type (a: testnames ) == type ([]) ? a: testnames : [a: testnames ]
210
+ let s: lasttestnames = testnames
211
+ call s: UpdateState (a: bufnr , ' Running' , {' testnames' : testnames})
209
212
endfunction
210
213
211
214
function ! OmniSharp#testrunner#StateSkipped (bufnr ) abort
212
- call s: UpdateState (a: bufnr , s: lasttestnames , ' Not run' )
215
+ call s: UpdateState (a: bufnr , ' Not run' )
213
216
endfunction
214
217
215
218
0 commit comments