diff --git a/tests/src/rules/no-duplicates.js b/tests/src/rules/no-duplicates.js index bd7ebaea18..14a9f20091 100644 --- a/tests/src/rules/no-duplicates.js +++ b/tests/src/rules/no-duplicates.js @@ -1,6 +1,6 @@ import * as path from 'path'; +import { test as testUtil, getNonDefaultParsers, parsers } from '../utils'; import jsxConfig from '../../../config/react'; -import { test as testUtil, getNonDefaultParsers, parsers, tsVersionSatisfies, typescriptEslintParserSatisfies } from '../utils'; import { RuleTester } from 'eslint'; import eslintPkg from 'eslint/package.json'; @@ -424,28 +424,28 @@ import {x,y} from './foo' import { BULK_ACTIONS_ENABLED } from '../constants'; - + const TestComponent = () => { return
; } - + export default TestComponent; `, output: ` import { DEFAULT_FILTER_KEYS, BULK_DISABLED, - + BULK_ACTIONS_ENABLED } from '../constants'; import React from 'react'; - + const TestComponent = () => { return
; } - + export default TestComponent; `, errors: ["'../constants' imported multiple times.", "'../constants' imported multiple times."], @@ -467,224 +467,99 @@ context('TypeScript', function () { }, }; - const valid = [ + ruleTester.run('no-duplicates', rule, { + valid: [ // #1667: ignore duplicate if is a typescript type import - test({ - code: "import type { x } from './foo'; import y from './foo'", - ...parserConfig, - }), - test({ - code: "import type x from './foo'; import type y from './bar'", - ...parserConfig, - }), - test({ - code: "import type {x} from './foo'; import type {y} from './bar'", - ...parserConfig, - }), - test({ - code: "import type x from './foo'; import type {y} from './foo'", - ...parserConfig, - }), - test({ - code: ` - import type {} from './module'; - import {} from './module2'; - `, - ...parserConfig, - }), - test({ - code: ` - import type { Identifier } from 'module'; - - declare module 'module2' { - import type { Identifier } from 'module'; - } - - declare module 'module3' { + test({ + code: "import type { x } from './foo'; import y from './foo'", + ...parserConfig, + }), + test({ + code: "import type x from './foo'; import type y from './bar'", + ...parserConfig, + }), + test({ + code: "import type {x} from './foo'; import type {y} from './bar'", + ...parserConfig, + }), + test({ + code: "import type x from './foo'; import type {y} from './foo'", + ...parserConfig, + }), + test({ + code: ` + import type {} from './module'; + import {} from './module2'; + `, + ...parserConfig, + }), + test({ + code: ` import type { Identifier } from 'module'; - } - `, - ...parserConfig, - }), - ].concat(!tsVersionSatisfies('>= 4.5') || !typescriptEslintParserSatisfies('>= 5.7.0') ? [] : [ - // #2470: ignore duplicate if is a typescript inline type import - test({ - code: "import { type x } from './foo'; import y from './foo'", - ...parserConfig, - }), - test({ - code: "import { type x } from './foo'; import { y } from './foo'", - ...parserConfig, - }), - test({ - code: "import { type x } from './foo'; import type y from 'foo'", - ...parserConfig, - }), - ]); - - const invalid = [ - test({ - code: "import type x from './foo'; import type y from './foo'", - output: "import type x from './foo'; import type y from './foo'", - ...parserConfig, - errors: [ - { - line: 1, - column: 20, - message: "'./foo' imported multiple times.", - }, - { - line: 1, - column: 48, - message: "'./foo' imported multiple times.", - }, - ], - }), - test({ - code: "import type x from './foo'; import type x from './foo'", - output: "import type x from './foo'; ", - ...parserConfig, - errors: [ - { - line: 1, - column: 20, - message: "'./foo' imported multiple times.", - }, - { - line: 1, - column: 48, - message: "'./foo' imported multiple times.", - }, - ], - }), - test({ - code: "import type {x} from './foo'; import type {y} from './foo'", - ...parserConfig, - output: `import type {x,y} from './foo'; `, - errors: [ - { - line: 1, - column: 22, - message: "'./foo' imported multiple times.", - }, - { - line: 1, - column: 52, - message: "'./foo' imported multiple times.", - }, - ], - }), - ].concat(!tsVersionSatisfies('>= 4.5') || !typescriptEslintParserSatisfies('>= 5.7.0') ? [] : [ - test({ - code: "import {type x} from './foo'; import type {y} from './foo'", - ...parserConfig, - options: [{ 'prefer-inline': false }], - output: `import {type x,y} from './foo'; `, - errors: [ - { - line: 1, - column: 22, - message: "'./foo' imported multiple times.", - }, - { - line: 1, - column: 52, - message: "'./foo' imported multiple times.", - }, - ], - }), - test({ - code: "import {type x} from 'foo'; import type {y} from 'foo'", - ...parserConfig, - options: [{ 'prefer-inline': true }], - output: `import {type x,type y} from 'foo'; `, - errors: [ - { - line: 1, - column: 22, - message: "'foo' imported multiple times.", - }, - { - line: 1, - column: 50, - message: "'foo' imported multiple times.", - }, - ], - }), - test({ - code: "import {type x} from 'foo'; import type {y} from 'foo'", - ...parserConfig, - output: `import {type x,y} from 'foo'; `, - errors: [ - { - line: 1, - column: 22, - message: "'foo' imported multiple times.", - }, - { - line: 1, - column: 50, - message: "'foo' imported multiple times.", - }, - ], - }), - test({ - code: "import {type x} from './foo'; import {type y} from './foo'", - ...parserConfig, - options: [{ 'prefer-inline': true }], - output: `import {type x,type y} from './foo'; `, - errors: [ - { - line: 1, - column: 22, - message: "'./foo' imported multiple times.", - }, - { - line: 1, - column: 52, - message: "'./foo' imported multiple times.", - }, - ], - }), - test({ - code: "import {type x} from './foo'; import {type y} from './foo'", - ...parserConfig, - output: `import {type x,type y} from './foo'; `, - errors: [ - { - line: 1, - column: 22, - message: "'./foo' imported multiple times.", - }, - { - line: 1, - column: 52, - message: "'./foo' imported multiple times.", - }, - ], - }), - test({ - code: "import {AValue, type x, BValue} from './foo'; import {type y} from './foo'", - ...parserConfig, - output: `import {AValue, type x, BValue,type y} from './foo'; `, - errors: [ - { - line: 1, - column: 38, - message: "'./foo' imported multiple times.", - }, - { - line: 1, - column: 68, - message: "'./foo' imported multiple times.", - }, - ], - }), - ]); - ruleTester.run('no-duplicates', rule, { - valid, - invalid, + declare module 'module2' { + import type { Identifier } from 'module'; + } + + declare module 'module3' { + import type { Identifier } from 'module'; + } + `, + ...parserConfig, + }), + ], + invalid: [ + test({ + code: "import type x from './foo'; import type y from './foo'", + ...parserConfig, + errors: [ + { + line: 1, + column: 20, + message: "'./foo' imported multiple times.", + }, + { + line: 1, + column: 48, + message: "'./foo' imported multiple times.", + }, + ], + }), + test({ + code: "import type x from './foo'; import type x from './foo'", + output: "import type x from './foo'; ", + ...parserConfig, + errors: [ + { + line: 1, + column: 20, + message: "'./foo' imported multiple times.", + }, + { + line: 1, + column: 48, + message: "'./foo' imported multiple times.", + }, + ], + }), + test({ + code: "import type {x} from './foo'; import type {y} from './foo'", + ...parserConfig, + output: `import type {x,y} from './foo'; `, + errors: [ + { + line: 1, + column: 22, + message: "'./foo' imported multiple times.", + }, + { + line: 1, + column: 52, + message: "'./foo' imported multiple times.", + }, + ], + }), + ], }); }); });