@@ -3,7 +3,7 @@ import type { ExecaChildProcess } from 'execa'
3
3
import { execa } from 'execa'
4
4
import { extname , resolve } from 'pathe'
5
5
import { SourceMapConsumer } from 'source-map'
6
- import { ensurePackageInstalled } from '../utils'
6
+ import { ensurePackageInstalled , getTasks } from '../utils'
7
7
import type { Awaitable , File , ParsedStack , Task , TaskResultPack , TaskState , TscErrorInfo , Vitest } from '../types'
8
8
import { getRawErrsMapFromTsCompile , getTsconfig } from './parse'
9
9
import { createIndexMap } from './utils'
@@ -77,6 +77,26 @@ export class Typechecker {
77
77
return tests
78
78
}
79
79
80
+ protected markPassed ( file : File ) {
81
+ if ( ! file . result ?. state ) {
82
+ file . result = {
83
+ state : 'pass' ,
84
+ }
85
+ }
86
+ const markTasks = ( tasks : Task [ ] ) : void => {
87
+ for ( const task of tasks ) {
88
+ if ( 'tasks' in task )
89
+ markTasks ( task . tasks )
90
+ if ( ! task . result ?. state && task . mode === 'run' ) {
91
+ task . result = {
92
+ state : 'pass' ,
93
+ }
94
+ }
95
+ }
96
+ }
97
+ markTasks ( file . tasks )
98
+ }
99
+
80
100
protected async prepareResults ( output : string ) {
81
101
const typeErrors = await this . parseTscLikeOutput ( output )
82
102
const testFiles = new Set ( this . getFiles ( ) )
@@ -91,18 +111,20 @@ export class Typechecker {
91
111
const { file, definitions, map, parsed } = this . _tests ! [ path ]
92
112
const errors = typeErrors . get ( path )
93
113
files . push ( file )
94
- if ( ! errors )
114
+ if ( ! errors ) {
115
+ this . markPassed ( file )
95
116
return
117
+ }
96
118
const sortedDefinitions = [ ...definitions . sort ( ( a , b ) => b . start - a . start ) ]
97
119
// has no map for ".js" files that use // @ts-check
98
120
const mapConsumer = map && new SourceMapConsumer ( map )
99
121
const indexMap = createIndexMap ( parsed )
100
- const markFailed = ( task : Task ) => {
122
+ const markState = ( task : Task , state : TaskState ) => {
101
123
task . result = {
102
- state : task . mode === 'run' || task . mode === 'only' ? 'fail' : task . mode ,
124
+ state : task . mode === 'run' || task . mode === 'only' ? state : task . mode ,
103
125
}
104
126
if ( task . suite )
105
- markFailed ( task . suite )
127
+ markState ( task . suite , state )
106
128
}
107
129
errors . forEach ( ( { error, originalError } ) => {
108
130
const originalPos = mapConsumer ?. generatedPositionFor ( {
@@ -121,8 +143,10 @@ export class Typechecker {
121
143
}
122
144
errors . push ( error )
123
145
if ( state === 'fail' && suite . suite )
124
- markFailed ( suite . suite )
146
+ markState ( suite . suite , 'fail' )
125
147
} )
148
+
149
+ this . markPassed ( file )
126
150
} )
127
151
128
152
typeErrors . forEach ( ( errors , path ) => {
@@ -247,6 +271,9 @@ export class Typechecker {
247
271
}
248
272
249
273
public getTestPacks ( ) {
250
- return Object . values ( this . _tests || { } ) . map ( i => [ i . file . id , undefined ] as TaskResultPack )
274
+ return Object . values ( this . _tests || { } )
275
+ . map ( ( { file } ) => getTasks ( file ) )
276
+ . flat ( )
277
+ . map ( i => [ i . id , undefined ] as TaskResultPack )
251
278
}
252
279
}
0 commit comments