Skip to content

Commit 4b56d12

Browse files
committed
fix: Better config mutation in rule tester
1 parent f81d385 commit 4b56d12

File tree

4 files changed

+122
-42
lines changed

4 files changed

+122
-42
lines changed

__tests__/no-native.js

+20-20
Original file line numberDiff line numberDiff line change
@@ -33,26 +33,26 @@ for (const ruleTester of ruleTesters) {
3333
code: 'Promise.resolve()',
3434
errors: [{ message: '"Promise" is not defined.' }],
3535
},
36-
// {
37-
// code: 'new Promise(function(reject, resolve) { })',
38-
// errors: [{ message: '"Promise" is not defined.' }],
39-
// env: { browser: true },
40-
// },
41-
// {
42-
// code: 'new Promise(function(reject, resolve) { })',
43-
// errors: [{ message: '"Promise" is not defined.' }],
44-
// env: { node: true },
45-
// },
46-
// {
47-
// code: 'Promise.resolve()',
48-
// errors: [{ message: '"Promise" is not defined.' }],
49-
// env: { es6: true },
50-
// },
51-
// {
52-
// code: 'Promise.resolve()',
53-
// errors: [{ message: '"Promise" is not defined.' }],
54-
// globals: { Promise: true },
55-
// },
36+
{
37+
code: 'new Promise(function(reject, resolve) { })',
38+
errors: [{ message: '"Promise" is not defined.' }],
39+
env: { browser: true },
40+
},
41+
{
42+
code: 'new Promise(function(reject, resolve) { })',
43+
errors: [{ message: '"Promise" is not defined.' }],
44+
env: { node: true },
45+
},
46+
{
47+
code: 'Promise.resolve()',
48+
errors: [{ message: '"Promise" is not defined.' }],
49+
env: { es6: true },
50+
},
51+
{
52+
code: 'Promise.resolve()',
53+
errors: [{ message: '"Promise" is not defined.' }],
54+
globals: { Promise: true },
55+
},
5656
],
5757
})
5858
}

__tests__/rule-tester.js

+40-8
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,62 @@
55
'use strict'
66
const { version } = require('eslint/package.json')
77
const { RuleTester } = require('eslint')
8+
const globals = require('globals')
89

910
const majorVersion = Number.parseInt(version.split('.')[0], 10)
1011

11-
exports.RuleTester = function (config = {}) {
12-
if (majorVersion <= 8) {
13-
return new RuleTester(config)
12+
function convertConfig(config) {
13+
if (config instanceof Object === false) {
14+
return config
1415
}
1516

1617
if (config.languageOptions == null) {
1718
config.languageOptions = {}
1819
}
19-
if (config.languageOptions.ecmaVersion == null) {
20-
config.languageOptions.ecmaVersion = 2020
21-
}
20+
2221
if (config.parserOptions) {
2322
Object.assign(config.languageOptions, config.parserOptions)
2423
}
2524

26-
if (config.parser) {
25+
if (typeof config.parser === 'string') {
2726
config.languageOptions.parser = require(config.parser)
2827
}
2928

29+
if (config.globals instanceof Object) {
30+
config.languageOptions.globals = config.globals
31+
delete config.globals
32+
}
33+
34+
if (config.env instanceof Object) {
35+
if (config.languageOptions.globals == null) {
36+
config.languageOptions.globals = {}
37+
}
38+
39+
for (const key in config.env) {
40+
Object.assign(config.languageOptions.globals, globals[key])
41+
}
42+
43+
delete config.env
44+
}
45+
3046
delete config.parserOptions
3147
delete config.parser
3248

33-
return new RuleTester(config)
49+
return config
50+
}
51+
52+
exports.RuleTester = function (config = {}) {
53+
if (majorVersion <= 8) {
54+
return new RuleTester(config)
55+
}
56+
57+
const ruleTester = new RuleTester(convertConfig(config))
58+
const $run = ruleTester.run.bind(ruleTester)
59+
ruleTester.run = function (name, rule, tests) {
60+
tests.valid = tests.valid.map(convertConfig)
61+
tests.invalid = tests.invalid.map(convertConfig)
62+
63+
$run(name, rule, tests)
64+
}
65+
return ruleTester
3466
}

package-lock.json

+61-14
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
"eslint-plugin-jest": "^26.9.0",
7676
"eslint-plugin-node": "^11.1.0",
7777
"eslint-plugin-prettier": "^4.2.1",
78+
"globals": "^14.0.0",
7879
"husky": "^7.0.4",
7980
"jest": "^28.1.3",
8081
"lint-staged": "^12.5.0",

0 commit comments

Comments
 (0)