@@ -8,6 +8,7 @@ import * as typescriptESLintParser from "@typescript-eslint/parser"
8
8
import plugin = require( "../../src/index" )
9
9
import { applyFixes } from "./source-code-fixer"
10
10
import { parse as parseYaml , stringify as stringifyYaml } from "yaml"
11
+ import semver from "semver"
11
12
12
13
/**
13
14
* Prevents leading spaces in a multiline template literal from appearing in the resulting string
@@ -86,7 +87,27 @@ export function loadTestCases(
86
87
const validFixtureRoot = path . resolve ( rootDir , `./valid/` )
87
88
const invalidFixtureRoot = path . resolve ( rootDir , `./invalid/` )
88
89
89
- const filter = options ?. filter ?? ( ( ) => true )
90
+ const fileNameFilter = options ?. filter ?? ( ( ) => true )
91
+
92
+ function filter ( inputFile : string ) {
93
+ if ( ! fileNameFilter ( inputFile ) ) {
94
+ return false
95
+ }
96
+ const requirements = getRequirements ( inputFile )
97
+ if (
98
+ Object . entries ( requirements ) . some ( ( [ pkgName , pkgVersion ] ) => {
99
+ const pkg =
100
+ pkgName === "node"
101
+ ? { version : process . version }
102
+ : // eslint-disable-next-line @typescript-eslint/no-require-imports -- test
103
+ require ( `${ pkgName } /package.json` )
104
+ return ! semver . satisfies ( pkg . version , pkgVersion )
105
+ } )
106
+ ) {
107
+ return false
108
+ }
109
+ return true
110
+ }
90
111
91
112
const valid = listupInput ( validFixtureRoot )
92
113
. filter ( filter )
@@ -293,3 +314,17 @@ function getConfig(ruleName: string, inputFile: string) {
293
314
{ code, filename : inputFile } ,
294
315
)
295
316
}
317
+
318
+ function getRequirements ( inputFile : string ) : Record < string , string > {
319
+ let requirementsFile : string = inputFile . replace (
320
+ / i n p u t \. [ a - z ] + $ / u,
321
+ "requirements.json" ,
322
+ )
323
+ if ( ! fs . existsSync ( requirementsFile ) ) {
324
+ requirementsFile = path . join ( path . dirname ( inputFile ) , "_requirements.json" )
325
+ }
326
+ if ( fs . existsSync ( requirementsFile ) ) {
327
+ return JSON . parse ( fs . readFileSync ( requirementsFile , "utf8" ) )
328
+ }
329
+ return { }
330
+ }
0 commit comments