From 471790f9ff05c65279d2da8a280c6c57d8b14f65 Mon Sep 17 00:00:00 2001 From: Jack Bates Date: Sun, 19 Sep 2021 16:23:41 -0700 Subject: [PATCH 1/4] [Tests] fix skip usage --- tests/src/rules/max-dependencies.js | 2 +- tests/src/rules/no-extraneous-dependencies.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/src/rules/max-dependencies.js b/tests/src/rules/max-dependencies.js index fc3b541f5..bab38496e 100644 --- a/tests/src/rules/max-dependencies.js +++ b/tests/src/rules/max-dependencies.js @@ -91,7 +91,7 @@ ruleTester.run('max-dependencies', rule, { ], }); -context('TypeScript', { skip: semver.satisfies(eslintPkg.version, '>5.0.0') }, () => { +(semver.satisfies(eslintPkg.version, '>5.0.0') ? describe.skip : describe)('TypeScript', () => { getTSParsers().forEach((parser) => { ruleTester.run(`max-dependencies (${parser.replace(process.cwd(), '.')})`, rule, { valid: [ diff --git a/tests/src/rules/no-extraneous-dependencies.js b/tests/src/rules/no-extraneous-dependencies.js index c6abcd6e4..af139d7b6 100644 --- a/tests/src/rules/no-extraneous-dependencies.js +++ b/tests/src/rules/no-extraneous-dependencies.js @@ -381,7 +381,7 @@ ruleTester.run('no-extraneous-dependencies', rule, { }); // TODO: figure out why these tests fail in eslint 4 -describe('TypeScript', { skip: semver.satisfies(eslintPkg.version, '^4') }, function () { +(semver.satisfies(eslintPkg.version, '^4') ? describe.skip : describe)('TypeScript', () => { getTSParsers().forEach((parser) => { const parserConfig = { parser, From 28669b97cea32e01f873fc62a524e48e4d99feb0 Mon Sep 17 00:00:00 2001 From: Jack Bates Date: Sun, 19 Sep 2021 16:57:29 -0700 Subject: [PATCH 2/4] [Tests] `no-extraneous-dependencies` ignores unresolved imports --- .../with-typescript-dev-dependencies/package.json | 2 +- tests/src/rules/no-extraneous-dependencies.js | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/files/with-typescript-dev-dependencies/package.json b/tests/files/with-typescript-dev-dependencies/package.json index e17fbd977..f859f5085 100644 --- a/tests/files/with-typescript-dev-dependencies/package.json +++ b/tests/files/with-typescript-dev-dependencies/package.json @@ -1,5 +1,5 @@ { "devDependencies": { - "@types/json-schema": "*" + "a": "*" } } diff --git a/tests/src/rules/no-extraneous-dependencies.js b/tests/src/rules/no-extraneous-dependencies.js index af139d7b6..29604af17 100644 --- a/tests/src/rules/no-extraneous-dependencies.js +++ b/tests/src/rules/no-extraneous-dependencies.js @@ -395,16 +395,16 @@ ruleTester.run('no-extraneous-dependencies', rule, { ruleTester.run('no-extraneous-dependencies', rule, { valid: [ test(Object.assign({ - code: 'import type { JSONSchema7Type } from "@types/json-schema";', + code: 'import type T from "a";', options: [{ packageDir: packageDirWithTypescriptDevDependencies, devDependencies: false }], }, parserConfig)), ], invalid: [ test(Object.assign({ - code: 'import { JSONSchema7Type } from "@types/json-schema";', + code: 'import T from "a";', options: [{ packageDir: packageDirWithTypescriptDevDependencies, devDependencies: false }], errors: [{ - message: "'@types/json-schema' should be listed in the project's dependencies, not devDependencies.", + message: "'a' should be listed in the project's dependencies, not devDependencies.", }], }, parserConfig)), ], @@ -414,17 +414,17 @@ ruleTester.run('no-extraneous-dependencies', rule, { valid: [], invalid: [ test(Object.assign({ - code: 'import { JSONSchema7Type } from "@types/json-schema"; /* typescript-eslint-parser */', + code: 'import T from "a"; /* typescript-eslint-parser */', options: [{ packageDir: packageDirWithTypescriptDevDependencies, devDependencies: false }], errors: [{ - message: "'@types/json-schema' should be listed in the project's dependencies, not devDependencies.", + message: "'a' should be listed in the project's dependencies, not devDependencies.", }], }, parserConfig)), test(Object.assign({ - code: 'import type { JSONSchema7Type } from "@types/json-schema"; /* typescript-eslint-parser */', + code: 'import type T from "a"; /* typescript-eslint-parser */', options: [{ packageDir: packageDirWithTypescriptDevDependencies, devDependencies: false }], errors: [{ - message: "'@types/json-schema' should be listed in the project's dependencies, not devDependencies.", + message: "'a' should be listed in the project's dependencies, not devDependencies.", }], }, parserConfig)), ], From 47e9c89aa7e4e565b166d1b00f01484c3c911582 Mon Sep 17 00:00:00 2001 From: Jack Bates Date: Mon, 20 Sep 2021 11:52:43 -0700 Subject: [PATCH 3/4] [Tests] type-only imports were added in TypeScript ESTree 2.23.0 --- tests/src/rules/first.js | 1 - tests/src/rules/max-dependencies.js | 81 +++++++++--------- tests/src/rules/no-duplicates.js | 1 + tests/src/rules/no-extraneous-dependencies.js | 82 +++++++------------ tests/src/rules/no-unresolved.js | 1 + tests/src/rules/order.js | 1 + 6 files changed, 73 insertions(+), 94 deletions(-) diff --git a/tests/src/rules/first.js b/tests/src/rules/first.js index 9d2787067..05328e51e 100644 --- a/tests/src/rules/first.js +++ b/tests/src/rules/first.js @@ -80,7 +80,6 @@ ruleTester.run('first', rule, { context('TypeScript', function () { getTSParsers() - .filter((parser) => parser !== require.resolve('typescript-eslint-parser')) .forEach((parser) => { const parserConfig = { parser, diff --git a/tests/src/rules/max-dependencies.js b/tests/src/rules/max-dependencies.js index bab38496e..6d80bbf04 100644 --- a/tests/src/rules/max-dependencies.js +++ b/tests/src/rules/max-dependencies.js @@ -1,8 +1,6 @@ import { test, getTSParsers } from '../utils'; import { RuleTester } from 'eslint'; -import eslintPkg from 'eslint/package.json'; -import semver from 'semver'; const ruleTester = new RuleTester(); const rule = require('rules/max-dependencies'); @@ -91,43 +89,46 @@ ruleTester.run('max-dependencies', rule, { ], }); -(semver.satisfies(eslintPkg.version, '>5.0.0') ? describe.skip : describe)('TypeScript', () => { - getTSParsers().forEach((parser) => { - ruleTester.run(`max-dependencies (${parser.replace(process.cwd(), '.')})`, rule, { - valid: [ - test({ - code: 'import type { x } from \'./foo\'; import { y } from \'./bar\';', - parser, - options: [{ - max: 1, - ignoreTypeImports: true, - }], - }), - ], - invalid: [ - test({ - code: 'import type { x } from \'./foo\'; import type { y } from \'./bar\'', - parser, - options: [{ - max: 1, - }], - errors: [ - 'Maximum number of dependencies (1) exceeded.', - ], - }), - - test({ - code: 'import type { x } from \'./foo\'; import type { y } from \'./bar\'; import type { z } from \'./baz\'', - parser, - options: [{ - max: 2, - ignoreTypeImports: false, - }], - errors: [ - 'Maximum number of dependencies (2) exceeded.', - ], - }), - ], +describe('TypeScript', () => { + getTSParsers() + // Type-only imports were added in TypeScript ESTree 2.23.0 + .filter((parser) => parser !== require.resolve('typescript-eslint-parser')) + .forEach((parser) => { + ruleTester.run(`max-dependencies (${parser.replace(process.cwd(), '.')})`, rule, { + valid: [ + test({ + code: 'import type { x } from \'./foo\'; import { y } from \'./bar\';', + parser, + options: [{ + max: 1, + ignoreTypeImports: true, + }], + }), + ], + invalid: [ + test({ + code: 'import type { x } from \'./foo\'; import type { y } from \'./bar\'', + parser, + options: [{ + max: 1, + }], + errors: [ + 'Maximum number of dependencies (1) exceeded.', + ], + }), + + test({ + code: 'import type { x } from \'./foo\'; import type { y } from \'./bar\'; import type { z } from \'./baz\'', + parser, + options: [{ + max: 2, + ignoreTypeImports: false, + }], + errors: [ + 'Maximum number of dependencies (2) exceeded.', + ], + }), + ], + }); }); - }); }); diff --git a/tests/src/rules/no-duplicates.js b/tests/src/rules/no-duplicates.js index e550b63ce..ad39543f8 100644 --- a/tests/src/rules/no-duplicates.js +++ b/tests/src/rules/no-duplicates.js @@ -417,6 +417,7 @@ import {x,y} from './foo' context('TypeScript', function () { getNonDefaultParsers() + // Type-only imports were added in TypeScript ESTree 2.23.0 .filter((parser) => parser !== require.resolve('typescript-eslint-parser')) .forEach((parser) => { const parserConfig = { diff --git a/tests/src/rules/no-extraneous-dependencies.js b/tests/src/rules/no-extraneous-dependencies.js index 29604af17..852dbdf4e 100644 --- a/tests/src/rules/no-extraneous-dependencies.js +++ b/tests/src/rules/no-extraneous-dependencies.js @@ -2,8 +2,6 @@ import { getTSParsers, test, testFilePath } from '../utils'; import typescriptConfig from '../../../config/typescript'; import path from 'path'; import fs from 'fs'; -import semver from 'semver'; -import eslintPkg from 'eslint/package.json'; import { RuleTester } from 'eslint'; import flatMap from 'array.prototype.flatmap'; @@ -380,18 +378,19 @@ ruleTester.run('no-extraneous-dependencies', rule, { ], }); -// TODO: figure out why these tests fail in eslint 4 -(semver.satisfies(eslintPkg.version, '^4') ? describe.skip : describe)('TypeScript', () => { - getTSParsers().forEach((parser) => { - const parserConfig = { - parser, - settings: { - 'import/parsers': { [parser]: ['.ts'] }, - 'import/resolver': { 'eslint-import-resolver-typescript': true }, - }, - }; +describe('TypeScript', () => { + getTSParsers() + // Type-only imports were added in TypeScript ESTree 2.23.0 + .filter((parser) => parser !== require.resolve('typescript-eslint-parser')) + .forEach((parser) => { + const parserConfig = { + parser, + settings: { + 'import/parsers': { [parser]: ['.ts'] }, + 'import/resolver': { 'eslint-import-resolver-typescript': true }, + }, + }; - if (parser !== require.resolve('typescript-eslint-parser')) { ruleTester.run('no-extraneous-dependencies', rule, { valid: [ test(Object.assign({ @@ -409,45 +408,22 @@ ruleTester.run('no-extraneous-dependencies', rule, { }, parserConfig)), ], }); - } else { - ruleTester.run('no-extraneous-dependencies', rule, { - valid: [], - invalid: [ - test(Object.assign({ - code: 'import T from "a"; /* typescript-eslint-parser */', - options: [{ packageDir: packageDirWithTypescriptDevDependencies, devDependencies: false }], - errors: [{ - message: "'a' should be listed in the project's dependencies, not devDependencies.", - }], - }, parserConfig)), - test(Object.assign({ - code: 'import type T from "a"; /* typescript-eslint-parser */', - options: [{ packageDir: packageDirWithTypescriptDevDependencies, devDependencies: false }], - errors: [{ - message: "'a' should be listed in the project's dependencies, not devDependencies.", - }], - }, parserConfig)), - ], - }); - } - }); + }); }); -if (semver.satisfies(eslintPkg.version, '>5.0.0')) { - typescriptRuleTester.run('no-extraneous-dependencies typescript type imports', rule, { - valid: [ - test({ - code: 'import type MyType from "not-a-dependency";', - filename: testFilePath('./no-unused-modules/typescript/file-ts-a.ts'), - parser: require.resolve('babel-eslint'), - }), - test({ - code: 'import type { MyType } from "not-a-dependency";', - filename: testFilePath('./no-unused-modules/typescript/file-ts-a.ts'), - parser: require.resolve('babel-eslint'), - }), - ], - invalid: [ - ], - }); -} +typescriptRuleTester.run('no-extraneous-dependencies typescript type imports', rule, { + valid: [ + test({ + code: 'import type MyType from "not-a-dependency";', + filename: testFilePath('./no-unused-modules/typescript/file-ts-a.ts'), + parser: require.resolve('babel-eslint'), + }), + test({ + code: 'import type { MyType } from "not-a-dependency";', + filename: testFilePath('./no-unused-modules/typescript/file-ts-a.ts'), + parser: require.resolve('babel-eslint'), + }), + ], + invalid: [ + ], +}); diff --git a/tests/src/rules/no-unresolved.js b/tests/src/rules/no-unresolved.js index 9e6db8c04..a5ff6da5d 100644 --- a/tests/src/rules/no-unresolved.js +++ b/tests/src/rules/no-unresolved.js @@ -443,6 +443,7 @@ ruleTester.run('import() with built-in parser', rule, { }); context('TypeScript', () => { + // Type-only imports were added in TypeScript ESTree 2.23.0 getTSParsers().filter(x => x !== require.resolve('typescript-eslint-parser')).forEach((parser) => { ruleTester.run(`${parser}: no-unresolved ignore type-only`, rule, { valid: [ diff --git a/tests/src/rules/order.js b/tests/src/rules/order.js index 146306259..4b15cec89 100644 --- a/tests/src/rules/order.js +++ b/tests/src/rules/order.js @@ -2283,6 +2283,7 @@ ruleTester.run('order', rule, { context('TypeScript', function () { getNonDefaultParsers() + // Type-only imports were added in TypeScript ESTree 2.23.0 .filter((parser) => parser !== require.resolve('typescript-eslint-parser')) .forEach((parser) => { const parserConfig = { From 430d16c9b9937c8695781f871ff87c3d63cda2d3 Mon Sep 17 00:00:00 2001 From: Jack Bates Date: Mon, 20 Sep 2021 17:38:42 -0700 Subject: [PATCH 4/4] [Tests] eslint-import-resolver-typescript@1.0.2 doesn't resolve .js --- tests/src/rules/no-extraneous-dependencies.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/src/rules/no-extraneous-dependencies.js b/tests/src/rules/no-extraneous-dependencies.js index 852dbdf4e..131604ad9 100644 --- a/tests/src/rules/no-extraneous-dependencies.js +++ b/tests/src/rules/no-extraneous-dependencies.js @@ -387,7 +387,7 @@ describe('TypeScript', () => { parser, settings: { 'import/parsers': { [parser]: ['.ts'] }, - 'import/resolver': { 'eslint-import-resolver-typescript': true }, + 'import/resolver': ['node', 'typescript'], }, };