Skip to content

Commit 0effd62

Browse files
mdjermanovicljharb
authored andcommitted
[Tests] test rules with ESLint v9
1 parent 84781c7 commit 0effd62

File tree

105 files changed

+263
-147
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

105 files changed

+263
-147
lines changed

.github/workflows/node-18+.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ jobs:
2626
matrix:
2727
node-version: ${{ fromJson(needs.matrix.outputs.latest) }}
2828
eslint:
29+
- 9
2930
- 8
3031
- 7
3132
- 6

tests/helpers/ruleTester.js

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
'use strict';
2+
3+
const ESLintRuleTester = require('eslint').RuleTester;
4+
const semver = require('semver');
5+
const eslintPkg = require('eslint/package.json');
6+
7+
// `item` can be a config passed to the constructor, or a test case object/string
8+
function convertToFlat(item, plugins) {
9+
if (typeof item === 'string') {
10+
return item;
11+
}
12+
13+
if (typeof item !== 'object' || item === null) {
14+
throw new TypeError('Invalid value for "item" option. Expected an object or a string.');
15+
}
16+
17+
const newItem = Object.assign({}, item, { languageOptions: {} });
18+
19+
if (newItem.parserOptions) {
20+
newItem.languageOptions.parserOptions = newItem.parserOptions;
21+
22+
if (newItem.parserOptions.ecmaVersion) {
23+
newItem.languageOptions.ecmaVersion = newItem.parserOptions.ecmaVersion;
24+
}
25+
26+
if (newItem.parserOptions.sourceType) {
27+
newItem.languageOptions.sourceType = newItem.parserOptions.sourceType;
28+
}
29+
30+
delete newItem.parserOptions;
31+
}
32+
33+
if (newItem.parser) {
34+
newItem.languageOptions.parser = require(newItem.parser); // eslint-disable-line global-require, import/no-dynamic-require
35+
delete newItem.parser;
36+
}
37+
38+
if (newItem.globals) {
39+
newItem.languageOptions.globals = newItem.globals;
40+
delete newItem.globals;
41+
}
42+
43+
if (plugins) {
44+
newItem.plugins = plugins;
45+
}
46+
47+
return newItem;
48+
}
49+
50+
let RuleTester = ESLintRuleTester;
51+
52+
if (semver.major(eslintPkg.version) >= 9) {
53+
const PLUGINS = Symbol('eslint-plugin-react plugins');
54+
const RULE_DEFINER = Symbol.for('react.RuleTester.RuleDefiner');
55+
56+
RuleTester = class extends ESLintRuleTester {
57+
constructor(config) {
58+
if ((typeof config !== 'object' && typeof config !== 'undefined') || config === null) {
59+
throw new TypeError('Invalid value for "config" option. Expected an object or undefined.');
60+
}
61+
62+
const newConfig = convertToFlat(config || {});
63+
64+
if (!newConfig.languageOptions.ecmaVersion) {
65+
newConfig.languageOptions.ecmaVersion = 5; // old default
66+
}
67+
68+
if (!newConfig.languageOptions.sourceType) {
69+
newConfig.languageOptions.sourceType = 'script'; // old default
70+
}
71+
72+
super(newConfig);
73+
74+
this[RULE_DEFINER] = {
75+
defineRule: (ruleId, rule) => {
76+
if (!this[PLUGINS]) {
77+
this[PLUGINS] = {};
78+
}
79+
80+
const ruleIdSplit = ruleId.split('/');
81+
82+
if (ruleIdSplit.length !== 2) {
83+
throw new Error('ruleId should be in the format: plugin-name/rule-name');
84+
}
85+
86+
const pluginName = ruleIdSplit[0];
87+
const ruleName = ruleIdSplit[1];
88+
89+
if (!this[PLUGINS][pluginName]) {
90+
this[PLUGINS][pluginName] = { rules: {} };
91+
}
92+
93+
this[PLUGINS][pluginName].rules[ruleName] = rule;
94+
},
95+
};
96+
}
97+
98+
run(ruleName, rule, tests) {
99+
const newTests = {
100+
valid: tests.valid.map((test) => convertToFlat(test, this[PLUGINS])),
101+
invalid: tests.invalid.map((test) => convertToFlat(test, this[PLUGINS])),
102+
};
103+
104+
super.run(ruleName, rule, newTests);
105+
}
106+
};
107+
}
108+
109+
module.exports = RuleTester;

tests/lib/rules/boolean-prop-naming.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
// ------------------------------------------------------------------------------
1111

12-
const RuleTester = require('eslint').RuleTester;
12+
const RuleTester = require('../../helpers/ruleTester');
1313
const rule = require('../../../lib/rules/boolean-prop-naming');
1414

1515
const parsers = require('../../helpers/parsers');

tests/lib/rules/button-has-type.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
// ------------------------------------------------------------------------------
1111

12-
const RuleTester = require('eslint').RuleTester;
12+
const RuleTester = require('../../helpers/ruleTester');
1313
const rule = require('../../../lib/rules/button-has-type');
1414

1515
const parsers = require('../../helpers/parsers');

