1
+ /* eslint-disable no-useless-call */
1
2
import type {
2
3
InvalidTestCase ,
3
4
RuleTester ,
@@ -47,7 +48,7 @@ export function createRuleTester(options: RuleTesterInitOptions): RuleTester {
47
48
...options . defaultFilenames ,
48
49
}
49
50
50
- function each ( c : TestCase ) {
51
+ async function each ( c : TestCase ) {
51
52
const testcase = normalizeTestCase ( c , languageOptions , defaultFilenames )
52
53
53
54
const {
@@ -111,6 +112,8 @@ export function createRuleTester(options: RuleTesterInitOptions): RuleTester {
111
112
}
112
113
}
113
114
115
+ await testcase . before ?. call ( testcase , configs )
116
+
114
117
const messages = linter . verify ( testcase . code ! , configs , testcase . filename )
115
118
// Rewrite ruleId to remove the plugin prefix
116
119
messages . forEach ( ( message ) => {
@@ -121,7 +124,7 @@ export function createRuleTester(options: RuleTesterInitOptions): RuleTester {
121
124
// Verify errors
122
125
if ( testcase . errors ) {
123
126
if ( typeof testcase . errors === 'function' ) {
124
- testcase . errors ( messages )
127
+ await testcase . errors ( messages )
125
128
}
126
129
else if ( typeof testcase . errors === 'number' ) {
127
130
expect . soft ( messages . length , 'number of error messages' ) . toBe ( testcase . errors )
@@ -170,7 +173,7 @@ export function createRuleTester(options: RuleTesterInitOptions): RuleTester {
170
173
if ( testcase . output === null ) // null means the output should be the same as the input
171
174
expect ( result . output , 'output' ) . toBe ( testcase . code )
172
175
else if ( typeof testcase . output === 'function' ) // custom assertion
173
- testcase . output ( result . output ! , testcase . code )
176
+ await testcase . output ( result . output ! , testcase . code )
174
177
175
178
else
176
179
expect ( result . output , 'output' ) . toBe ( testcase . output )
@@ -188,25 +191,29 @@ export function createRuleTester(options: RuleTesterInitOptions): RuleTester {
188
191
expect . soft ( messages , 'no errors after fix' ) . toEqual ( [ ] )
189
192
}
190
193
191
- testcase . onResult ?.( result )
194
+ await testcase . onResult ?.( result )
195
+ await testcase . after ?. call ( testcase , result )
192
196
193
- return result
197
+ return {
198
+ testcase,
199
+ result,
200
+ }
194
201
}
195
202
196
- function valid ( arg : ValidTestCase | string ) {
197
- const result = each ( arg )
198
- expect . soft ( result . messages , 'no errors on valid cases' ) . toEqual ( [ ] )
199
- expect . soft ( result . fixed , 'no need to fix for valid cases' ) . toBeFalsy ( )
203
+ async function valid ( arg : ValidTestCase | string ) {
204
+ const result = await each ( arg )
205
+ expect . soft ( result . result . messages , 'no errors on valid cases' ) . toEqual ( [ ] )
206
+ expect . soft ( result . result . fixed , 'no need to fix for valid cases' ) . toBeFalsy ( )
200
207
return result
201
208
}
202
209
203
- function invalid ( arg : InvalidTestCase | string ) {
204
- const result = each ( arg )
205
- expect . soft ( result . messages , 'expect errors' ) . not . toEqual ( [ ] )
210
+ async function invalid ( arg : InvalidTestCase | string ) {
211
+ const result = await each ( arg )
212
+ expect . soft ( result . result . messages , 'expect errors' ) . not . toEqual ( [ ] )
206
213
return result
207
214
}
208
215
209
- function run ( cases : TestCasesOptions ) {
216
+ async function run ( cases : TestCasesOptions ) {
210
217
describe ( options . name || 'rule-to-test' , ( ) => {
211
218
if ( cases . valid ?. length ) {
212
219
describe ( 'valid' , ( ) => {
@@ -218,8 +225,8 @@ export function createRuleTester(options: RuleTesterInitOptions): RuleTester {
218
225
if ( _case . skip )
219
226
run = it . skip
220
227
run ( `Valid #${ index } : ${ _case . description || _case . code } ` , async ( ) => {
221
- const result = valid ( _case )
222
- await cases ?. onResult ?.( _case , result )
228
+ const { testcase , result } = await valid ( _case )
229
+ await cases ?. onResult ?.( testcase , result )
223
230
} )
224
231
} ,
225
232
)
@@ -235,8 +242,8 @@ export function createRuleTester(options: RuleTesterInitOptions): RuleTester {
235
242
if ( _case . skip )
236
243
run = it . skip
237
244
run ( `Invalid #${ index } : ${ _case . description || _case . code } ` , async ( ) => {
238
- const result = invalid ( _case )
239
- await cases ?. onResult ?.( _case , result )
245
+ const { testcase , result } = await invalid ( _case )
246
+ await cases ?. onResult ?.( testcase , result )
240
247
} )
241
248
} )
242
249
} )
0 commit comments