Skip to content

Commit

Permalink
[Tests] no-extraneous-dependencies: add tests for importing types
Browse files Browse the repository at this point in the history
  • Loading branch information
taye authored and ljharb committed Jun 13, 2020
1 parent f7c7d79 commit 6ed7446
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 50 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ This change log adheres to standards from [Keep a CHANGELOG](http://keepachangel
### Fixed
- [`no-extraneous-dependencies`]/TypeScript: do not error when importing type from dev dependencies ([#1820], thanks [@fernandopasik])

### Changed
- [`no-extraneous-dependencies`]: add tests for importing types ([#1824], thanks [@taye])

## [2.21.2] - 2020-06-09
### Fixed
- [`order`]: avoid a crash on TypeScript’s `export import` syntax ([#1808], thanks [@ljharb])
Expand Down Expand Up @@ -707,6 +710,7 @@ for info on changes for earlier releases.

[`memo-parser`]: ./memo-parser/README.md

[#1824]: https://github.com/benmosher/eslint-plugin-import/pull/1824
[#1820]: https://github.com/benmosher/eslint-plugin-import/pull/1820
[#1819]: https://github.com/benmosher/eslint-plugin-import/pull/1819
[#1802]: https://github.com/benmosher/eslint-plugin-import/pull/1802
Expand Down Expand Up @@ -1225,3 +1229,4 @@ for info on changes for earlier releases.
[@malykhinvi]: https://github.com/malykhinvi
[@nicolashenry]: https://github.com/nicolashenry
[@fernandopasik]: https://github.com/fernandopasik
[@taye]: https://github.com/taye
118 changes: 68 additions & 50 deletions tests/src/rules/no-extraneous-dependencies.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import { getTSParsers, test } from '../utils'
import { getTSParsers, test, testFilePath } from '../utils'
import typescriptConfig from '../../../config/typescript'
import * as path from 'path'
import * as fs from 'fs'

import { RuleTester } from 'eslint'
import flatMap from 'array.prototype.flatmap'

const ruleTester = new RuleTester()
const typescriptRuleTester = new RuleTester(typescriptConfig)
const rule = require('rules/no-extraneous-dependencies')

const packageDirWithSyntaxError = path.join(__dirname, '../../files/with-syntax-error')
Expand Down Expand Up @@ -315,54 +317,70 @@ ruleTester.run('no-extraneous-dependencies', rule, {
})

describe('TypeScript', function () {
getTSParsers()
.forEach((parser) => {
const parserConfig = {
parser: parser,
settings: {
'import/parsers': { [parser]: ['.ts'] },
'import/resolver': { 'eslint-import-resolver-typescript': true },
},
}
getTSParsers().forEach((parser) => {
const parserConfig = {
parser: 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({
code: 'import type { JSONSchema7Type } from "@types/json-schema";',
options: [{packageDir: packageDirWithTypescriptDevDependencies, devDependencies: false }],
}, parserConfig)),
],
invalid: [
test(Object.assign({
code: 'import { JSONSchema7Type } from "@types/json-schema";',
options: [{packageDir: packageDirWithTypescriptDevDependencies, devDependencies: false }],
errors: [{
message: "'@types/json-schema' should be listed in the project's dependencies, not devDependencies.",
}],
}, parserConfig)),
],
})
} else {
ruleTester.run('no-extraneous-dependencies', rule, {
valid: [],
invalid: [
test(Object.assign({
code: 'import { JSONSchema7Type } from "@types/json-schema";',
options: [{packageDir: packageDirWithTypescriptDevDependencies, devDependencies: false }],
errors: [{
message: "'@types/json-schema' should be listed in the project's dependencies, not devDependencies.",
}],
}, parserConfig)),
test(Object.assign({
code: 'import type { JSONSchema7Type } from "@types/json-schema";',
options: [{packageDir: packageDirWithTypescriptDevDependencies, devDependencies: false }],
errors: [{
message: "'@types/json-schema' should be listed in the project's dependencies, not devDependencies.",
}],
}, parserConfig)),
],
})
}
})
if (parser !== require.resolve('typescript-eslint-parser')) {
ruleTester.run('no-extraneous-dependencies', rule, {
valid: [
test(Object.assign({
code: 'import type { JSONSchema7Type } from "@types/json-schema";',
options: [{packageDir: packageDirWithTypescriptDevDependencies, devDependencies: false }],
}, parserConfig)),
],
invalid: [
test(Object.assign({
code: 'import { JSONSchema7Type } from "@types/json-schema";',
options: [{packageDir: packageDirWithTypescriptDevDependencies, devDependencies: false }],
errors: [{
message: "'@types/json-schema' should be listed in the project's dependencies, not devDependencies.",
}],
}, parserConfig)),
],
})
} else {
ruleTester.run('no-extraneous-dependencies', rule, {
valid: [],
invalid: [
test(Object.assign({
code: 'import { JSONSchema7Type } from "@types/json-schema";',
options: [{packageDir: packageDirWithTypescriptDevDependencies, devDependencies: false }],
errors: [{
message: "'@types/json-schema' should be listed in the project's dependencies, not devDependencies.",
}],
}, parserConfig)),
test(Object.assign({
code: 'import type { JSONSchema7Type } from "@types/json-schema";',
options: [{packageDir: packageDirWithTypescriptDevDependencies, devDependencies: false }],
errors: [{
message: "'@types/json-schema' should be listed in the project's dependencies, not devDependencies.",
}],
}, parserConfig)),
],
})
}
})
})

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: [
],
})

0 comments on commit 6ed7446

Please sign in to comment.