tests/lib/rules/checked-requires-onchange-or-readonly.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
'use strict';
77

8-
const RuleTester = require('eslint').RuleTester;
8+
const RuleTester = require('../../helpers/ruleTester');
99
const rule = require('../../../lib/rules/checked-requires-onchange-or-readonly');
1010

1111
const parsers = require('../../helpers/parsers');

tests/lib/rules/default-props-match-prop-types.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
// Requirements
1111
// ------------------------------------------------------------------------------
1212

13-
const RuleTester = require('eslint').RuleTester;
13+
const RuleTester = require('../../helpers/ruleTester');
1414
const rule = require('../../../lib/rules/default-props-match-prop-types');
1515

1616
const parsers = require('../../helpers/parsers');

tests/lib/rules/destructuring-assignment.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
'use strict';
66

7-
const RuleTester = require('eslint').RuleTester;
87
const semver = require('semver');
98
const eslintPkg = require('eslint/package.json');
9+
const RuleTester = require('../../helpers/ruleTester');
1010
const rule = require('../../../lib/rules/destructuring-assignment');
1111

1212
const parsers = require('../../helpers/parsers');

tests/lib/rules/display-name.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
// ------------------------------------------------------------------------------
1111

12-
const RuleTester = require('eslint').RuleTester;
12+
const RuleTester = require('../../helpers/ruleTester');
1313
const rule = require('../../../lib/rules/display-name');
1414

1515
const parsers = require('../../helpers/parsers');

tests/lib/rules/forbid-component-props.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
// Requirements
99
// -----------------------------------------------------------------------------
1010

11-
const RuleTester = require('eslint').RuleTester;
11+
const RuleTester = require('../../helpers/ruleTester');
1212
const rule = require('../../../lib/rules/forbid-component-props');
1313

1414
const parsers = require('../../helpers/parsers');

tests/lib/rules/forbid-dom-props.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
// Requirements
99
// -----------------------------------------------------------------------------
1010

11-
const RuleTester = require('eslint').RuleTester;
11+
const RuleTester = require('../../helpers/ruleTester');
1212
const rule = require('../../../lib/rules/forbid-dom-props');
1313

1414
const parsers = require('../../helpers/parsers');

tests/lib/rules/forbid-elements.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
// Requirements
99
// -----------------------------------------------------------------------------
1010

11-
const RuleTester = require('eslint').RuleTester;
11+
const RuleTester = require('../../helpers/ruleTester');
1212
const rule = require('../../../lib/rules/forbid-elements');
1313

1414
const parsers = require('../../helpers/parsers');

tests/lib/rules/forbid-foreign-prop-types.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
// Requirements
99
// -----------------------------------------------------------------------------
1010

11-
const RuleTester = require('eslint').RuleTester;
11+
const RuleTester = require('../../helpers/ruleTester');
1212
const rule = require('../../../lib/rules/forbid-foreign-prop-types');
1313

1414
const parsers = require('../../helpers/parsers');

tests/lib/rules/forbid-prop-types.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
const babelEslintVersion = require('babel-eslint/package.json').version;
1212
const semver = require('semver');
13-
const RuleTester = require('eslint').RuleTester;
13+
const RuleTester = require('../../helpers/ruleTester');
1414

1515
const rule = require('../../../lib/rules/forbid-prop-types');
1616

tests/lib/rules/function-component-definition.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
// ------------------------------------------------------------------------------
1111

12-
const RuleTester = require('eslint').RuleTester;
12+
const RuleTester = require('../../helpers/ruleTester');
1313
const rule = require('../../../lib/rules/function-component-definition');
1414

