diff --git a/test/rules/consistent-type-specifier-style.spec.ts b/test/rules/consistent-type-specifier-style.spec.ts index 577941883b..093c8b8243 100644 --- a/test/rules/consistent-type-specifier-style.spec.ts +++ b/test/rules/consistent-type-specifier-style.spec.ts @@ -1,6 +1,6 @@ -import { TSESLint, TSESTree } from '@typescript-eslint/utils' +import { TSESTree } from '@typescript-eslint/utils' -import { parsers, test, wrapRun } from '../utils' +import { parsers, test, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/consistent-type-specifier-style' @@ -445,28 +445,28 @@ const FLOW_ONLY = { } as const describe('TypeScript', () => { - const ruleTester = new TSESLint.RuleTester({ + const ruleTester = new RuleTester({ parser: parsers.TS, parserOptions: { ecmaVersion: 6, sourceType: 'module', }, }) - wrapRun(ruleTester.run)('consistent-type-specifier-style', rule, { + ruleTester.run$('consistent-type-specifier-style', rule, { valid: [...COMMON_TESTS.valid, ...TS_ONLY.valid], invalid: [...COMMON_TESTS.invalid, ...TS_ONLY.invalid], }) }) describe('Babel/Flow', () => { - const ruleTester = new TSESLint.RuleTester({ + const ruleTester = new RuleTester({ parser: parsers.BABEL, parserOptions: { ecmaVersion: 6, sourceType: 'module', }, }) - wrapRun(ruleTester.run)('consistent-type-specifier-style', rule, { + ruleTester.run$('consistent-type-specifier-style', rule, { valid: [...COMMON_TESTS.valid, ...FLOW_ONLY.valid], invalid: [...COMMON_TESTS.invalid, ...FLOW_ONLY.invalid], }) diff --git a/test/rules/default.spec.ts b/test/rules/default.spec.ts index f60fe84d23..56758961b3 100644 --- a/test/rules/default.spec.ts +++ b/test/rules/default.spec.ts @@ -1,15 +1,13 @@ import path from 'node:path' -import { TSESLint } from '@typescript-eslint/utils' - -import { test, SYNTAX_CASES, parsers, wrapRun } from '../utils' +import { test, SYNTAX_CASES, parsers, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/default' import { CASE_SENSITIVE_FS } from 'eslint-plugin-import-x/utils' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('default', rule, { +ruleTester.run$('default', rule, { valid: [ test({ code: 'import "./malformed.js"' }), @@ -161,7 +159,7 @@ wrapRun(ruleTester.run)('default', rule, { // #311: import of mismatched case if (!CASE_SENSITIVE_FS) { - wrapRun(ruleTester.run)('default (path case-insensitivity)', rule, { + ruleTester.run$('default (path case-insensitivity)', rule, { valid: [ test({ code: 'import foo from "./jsx/MyUncoolComponent.jsx"', @@ -180,7 +178,7 @@ if (!CASE_SENSITIVE_FS) { describe('TypeScript', () => { const parser = parsers.TS - wrapRun(ruleTester.run)(`default`, rule, { + ruleTester.run$(`default`, rule, { valid: [ test({ code: `import foobar from "./typescript-default"`, diff --git a/test/rules/dynamic-import-chunkname.spec.ts b/test/rules/dynamic-import-chunkname.spec.ts index 4b73250471..6144396c3b 100644 --- a/test/rules/dynamic-import-chunkname.spec.ts +++ b/test/rules/dynamic-import-chunkname.spec.ts @@ -1,10 +1,10 @@ -import { TSESLint, TSESTree } from '@typescript-eslint/utils' +import { TSESTree } from '@typescript-eslint/utils' -import { SYNTAX_CASES, parsers, wrapRun } from '../utils' +import { SYNTAX_CASES, parsers, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/dynamic-import-chunkname' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() const pickyCommentFormat = '[a-zA-Z-_/.]+' @@ -43,7 +43,7 @@ const pickyChunkNameFormatError = { }, } as const -wrapRun(ruleTester.run)('dynamic-import-chunkname', rule, { +ruleTester.run$('dynamic-import-chunkname', rule, { valid: [ { code: `dynamicImport( @@ -971,7 +971,7 @@ describe('TypeScript', () => { const typescriptParser = parsers.TS const nodeType = TSESTree.AST_NODE_TYPES.ImportExpression - wrapRun(ruleTester.run)('dynamic-import-chunkname', rule, { + ruleTester.run$('dynamic-import-chunkname', rule, { valid: [ { code: `import('test')`, diff --git a/test/rules/export.spec.ts b/test/rules/export.spec.ts index 26c7f46cf3..6d2d0cfaee 100644 --- a/test/rules/export.spec.ts +++ b/test/rules/export.spec.ts @@ -1,12 +1,16 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { test, testFilePath, SYNTAX_CASES, parsers, wrapRun } from '../utils' +import { + test, + testFilePath, + SYNTAX_CASES, + parsers, + RuleTester, +} from '../utils' import rule from 'eslint-plugin-import-x/rules/export' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('export', rule, { +ruleTester.run$('export', rule, { valid: [ test({ code: 'import "./malformed.js"' }), @@ -166,7 +170,7 @@ describe('TypeScript', () => { }, } - wrapRun(ruleTester.run)('export', rule, { + ruleTester.run$('export', rule, { valid: [ // type/value name clash test({ diff --git a/test/rules/exports-last.spec.ts b/test/rules/exports-last.spec.ts index 5f6035c82e..6944c08a28 100644 --- a/test/rules/exports-last.spec.ts +++ b/test/rules/exports-last.spec.ts @@ -1,11 +1,10 @@ -import { TSESLint } from '@typescript-eslint/utils' import type { TSESTree } from '@typescript-eslint/utils' -import { test, wrapRun } from '../utils' +import { test, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/exports-last' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() const error = (type: `${TSESTree.AST_NODE_TYPES}`) => ({ @@ -13,7 +12,7 @@ const error = (type: `${TSESTree.AST_NODE_TYPES}`) => type, }) as const -wrapRun(ruleTester.run)('exports-last', rule, { +ruleTester.run$('exports-last', rule, { valid: [ // Empty file test({ diff --git a/test/rules/extensions.spec.ts b/test/rules/extensions.spec.ts index 7863563539..20ab45aa66 100644 --- a/test/rules/extensions.spec.ts +++ b/test/rules/extensions.spec.ts @@ -1,12 +1,10 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { test, testFilePath, parsers, wrapRun } from '../utils' +import { test, testFilePath, parsers, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/extensions' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('extensions', rule, { +ruleTester.run$('extensions', rule, { valid: [ test({ code: 'import a from "@/a"' }), test({ code: 'import a from "a"' }), @@ -662,7 +660,7 @@ wrapRun(ruleTester.run)('extensions', rule, { describe('TypeScript', () => { const parser = parsers.TS - wrapRun(ruleTester.run)(`${parser}: extensions ignore type-only`, rule, { + ruleTester.run$(`${parser}: extensions ignore type-only`, rule, { valid: [ test({ code: 'import type T from "./typescript-declare";', diff --git a/test/rules/first.spec.ts b/test/rules/first.spec.ts index 8d19f9c277..aa3847c8c9 100644 --- a/test/rules/first.spec.ts +++ b/test/rules/first.spec.ts @@ -1,14 +1,12 @@ import fs from 'node:fs' -import { TSESLint } from '@typescript-eslint/utils' - -import { test, parsers, testFilePath, wrapRun } from '../utils' +import { test, parsers, testFilePath, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/first' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('first', rule, { +ruleTester.run$('first', rule, { valid: [ test({ code: "import { x } from './foo'; import { y } from './bar';\ @@ -101,7 +99,7 @@ describe('TypeScript', () => { }, } - wrapRun(ruleTester.run)('order', rule, { + ruleTester.run$('order', rule, { valid: [ test({ code: ` diff --git a/test/rules/group-exports.spec.ts b/test/rules/group-exports.spec.ts index bb2f9dcaa6..894468e9d7 100644 --- a/test/rules/group-exports.spec.ts +++ b/test/rules/group-exports.spec.ts @@ -1,6 +1,4 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { parsers, test, wrapRun } from '../utils' +import { parsers, test, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/group-exports' @@ -11,7 +9,7 @@ const errors = { 'Multiple CommonJS exports; consolidate all exports into a single assignment to `module.exports`', } -const ruleTester = new TSESLint.RuleTester({ +const ruleTester = new RuleTester({ parser: parsers.BABEL, parserOptions: { requireConfigFile: false, @@ -23,7 +21,7 @@ const ruleTester = new TSESLint.RuleTester({ }, }) -wrapRun(ruleTester.run)('group-exports', rule, { +ruleTester.run$('group-exports', rule, { valid: [ test({ code: 'export const test = true' }), test({ diff --git a/test/rules/max-dependencies.spec.ts b/test/rules/max-dependencies.spec.ts index 3591c88e73..b04846fc39 100644 --- a/test/rules/max-dependencies.spec.ts +++ b/test/rules/max-dependencies.spec.ts @@ -1,12 +1,10 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { test, parsers, wrapRun } from '../utils' +import { test, parsers, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/max-dependencies' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('max-dependencies', rule, { +ruleTester.run$('max-dependencies', rule, { valid: [ test({ code: 'import "./foo.js"' }), @@ -99,7 +97,7 @@ wrapRun(ruleTester.run)('max-dependencies', rule, { describe('TypeScript', () => { const parser = parsers.TS - wrapRun(ruleTester.run)('max-dependencies', rule, { + ruleTester.run$('max-dependencies', rule, { valid: [ test({ code: "import type { x } from './foo'; import { y } from './bar';", diff --git a/test/rules/named.spec.ts b/test/rules/named.spec.ts index 304b890937..c0883977e0 100644 --- a/test/rules/named.spec.ts +++ b/test/rules/named.spec.ts @@ -1,14 +1,19 @@ import path from 'node:path' import type { TSESTree } from '@typescript-eslint/utils' -import { TSESLint } from '@typescript-eslint/utils' -import { test, SYNTAX_CASES, testFilePath, parsers, wrapRun } from '../utils' +import { + test, + SYNTAX_CASES, + testFilePath, + parsers, + RuleTester, +} from '../utils' import rule from 'eslint-plugin-import-x/rules/named' import { CASE_SENSITIVE_FS } from 'eslint-plugin-import-x/utils' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() function error( name: string, @@ -18,7 +23,7 @@ function error( return { message: `${name} not found in '${module}'`, type } } -wrapRun(ruleTester.run)('named', rule, { +ruleTester.run$('named', rule, { valid: [ test({ code: 'import "./malformed.js"' }), @@ -388,7 +393,7 @@ wrapRun(ruleTester.run)('named', rule, { // #311: import of mismatched case if (!CASE_SENSITIVE_FS) { - wrapRun(ruleTester.run)('named (path case-insensitivity)', rule, { + ruleTester.run$('named (path case-insensitivity)', rule, { valid: [ test({ code: 'import { b } from "./Named-Exports"', @@ -404,7 +409,7 @@ if (!CASE_SENSITIVE_FS) { } // export-all -wrapRun(ruleTester.run)('named (export *)', rule, { +ruleTester.run$('named (export *)', rule, { valid: [ test({ code: 'import { foo } from "./export-all"', @@ -565,7 +570,7 @@ describe('TypeScript', () => { ) } - wrapRun(ruleTester.run)(`named [TypeScript]`, rule, { + ruleTester.run$(`named [TypeScript]`, rule, { valid, invalid, }) diff --git a/test/rules/namespace.spec.ts b/test/rules/namespace.spec.ts index e731c2e1ac..5c5c00b3be 100644 --- a/test/rules/namespace.spec.ts +++ b/test/rules/namespace.spec.ts @@ -1,10 +1,14 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { test, SYNTAX_CASES, testFilePath, parsers, wrapRun } from '../utils' +import { + test, + SYNTAX_CASES, + testFilePath, + parsers, + RuleTester, +} from '../utils' import rule from 'eslint-plugin-import-x/rules/namespace' -const ruleTester = new TSESLint.RuleTester({ +const ruleTester = new RuleTester({ parserOptions: { env: { es6: true } }, }) @@ -457,4 +461,4 @@ for (const [folder, parser] of [['deep'], ['deep-es7', parsers.BABEL]]) { ) } -wrapRun(ruleTester.run)('namespace', rule, { valid, invalid }) +ruleTester.run$('namespace', rule, { valid, invalid }) diff --git a/test/rules/newline-after-import.spec.ts b/test/rules/newline-after-import.spec.ts index 8a8cb66448..20d7555fd1 100644 --- a/test/rules/newline-after-import.spec.ts +++ b/test/rules/newline-after-import.spec.ts @@ -1,10 +1,8 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { parsers, wrapRun } from '../utils' +import { parsers, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/newline-after-import' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() const getImportError = (count: number) => ({ messageId: 'newline' as const, @@ -28,7 +26,7 @@ const getRequireError = (count: number) => ({ const REQUIRE_ERROR = getRequireError(1) -wrapRun(ruleTester.run)('newline-after-import', rule, { +ruleTester.run$('newline-after-import', rule, { valid: [ `var path = require('path');\nvar foo = require('foo');\n`, `require('foo');`, diff --git a/test/rules/no-absolute-path.spec.ts b/test/rules/no-absolute-path.spec.ts index b12e88049e..9fa97ac333 100644 --- a/test/rules/no-absolute-path.spec.ts +++ b/test/rules/no-absolute-path.spec.ts @@ -1,16 +1,14 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { test, wrapRun } from '../utils' +import { test, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-absolute-path' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() const error = { messageId: 'absolute', } -wrapRun(ruleTester.run)('no-absolute-path', rule, { +ruleTester.run$('no-absolute-path', rule, { valid: [ test({ code: 'import _ from "lodash"' }), test({ code: 'import find from "lodash.find"' }), diff --git a/test/rules/no-amd.spec.ts b/test/rules/no-amd.spec.ts index e93b5c9f0a..1cafea3057 100644 --- a/test/rules/no-amd.spec.ts +++ b/test/rules/no-amd.spec.ts @@ -1,14 +1,12 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { wrapRun } from '../utils' +import { RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-amd' -const ruleTester = new TSESLint.RuleTester({ +const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2015, sourceType: 'module' }, }) -wrapRun(ruleTester.run)('no-amd', rule, { +ruleTester.run$('no-amd', rule, { valid: [ 'import "x";', 'import x from "x"', diff --git a/test/rules/no-anonymous-default-export.spec.ts b/test/rules/no-anonymous-default-export.spec.ts index c100e1501c..9200f72437 100644 --- a/test/rules/no-anonymous-default-export.spec.ts +++ b/test/rules/no-anonymous-default-export.spec.ts @@ -1,12 +1,10 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { test, SYNTAX_CASES, wrapRun } from '../utils' +import { test, SYNTAX_CASES, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-anonymous-default-export' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('no-anonymous-default-export', rule, { +ruleTester.run$('no-anonymous-default-export', rule, { valid: [ // Exports with identifiers are valid test({ code: 'const foo = 123\nexport default foo' }), diff --git a/test/rules/no-commonjs.spec.ts b/test/rules/no-commonjs.spec.ts index 6551ff30b3..06dd7d0e66 100644 --- a/test/rules/no-commonjs.spec.ts +++ b/test/rules/no-commonjs.spec.ts @@ -1,20 +1,18 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { wrapRun } from '../utils' +import { RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-commonjs' const EXPORT = 'export' const IMPORT = 'import' -const ruleTester = new TSESLint.RuleTester({ +const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2015, sourceType: 'module', }, }) -wrapRun(ruleTester.run)('no-commonjs', rule, { +ruleTester.run$('no-commonjs', rule, { valid: [ // imports { code: 'import "x";' }, diff --git a/test/rules/no-cycle.spec.ts b/test/rules/no-cycle.spec.ts index e3011b2efe..0b88f2c681 100644 --- a/test/rules/no-cycle.spec.ts +++ b/test/rules/no-cycle.spec.ts @@ -1,11 +1,9 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { parsers, test as _test, testFilePath, wrapRun } from '../utils' +import { parsers, test as _test, testFilePath, RuleTester } from '../utils' import type { ValidTestCase } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-cycle' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() const error = (message: string) => ({ message }) @@ -17,7 +15,7 @@ const test = (def: T) => const testDialect = 'es6' -wrapRun(ruleTester.run)('no-cycle', rule, { +ruleTester.run$('no-cycle', rule, { valid: [ // this rule doesn't care if the cycle length is 0 test({ code: 'import foo from "./foo.js"' }), diff --git a/test/rules/no-default-export.spec.ts b/test/rules/no-default-export.spec.ts index 4ca6ea7628..e4c15e89b5 100644 --- a/test/rules/no-default-export.spec.ts +++ b/test/rules/no-default-export.spec.ts @@ -1,12 +1,10 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { parsers, test, wrapRun } from '../utils' +import { parsers, test, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-default-export' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('no-default-export', rule, { +ruleTester.run$('no-default-export', rule, { valid: [ test({ code: ` diff --git a/test/rules/no-deprecated.spec.ts b/test/rules/no-deprecated.spec.ts index 5d25ba0c7b..d80b3e6260 100644 --- a/test/rules/no-deprecated.spec.ts +++ b/test/rules/no-deprecated.spec.ts @@ -1,12 +1,10 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { test, SYNTAX_CASES, parsers, wrapRun } from '../utils' +import { test, SYNTAX_CASES, parsers, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-deprecated' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('no-deprecated', rule, { +ruleTester.run$('no-deprecated', rule, { valid: [ test({ code: "import { x } from './fake' " }), test({ code: "import bar from './bar'" }), @@ -218,7 +216,7 @@ wrapRun(ruleTester.run)('no-deprecated', rule, { ], }) -wrapRun(ruleTester.run)('no-deprecated: hoisting', rule, { +ruleTester.run$('no-deprecated: hoisting', rule, { valid: [ test({ code: "function x(deepDep) { console.log(deepDep.MY_TERRIBLE_ACTION) } import { deepDep } from './deep-deprecated'", @@ -253,7 +251,7 @@ describe('TypeScript', () => { }, } - wrapRun(ruleTester.run)(parser, rule, { + ruleTester.run$(parser, rule, { valid: [ test({ code: "import * as hasDeprecated from './ts-deprecated.ts'", diff --git a/test/rules/no-duplicates.spec.ts b/test/rules/no-duplicates.spec.ts index e07fd7b668..e814be3d7c 100644 --- a/test/rules/no-duplicates.spec.ts +++ b/test/rules/no-duplicates.spec.ts @@ -1,21 +1,19 @@ import path from 'node:path' -import { TSESLint } from '@typescript-eslint/utils' - import { test, parsers, tsVersionSatisfies, typescriptEslintParserSatisfies, - wrapRun, + RuleTester, } from '../utils' import jsxConfig from 'eslint-plugin-import-x/config/react' import rule from 'eslint-plugin-import-x/rules/no-duplicates' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('no-duplicates', rule, { +ruleTester.run$('no-duplicates', rule, { valid: [ test({ code: 'import "./malformed.js"' }), @@ -920,7 +918,7 @@ describe('TypeScript', () => { ]), ] - wrapRun(ruleTester.run)('no-duplicates', rule, { + ruleTester.run$('no-duplicates', rule, { valid, invalid, }) diff --git a/test/rules/no-dynamic-require.spec.ts b/test/rules/no-dynamic-require.spec.ts index ce8c637e4f..c6367bca8d 100644 --- a/test/rules/no-dynamic-require.spec.ts +++ b/test/rules/no-dynamic-require.spec.ts @@ -1,11 +1,9 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { parsers, test, wrapRun } from '../utils' +import { parsers, test, RuleTester } from '../utils' import type { ValidTestCase } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-dynamic-require' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() const error = { messageId: 'require', @@ -15,7 +13,7 @@ const dynamicImportError = { messageId: 'import', } as const -wrapRun(ruleTester.run)('no-dynamic-require', rule, { +ruleTester.run$('no-dynamic-require', rule, { valid: [ test({ code: 'import _ from "lodash"' }), test({ code: 'require("foo")' }), diff --git a/test/rules/no-empty-named-blocks.spec.ts b/test/rules/no-empty-named-blocks.spec.ts index 8c63e7e10d..af617a0ce7 100644 --- a/test/rules/no-empty-named-blocks.spec.ts +++ b/test/rules/no-empty-named-blocks.spec.ts @@ -1,10 +1,8 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { parsers, test, wrapRun } from '../utils' +import { parsers, test, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-empty-named-blocks' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() function generateSuggestionsTestCases(cases: string[], parser?: string) { return cases.map(code => @@ -29,7 +27,7 @@ function generateSuggestionsTestCases(cases: string[], parser?: string) { ) } -wrapRun(ruleTester.run)('no-empty-named-blocks', rule, { +ruleTester.run$('no-empty-named-blocks', rule, { valid: [ test({ code: `import 'mod';` }), test({ code: `import Default from 'mod';` }), diff --git a/test/rules/no-extraneous-dependencies.spec.ts b/test/rules/no-extraneous-dependencies.spec.ts index 3a22d01112..bc466e8046 100644 --- a/test/rules/no-extraneous-dependencies.spec.ts +++ b/test/rules/no-extraneous-dependencies.spec.ts @@ -1,19 +1,17 @@ import fs from 'node:fs' import path from 'node:path' -import { TSESLint } from '@typescript-eslint/utils' - import { dependencies as deps, devDependencies as devDeps, } from '../fixtures/package.json' -import { parsers, test, testFilePath, wrapRun } from '../utils' +import { parsers, test, testFilePath, RuleTester } from '../utils' import typescriptConfig from 'eslint-plugin-import-x/config/typescript' import rule from 'eslint-plugin-import-x/rules/no-extraneous-dependencies' -const ruleTester = new TSESLint.RuleTester() -const typescriptRuleTester = new TSESLint.RuleTester(typescriptConfig) +const ruleTester = new RuleTester() +const typescriptRuleTester = new RuleTester(typescriptConfig) const packageDirWithSyntaxError = testFilePath('with-syntax-error') @@ -49,7 +47,7 @@ const packageDirBundledDepsRaceCondition = testFilePath( 'bundled-dependencies/race-condition', ) -wrapRun(ruleTester.run)('no-extraneous-dependencies', rule, { +ruleTester.run$('no-extraneous-dependencies', rule, { valid: [ ...[...Object.keys(deps), ...Object.keys(devDeps)].flatMap(pkg => [ test({ code: `import "${pkg}"` }), @@ -538,7 +536,7 @@ describe('TypeScript', () => { }, } - wrapRun(ruleTester.run)('no-extraneous-dependencies', rule, { + ruleTester.run$('no-extraneous-dependencies', rule, { valid: [ test({ code: 'import type T from "a";', @@ -612,7 +610,7 @@ describe('TypeScript', () => { }) }) -wrapRun(typescriptRuleTester.run)( +typescriptRuleTester.run$( 'no-extraneous-dependencies typescript type imports', rule, { diff --git a/test/rules/no-import-module-exports.spec.ts b/test/rules/no-import-module-exports.spec.ts index 58eeca039d..e819317ddf 100644 --- a/test/rules/no-import-module-exports.spec.ts +++ b/test/rules/no-import-module-exports.spec.ts @@ -1,12 +1,10 @@ import path from 'node:path' -import { TSESLint } from '@typescript-eslint/utils' - -import { test, wrapRun } from '../utils' +import { test, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-import-module-exports' -const ruleTester = new TSESLint.RuleTester({ +const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }) @@ -15,7 +13,7 @@ const error = { type: 'ImportDeclaration', } as const -wrapRun(ruleTester.run)('no-import-module-exports', rule, { +ruleTester.run$('no-import-module-exports', rule, { valid: [ test({ code: ` diff --git a/test/rules/no-internal-modules.spec.ts b/test/rules/no-internal-modules.spec.ts index 70e924a48d..795a3c0526 100644 --- a/test/rules/no-internal-modules.spec.ts +++ b/test/rules/no-internal-modules.spec.ts @@ -1,12 +1,10 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { test, testFilePath, parsers, wrapRun } from '../utils' +import { test, testFilePath, parsers, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-internal-modules' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('no-internal-modules', rule, { +ruleTester.run$('no-internal-modules', rule, { valid: [ // imports test({ diff --git a/test/rules/no-mutable-exports.spec.ts b/test/rules/no-mutable-exports.spec.ts index 5bc84e7b12..2605fe945e 100644 --- a/test/rules/no-mutable-exports.spec.ts +++ b/test/rules/no-mutable-exports.spec.ts @@ -1,12 +1,10 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { parsers, test, wrapRun } from '../utils' +import { parsers, test, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-mutable-exports' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('no-mutable-exports', rule, { +ruleTester.run$('no-mutable-exports', rule, { valid: [ test({ code: 'export const count = 1' }), test({ code: 'export function getCount() {}' }), diff --git a/test/rules/no-named-as-default-member.spec.ts b/test/rules/no-named-as-default-member.spec.ts index 49a769d613..7d9d8e9543 100644 --- a/test/rules/no-named-as-default-member.spec.ts +++ b/test/rules/no-named-as-default-member.spec.ts @@ -1,12 +1,10 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { test, SYNTAX_CASES, wrapRun } from '../utils' +import { test, SYNTAX_CASES, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-named-as-default-member' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('no-named-as-default-member', rule, { +ruleTester.run$('no-named-as-default-member', rule, { valid: [ test({ code: 'import bar, {foo} from "./bar";' }), test({ code: 'import bar from "./bar"; const baz = bar.baz' }), diff --git a/test/rules/no-named-as-default.spec.ts b/test/rules/no-named-as-default.spec.ts index aa4ef4277f..5d393db8a3 100644 --- a/test/rules/no-named-as-default.spec.ts +++ b/test/rules/no-named-as-default.spec.ts @@ -1,12 +1,10 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { test, SYNTAX_CASES, parsers, wrapRun } from '../utils' +import { test, SYNTAX_CASES, parsers, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-named-as-default' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('no-named-as-default', rule, { +ruleTester.run$('no-named-as-default', rule, { valid: [ test({ code: 'import "./malformed.js"' }), diff --git a/test/rules/no-named-default.spec.ts b/test/rules/no-named-default.spec.ts index 5dd6c91279..a12c6bc81b 100644 --- a/test/rules/no-named-default.spec.ts +++ b/test/rules/no-named-default.spec.ts @@ -1,12 +1,10 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { test, SYNTAX_CASES, parsers, wrapRun } from '../utils' +import { test, SYNTAX_CASES, parsers, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-named-default' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('no-named-default', rule, { +ruleTester.run$('no-named-default', rule, { valid: [ test({ code: 'import bar from "./bar";' }), test({ code: 'import bar, { foo } from "./bar";' }), diff --git a/test/rules/no-named-export.spec.ts b/test/rules/no-named-export.spec.ts index 8dd799b101..4384a6a501 100644 --- a/test/rules/no-named-export.spec.ts +++ b/test/rules/no-named-export.spec.ts @@ -1,12 +1,10 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { parsers, test, wrapRun } from '../utils' +import { parsers, test, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-named-export' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('no-named-export', rule, { +ruleTester.run$('no-named-export', rule, { valid: [ test({ code: 'export default function bar() {};', diff --git a/test/rules/no-namespace.spec.ts b/test/rules/no-namespace.spec.ts index bc125cf739..228a471972 100644 --- a/test/rules/no-namespace.spec.ts +++ b/test/rules/no-namespace.spec.ts @@ -1,14 +1,12 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { test, wrapRun } from '../utils' +import { test, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-namespace' const ERROR_MESSAGE = 'Unexpected namespace import.' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('no-namespace', rule, { +ruleTester.run$('no-namespace', rule, { valid: [ { code: "import { a, b } from 'foo';", diff --git a/test/rules/no-nodejs-modules.spec.ts b/test/rules/no-nodejs-modules.spec.ts index 50cdd250ae..5ca6e2c304 100644 --- a/test/rules/no-nodejs-modules.spec.ts +++ b/test/rules/no-nodejs-modules.spec.ts @@ -1,16 +1,14 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { test, wrapRun } from '../utils' +import { test, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-nodejs-modules' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() const error = (message: string) => ({ message, }) -wrapRun(ruleTester.run)('no-nodejs-modules', rule, { +ruleTester.run$('no-nodejs-modules', rule, { valid: [ test({ code: 'import _ from "lodash"' }), test({ code: 'import find from "lodash.find"' }), diff --git a/test/rules/no-relative-packages.spec.ts b/test/rules/no-relative-packages.spec.ts index 31d4e3f126..19863e8e54 100644 --- a/test/rules/no-relative-packages.spec.ts +++ b/test/rules/no-relative-packages.spec.ts @@ -1,14 +1,12 @@ import path from 'node:path' -import { TSESLint } from '@typescript-eslint/utils' - -import { test, testFilePath, wrapRun } from '../utils' +import { test, testFilePath, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-relative-packages' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('no-relative-packages', rule, { +ruleTester.run$('no-relative-packages', rule, { valid: [ test({ code: 'import foo from "./index.js"', diff --git a/test/rules/no-relative-parent-imports.spec.ts b/test/rules/no-relative-parent-imports.spec.ts index 18f373dd04..f269874f9c 100644 --- a/test/rules/no-relative-parent-imports.spec.ts +++ b/test/rules/no-relative-parent-imports.spec.ts @@ -1,6 +1,4 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { parsers, test as _test, testFilePath, wrapRun } from '../utils' +import { parsers, test as _test, testFilePath, RuleTester } from '../utils' import type { ValidTestCase } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-relative-parent-imports' @@ -12,9 +10,9 @@ const test = (def: T) => parser: parsers.BABEL, }) -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('no-relative-parent-imports', rule, { +ruleTester.run$('no-relative-parent-imports', rule, { valid: [ test({ code: 'import foo from "./internal.js"', diff --git a/test/rules/no-restricted-paths.spec.ts b/test/rules/no-restricted-paths.spec.ts index 1286b8d6ad..aa05407491 100644 --- a/test/rules/no-restricted-paths.spec.ts +++ b/test/rules/no-restricted-paths.spec.ts @@ -1,12 +1,10 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { parsers, test, testFilePath, wrapRun } from '../utils' +import { parsers, test, testFilePath, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-restricted-paths' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('no-restricted-paths', rule, { +ruleTester.run$('no-restricted-paths', rule, { valid: [ test({ code: 'import a from "../client/a.js"', @@ -770,7 +768,7 @@ describe('Typescript', () => { 'import-x/parsers': { [parser]: ['.ts'] }, 'import-x/resolver': { 'eslint-import-resolver-typescript': true }, } - wrapRun(ruleTester.run)('no-restricted-paths', rule, { + ruleTester.run$('no-restricted-paths', rule, { valid: [ test({ code: 'import type a from "../client/a.ts"', diff --git a/test/rules/no-self-import.spec.ts b/test/rules/no-self-import.spec.ts index 9e8538c910..2b0e1fa690 100644 --- a/test/rules/no-self-import.spec.ts +++ b/test/rules/no-self-import.spec.ts @@ -1,16 +1,14 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { test, testFilePath, wrapRun } from '../utils' +import { test, testFilePath, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-self-import' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() const error = { message: 'Module imports itself.', } -wrapRun(ruleTester.run)('no-self-import', rule, { +ruleTester.run$('no-self-import', rule, { valid: [ test({ code: 'import _ from "lodash"', diff --git a/test/rules/no-unassigned-import.spec.ts b/test/rules/no-unassigned-import.spec.ts index dfe5d04f71..9c5aeed2f6 100644 --- a/test/rules/no-unassigned-import.spec.ts +++ b/test/rules/no-unassigned-import.spec.ts @@ -1,18 +1,16 @@ import path from 'node:path' -import { TSESLint } from '@typescript-eslint/utils' - -import { test, wrapRun } from '../utils' +import { test, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-unassigned-import' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() const error = { messageId: 'unassigned', } as const -wrapRun(ruleTester.run)('no-unassigned-import', rule, { +ruleTester.run$('no-unassigned-import', rule, { valid: [ test({ code: 'import _ from "lodash"' }), test({ code: 'import _, {foo} from "lodash"' }), diff --git a/test/rules/no-unresolved.spec.ts b/test/rules/no-unresolved.spec.ts index f6fcfd40e6..493d3d80d3 100644 --- a/test/rules/no-unresolved.spec.ts +++ b/test/rules/no-unresolved.spec.ts @@ -1,14 +1,18 @@ import path from 'node:path' -import { TSESLint } from '@typescript-eslint/utils' - -import { test, SYNTAX_CASES, parsers, testFilePath, wrapRun } from '../utils' +import { + test, + SYNTAX_CASES, + parsers, + testFilePath, + RuleTester, +} from '../utils' import type { ValidTestCase } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-unresolved' import { CASE_SENSITIVE_FS } from 'eslint-plugin-import-x/utils' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() function runResolverTests(resolver: 'node' | 'webpack') { // redefine 'test' to set a resolver @@ -24,7 +28,7 @@ function runResolverTests(resolver: 'node' | 'webpack') { }) } - wrapRun(ruleTester.run)(`no-unresolved (${resolver})`, rule, { + ruleTester.run$(`no-unresolved (${resolver})`, rule, { valid: [ test({ code: 'import "./malformed.js"' }), @@ -272,7 +276,7 @@ function runResolverTests(resolver: 'node' | 'webpack') { ], }) - wrapRun(ruleTester.run)(`issue #333 (${resolver})`, rule, { + ruleTester.run$(`issue #333 (${resolver})`, rule, { valid: [ rest({ code: 'import foo from "./bar.json"' }), rest({ code: 'import foo from "./bar"' }), @@ -300,7 +304,7 @@ function runResolverTests(resolver: 'node' | 'webpack') { .join(cwd.toUpperCase(), relativePath) .replaceAll('\\', '/') - wrapRun(ruleTester.run)('case sensitivity', rule, { + ruleTester.run$('case sensitivity', rule, { valid: [ rest({ // test with explicit flag @@ -328,7 +332,7 @@ function runResolverTests(resolver: 'node' | 'webpack') { ], }) - wrapRun(ruleTester.run)('case sensitivity strict', rule, { + ruleTester.run$('case sensitivity strict', rule, { valid: [ // #1259 issue rest({ @@ -364,7 +368,7 @@ for (const resolver of ['node', 'webpack'] as const) { runResolverTests(resolver) } -wrapRun(ruleTester.run)('no-unresolved (import-x/resolve legacy)', rule, { +ruleTester.run$('no-unresolved (import-x/resolve legacy)', rule, { valid: [ test({ code: "import { DEEP } from 'in-alternate-root';", @@ -398,7 +402,7 @@ wrapRun(ruleTester.run)('no-unresolved (import-x/resolve legacy)', rule, { ], }) -wrapRun(ruleTester.run)('no-unresolved (webpack-specific)', rule, { +ruleTester.run$('no-unresolved (webpack-specific)', rule, { valid: [ test({ // default webpack config in fixtures/webpack.config.js knows about jsx @@ -423,7 +427,7 @@ wrapRun(ruleTester.run)('no-unresolved (webpack-specific)', rule, { ], }) -wrapRun(ruleTester.run)('no-unresolved ignore list', rule, { +ruleTester.run$('no-unresolved ignore list', rule, { valid: [ test({ code: 'import "./malformed.js"', @@ -460,7 +464,7 @@ wrapRun(ruleTester.run)('no-unresolved ignore list', rule, { ], }) -wrapRun(ruleTester.run)('no-unresolved unknown resolver', rule, { +ruleTester.run$('no-unresolved unknown resolver', rule, { valid: [], invalid: [ @@ -487,7 +491,7 @@ wrapRun(ruleTester.run)('no-unresolved unknown resolver', rule, { ], }) -wrapRun(ruleTester.run)('no-unresolved electron', rule, { +ruleTester.run$('no-unresolved electron', rule, { valid: [ test({ code: 'import "electron"', @@ -502,13 +506,13 @@ wrapRun(ruleTester.run)('no-unresolved electron', rule, { ], }) -wrapRun(ruleTester.run)('no-unresolved syntax verification', rule, { +ruleTester.run$('no-unresolved syntax verification', rule, { valid: SYNTAX_CASES, invalid: [], }) // https://github.com/import-js/eslint-plugin-import-x/issues/2024 -wrapRun(ruleTester.run)('import() with built-in parser', rule, { +ruleTester.run$('import() with built-in parser', rule, { valid: [ test({ code: "import('fs');", @@ -529,7 +533,7 @@ wrapRun(ruleTester.run)('import() with built-in parser', rule, { describe('TypeScript', () => { // Type-only imports were added in TypeScript ESTree 2.23.0 const parser = parsers.TS - wrapRun(ruleTester.run)(`${parser}: no-unresolved ignore type-only`, rule, { + ruleTester.run$(`${parser}: no-unresolved ignore type-only`, rule, { valid: [ test({ code: 'import type { JSONSchema7Type } from "@types/json-schema";', diff --git a/test/rules/no-unused-modules.spec.ts b/test/rules/no-unused-modules.spec.ts index 1c122fbb8f..3f68586e1c 100644 --- a/test/rules/no-unused-modules.spec.ts +++ b/test/rules/no-unused-modules.spec.ts @@ -1,18 +1,17 @@ import fs from 'node:fs' -import { TSESLint } from '@typescript-eslint/utils' // @ts-expect-error - no typings yet import { FlatRuleTester } from 'eslint/use-at-your-own-risk' -import { test, testFilePath, parsers, wrapRun } from '../utils' +import { test, testFilePath, parsers, RuleTester } from '../utils' import jsxConfig from 'eslint-plugin-import-x/config/react' import typescriptConfig from 'eslint-plugin-import-x/config/typescript' import rule from 'eslint-plugin-import-x/rules/no-unused-modules' -const ruleTester = new TSESLint.RuleTester() -const typescriptRuleTester = new TSESLint.RuleTester(typescriptConfig) -const jsxRuleTester = new TSESLint.RuleTester(jsxConfig) +const ruleTester = new RuleTester() +const typescriptRuleTester = new RuleTester(typescriptConfig) +const jsxRuleTester = new RuleTester(jsxConfig) const error = (message: string) => ({ message }) @@ -47,7 +46,7 @@ const unusedExportsJsxOptions = [ ] // tests for missing exports -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ code: 'export default function noOptions() {}', @@ -112,7 +111,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { }) // tests for exports -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -222,7 +221,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { }) // test for unused exports -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [], invalid: [ test({ @@ -281,7 +280,7 @@ describe('dynamic imports', () => { jest.setTimeout(10e3) // test for unused exports with `import()` - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -319,7 +318,7 @@ describe('dynamic imports', () => { }), ], }) - wrapRun(typescriptRuleTester.run)('no-unused-modules', rule, { + typescriptRuleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsTypescriptOptions, @@ -354,7 +353,7 @@ describe('dynamic imports', () => { }) // // test for export from -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -374,7 +373,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { ], }) -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -386,7 +385,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { }) // test for ignored files -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -423,7 +422,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { }) // add named import for file with default export -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -446,7 +445,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { }) // add default import for file with default export -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -463,7 +462,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { }) // add default import for file with named export -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -484,7 +483,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { }) // add named import for file with named export -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -503,7 +502,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { }) // add different named import for file with named export -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -524,7 +523,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { }) // add renamed named import for file with named export -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -543,7 +542,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { }) // add different renamed named import for file with named export -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -564,7 +563,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { }) // remove default import for file with default export -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -587,7 +586,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { }) // add namespace import for file with unused exports -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [], invalid: [ test({ @@ -602,7 +601,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { }), ], }) -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -621,7 +620,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { }) // remove all exports -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -645,7 +644,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { ], }) -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -655,7 +654,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { ], invalid: [], }) -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [], invalid: [ test({ @@ -669,7 +668,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { ], }) -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [], invalid: [ test({ @@ -694,7 +693,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { ], }) -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ /* TODO: test({ @@ -726,7 +725,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { }) // Test that import and export in the same file both counts as usage -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -738,7 +737,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { }) describe('renameDefault', () => { - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -757,7 +756,7 @@ describe('renameDefault', () => { ], invalid: [], }) - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -787,7 +786,7 @@ describe('test behavior for new file', () => { }) // add import in newly created file - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -806,7 +805,7 @@ describe('test behavior for new file', () => { }) // add export for newly created file - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [], invalid: [ test({ @@ -820,7 +819,7 @@ describe('test behavior for new file', () => { ], }) - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -839,7 +838,7 @@ describe('test behavior for new file', () => { }) // export * only considers named imports. default imports still need to be reported - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -866,7 +865,7 @@ describe('test behavior for new file', () => { }), ], }) - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -878,7 +877,7 @@ describe('test behavior for new file', () => { }) // remove export *. all exports need to be reported - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [], invalid: [ test({ @@ -911,7 +910,7 @@ describe('test behavior for new file', () => { { encoding: 'utf8', flag: 'w' }, ) }) - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -955,7 +954,7 @@ describe('test behavior for new file', () => { flag: 'w', }) }) - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -986,7 +985,7 @@ describe('test behavior for new file', () => { flag: 'w', }) }) - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -1011,7 +1010,7 @@ describe('test behavior for new file', () => { }) describe('test behavior for destructured exports', () => { - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -1047,7 +1046,7 @@ describe('test behavior for new file', () => { { encoding: 'utf8', flag: 'w' }, ) }) - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -1072,7 +1071,7 @@ describe('test behavior for new file', () => { }) describe('do not report missing export for ignored file', () => { - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: [ @@ -1091,7 +1090,7 @@ describe('do not report missing export for ignored file', () => { }) // lint file not available in `src` -wrapRun(ruleTester.run)('no-unused-modules', rule, { +ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -1103,7 +1102,7 @@ wrapRun(ruleTester.run)('no-unused-modules', rule, { }) describe('do not report unused export for files mentioned in package.json', () => { - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -1147,7 +1146,7 @@ describe('do not report unused export for files mentioned in package.json', () = }) describe('Avoid errors if re-export all from umd compiled library', () => { - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -1162,7 +1161,7 @@ describe('Avoid errors if re-export all from umd compiled library', () => { describe('TypeScript', () => { const parser = parsers.TS - wrapRun(typescriptRuleTester.run)('no-unused-modules', rule, { + typescriptRuleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsTypescriptOptions, @@ -1333,7 +1332,7 @@ describe('TypeScript', () => { }) describe('correctly work with JSX only files', () => { - wrapRun(jsxRuleTester.run)('no-unused-modules', rule, { + jsxRuleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsJsxOptions, @@ -1357,7 +1356,7 @@ describe('correctly work with JSX only files', () => { }) describe('ignore flow types', () => { - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -1404,7 +1403,7 @@ describe('ignore flow types', () => { }) describe('support (nested) destructuring assignment', () => { - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -1424,7 +1423,7 @@ describe('support (nested) destructuring assignment', () => { }) describe('support ES2022 Arbitrary module namespace identifier names', () => { - wrapRun(ruleTester.run)('no-unused-module', rule, { + ruleTester.run$('no-unused-module', rule, { valid: [ test({ options: unusedExportsOptions, @@ -1461,7 +1460,7 @@ describe('support ES2022 Arbitrary module namespace identifier names', () => { describe('parser ignores prefixes like BOM and hashbang', () => { // bom, hashbang - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -1477,7 +1476,7 @@ describe('parser ignores prefixes like BOM and hashbang', () => { invalid: [], }) // no bom, hashbang - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -1493,7 +1492,7 @@ describe('parser ignores prefixes like BOM and hashbang', () => { invalid: [], }) // bom, no hashbang - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -1511,7 +1510,7 @@ describe('parser ignores prefixes like BOM and hashbang', () => { invalid: [], }) // no bom, no hashbang - wrapRun(ruleTester.run)('no-unused-modules', rule, { + ruleTester.run$('no-unused-modules', rule, { valid: [ test({ options: unusedExportsOptions, @@ -1529,8 +1528,8 @@ describe('parser ignores prefixes like BOM and hashbang', () => { }) describe('supports flat eslint', () => { - const flatRuleTester = new FlatRuleTester() as TSESLint.RuleTester - wrapRun(flatRuleTester.run)('no-unused-modules', rule, { + const flatRuleTester = new FlatRuleTester() + flatRuleTester.run('no-unused-modules', rule, { valid: [ { options: unusedExportsOptions, diff --git a/test/rules/no-useless-path-segments.spec.ts b/test/rules/no-useless-path-segments.spec.ts index ecc5e21244..66bcee8db8 100644 --- a/test/rules/no-useless-path-segments.spec.ts +++ b/test/rules/no-useless-path-segments.spec.ts @@ -1,13 +1,11 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { parsers, test, wrapRun } from '../utils' +import { parsers, test, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-useless-path-segments' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() function runResolverTests(resolver: 'node' | 'webpack') { - wrapRun(ruleTester.run)(`no-useless-path-segments (${resolver})`, rule, { + ruleTester.run$(`no-useless-path-segments (${resolver})`, rule, { valid: [ // CommonJS modules with default options test({ code: 'require("./../fixtures/malformed.js")' }), diff --git a/test/rules/no-webpack-loader-syntax.spec.ts b/test/rules/no-webpack-loader-syntax.spec.ts index 907fa31a88..34e3da3fce 100644 --- a/test/rules/no-webpack-loader-syntax.spec.ts +++ b/test/rules/no-webpack-loader-syntax.spec.ts @@ -1,14 +1,12 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { test, wrapRun } from '../utils' +import { test, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/no-webpack-loader-syntax' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() const message = 'Do not use import syntax to configure webpack loaders.' -wrapRun(ruleTester.run)('no-webpack-loader-syntax', rule, { +ruleTester.run$('no-webpack-loader-syntax', rule, { valid: [ test({ code: 'import _ from "lodash"' }), test({ code: 'import find from "lodash.find"' }), diff --git a/test/rules/order.spec.ts b/test/rules/order.spec.ts index 6e1f46f8f0..a42ed7d136 100644 --- a/test/rules/order.spec.ts +++ b/test/rules/order.spec.ts @@ -1,4 +1,3 @@ -import { TSESLint } from '@typescript-eslint/utils' import eslintPkg from 'eslint/package.json' import semver from 'semver' @@ -7,15 +6,15 @@ import { parsers, getNonDefaultParsers, testFilePath, - wrapRun, + RuleTester, } from '../utils' import type { ValidTestCase } from '../utils' import rule from 'eslint-plugin-import-x/rules/order' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -const flowRuleTester = new TSESLint.RuleTester({ +const flowRuleTester = new RuleTester({ parser: parsers.BABEL, parserOptions: { requireConfigFile: false, @@ -31,7 +30,7 @@ function withoutAutofixOutput(test: T) { return { ...test, output: test.code } } -wrapRun(ruleTester.run)('order', rule, { +ruleTester.run$('order', rule, { valid: [ // Default order using require test({ @@ -3046,7 +3045,7 @@ describe('TypeScript', () => { }, } - wrapRun(ruleTester.run)('order', rule, { + ruleTester.run$('order', rule, { valid: [ // #1667: typescript type import support @@ -3591,7 +3590,7 @@ describe('TypeScript', () => { } }) -wrapRun(flowRuleTester.run)('order', rule, { +flowRuleTester.run$('order', rule, { valid: [ test({ options: [ diff --git a/test/rules/prefer-default-export.spec.ts b/test/rules/prefer-default-export.spec.ts index 952528a5b6..a1723a5b52 100644 --- a/test/rules/prefer-default-export.spec.ts +++ b/test/rules/prefer-default-export.spec.ts @@ -1,13 +1,11 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { test, getNonDefaultParsers, parsers, wrapRun } from '../utils' +import { test, getNonDefaultParsers, parsers, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/prefer-default-export' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() // test cases for default option { target: 'single' } -wrapRun(ruleTester.run)('prefer-default-export', rule, { +ruleTester.run$('prefer-default-export', rule, { valid: [ test({ code: ` @@ -167,7 +165,7 @@ wrapRun(ruleTester.run)('prefer-default-export', rule, { }) // test cases for { target: 'any' } -wrapRun(ruleTester.run)('prefer-default-export', rule, { +ruleTester.run$('prefer-default-export', rule, { // Any exporting file must contain default export valid: [ test({ @@ -396,7 +394,7 @@ describe('TypeScript', () => { }, } - wrapRun(ruleTester.run)('prefer-default-export', rule, { + ruleTester.run$('prefer-default-export', rule, { valid: [ // Exporting types test({ diff --git a/test/rules/unambiguous.spec.ts b/test/rules/unambiguous.spec.ts index 648886b56e..4b9e6eab6e 100644 --- a/test/rules/unambiguous.spec.ts +++ b/test/rules/unambiguous.spec.ts @@ -1,12 +1,10 @@ -import { TSESLint } from '@typescript-eslint/utils' - -import { parsers, wrapRun } from '../utils' +import { parsers, RuleTester } from '../utils' import rule from 'eslint-plugin-import-x/rules/unambiguous' -const ruleTester = new TSESLint.RuleTester() +const ruleTester = new RuleTester() -wrapRun(ruleTester.run)('unambiguous', rule, { +ruleTester.run$('unambiguous', rule, { valid: [ 'function x() {}', '"use strict"; function y() {}', diff --git a/test/utils.ts b/test/utils.ts index 297823afac..6f9cddf697 100644 --- a/test/utils.ts +++ b/test/utils.ts @@ -1,7 +1,8 @@ import path from 'node:path' -import type { TSESLint, TSESTree } from '@typescript-eslint/utils' -import type { RuleTester } from 'eslint' +import { TSESLint } from '@typescript-eslint/utils' +import type { TSESTree } from '@typescript-eslint/utils' +import type { RuleTester as ESLintRuleTester } from 'eslint' import eslintPkg from 'eslint/package.json' import semver from 'semver' import typescriptPkg from 'typescript/package.json' @@ -66,7 +67,7 @@ export function testVersion( export type InvalidTestCaseError = | string | InvalidTestCase['errors'][number] - | (RuleTester.TestCaseError & { + | (ESLintRuleTester.TestCaseError & { type?: `${TSESTree.AST_NODE_TYPES}` }) @@ -166,11 +167,8 @@ export const testCompiled = process.env.TEST_COMPILED === '1' export const srcDir = testCompiled ? 'lib' : 'src' -export const wrapRun = (run: TSESLint.RuleTester['run']) => { - return function runWrapped< - MessageIds extends string, - Options extends Readonly, - >( +export class RuleTester extends TSESLint.RuleTester { + run$>( ruleName: string, rule: RuleModuleWithCustomMeta, tests: TSESLint.RunTests, @@ -191,6 +189,6 @@ export const wrapRun = (run: TSESLint.RuleTester['run']) => { }, } - return run(ruleName, modifiedRule, tests) + return super.run(ruleName, modifiedRule, tests) } }