1515
const parserOptions = {

tests/lib/rules/hook-use-state.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
// ------------------------------------------------------------------------------
1111

12-
const RuleTester = require('eslint').RuleTester;
12+
const RuleTester = require('../../helpers/ruleTester');
1313
const rule = require('../../../lib/rules/hook-use-state');
1414
const parsers = require('../../helpers/parsers');
1515

tests/lib/rules/iframe-missing-sandbox.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
// Requirements
99
// ------------------------------------------------------------------------------
1010

11-
const RuleTester = require('eslint').RuleTester;
11+
const RuleTester = require('../../helpers/ruleTester');
1212
const rule = require('../../../lib/rules/iframe-missing-sandbox');
1313

1414
const parsers = require('../../helpers/parsers');

tests/lib/rules/jsx-boolean-value.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
// ------------------------------------------------------------------------------
1111

12-
const RuleTester = require('eslint').RuleTester;
12+
const RuleTester = require('../../helpers/ruleTester');
1313
const rule = require('../../../lib/rules/jsx-boolean-value');
1414

1515
const parsers = require('../../helpers/parsers');

tests/lib/rules/jsx-child-element-spacing.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
const RuleTester = require('eslint').RuleTester;
3+
const RuleTester = require('../../helpers/ruleTester');
44
const rule = require('../../../lib/rules/jsx-child-element-spacing');
55

66
const parsers = require('../../helpers/parsers');

tests/lib/rules/jsx-closing-bracket-location.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
// ------------------------------------------------------------------------------
1111

12-
const RuleTester = require('eslint').RuleTester;
12+
const RuleTester = require('../../helpers/ruleTester');
1313
const rule = require('../../../lib/rules/jsx-closing-bracket-location');
1414

1515
const parsers = require('../../helpers/parsers');

tests/lib/rules/jsx-closing-tag-location.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
// ------------------------------------------------------------------------------
1111

12-
const RuleTester = require('eslint').RuleTester;
12+
const RuleTester = require('../../helpers/ruleTester');
1313
const rule = require('../../../lib/rules/jsx-closing-tag-location');
1414

1515
const parsers = require('../../helpers/parsers');

tests/lib/rules/jsx-curly-brace-presence.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
// Requirements
1212
// ------------------------------------------------------------------------------
1313

14-
const RuleTester = require('eslint').RuleTester;
1514
const semver = require('semver');
1615
const eslintPkg = require('eslint/package.json');
16+
const RuleTester = require('../../helpers/ruleTester');
1717
const rule = require('../../../lib/rules/jsx-curly-brace-presence');
1818

1919
const parsers = require('../../helpers/parsers');

tests/lib/rules/jsx-curly-newline.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
// Requirements
99
// ------------------------------------------------------------------------------
1010

11-
const RuleTester = require('eslint').RuleTester;
11+
const RuleTester = require('../../helpers/ruleTester');
1212
const rule = require('../../../lib/rules/jsx-curly-newline');
1313

1414
const parsers = require('../../helpers/parsers');

tests/lib/rules/jsx-curly-spacing.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
// Requirements
1111
// ------------------------------------------------------------------------------
1212

13-
const RuleTester = require('eslint').RuleTester;
13+
const RuleTester = require('../../helpers/ruleTester');
1414
const rule = require('../../../lib/rules/jsx-curly-spacing');
1515

1616
const parsers = require('../../helpers/parsers');

tests/lib/rules/jsx-equals-spacing.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
// ------------------------------------------------------------------------------
1111

12-
const RuleTester = require('eslint').RuleTester;
12+
const RuleTester = require('../../helpers/ruleTester');
1313
const rule = require('../../../lib/rules/jsx-equals-spacing');
1414

1515
const parsers = require('../../helpers/parsers');

tests/lib/rules/jsx-filename-extension.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
// ------------------------------------------------------------------------------
1111

12-
const RuleTester = require('eslint').RuleTester;
12+
const RuleTester = require('../../helpers/ruleTester');
1313
const rule = require('../../../lib/rules/jsx-filename-extension');
1414

1515
const parsers = require('../../helpers/parsers');

tests/lib/rules/jsx-first-prop-new-line.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
// -----------------------------------------------------------------------------
1111

12-
const RuleTester = require('eslint').RuleTester;
12+
const RuleTester = require('../../helpers/ruleTester');
1313
const rule = require('../../../lib/rules/jsx-first-prop-new-line');
1414

1515
const parsers = require('../../helpers/parsers');

tests/lib/rules/jsx-fragments.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
// ------------------------------------------------------------------------------
1111

12-
const RuleTester = require('eslint').RuleTester;
12+
const RuleTester = require('../../helpers/ruleTester');
1313
const rule = require('../../../lib/rules/jsx-fragments');
1414

1515
const parsers = require('../../helpers/parsers');

tests/lib/rules/jsx-handler-names.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
// ------------------------------------------------------------------------------
1111

12-
const RuleTester = require('eslint').RuleTester;
12+
const RuleTester = require('../../helpers/ruleTester');
1313
const rule = require('../../../lib/rules/jsx-handler-names');
1414

1515
const parsers = require('../../helpers/parsers');

tests/lib/rules/jsx-indent-props.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
// ------------------------------------------------------------------------------
1111

12-
const RuleTester = require('eslint').RuleTester;
12+
const RuleTester = require('../../helpers/ruleTester');
1313
const rule = require('../../../lib/rules/jsx-indent-props');
1414

1515
const parsers = require('../../helpers/parsers');

tests/lib/rules/jsx-indent.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
// Requirements
1010
// ------------------------------------------------------------------------------
1111

12-
const RuleTester = require('eslint').RuleTester;
1312
const semver = require('semver');
1413
const eslintVersion = require('eslint/package.json').version;
14+
const RuleTester = require('../../helpers/ruleTester');
1515
const rule = require('../../../lib/rules/jsx-indent');
1616

1717
const parsers = require('../../helpers/parsers');

tests/lib/rules/jsx-key.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
// ------------------------------------------------------------------------------
1111

12-
const RuleTester = require('eslint').RuleTester;
12+
const RuleTester = require('../../helpers/ruleTester');
1313
const rule = require('../../../lib/rules/jsx-key');
1414

1515
const parsers = require('../../helpers/parsers');

tests/lib/rules/jsx-max-depth.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
// ------------------------------------------------------------------------------
1111

12-
const RuleTester = require('eslint').RuleTester;
12+
const RuleTester = require('../../helpers/ruleTester');
1313
const rule = require('../../../lib/rules/jsx-max-depth');
1414

1515
const parsers = require('../../helpers/parsers');

0 commit comments

Comments
 (0)