Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
epidemian
GitHub Repository: epidemian/eslint-plugin-import
Path: blob/main/tests/src/utils.js
829 views
1
import path from 'path';
2
import eslintPkg from 'eslint/package.json';
3
import semver from 'semver';
4
5
// warms up the module cache. this import takes a while (>500ms)
6
import 'babel-eslint';
7
8
export function testFilePath(relativePath) {
9
return path.join(process.cwd(), './tests/files', relativePath);
10
}
11
12
export function getTSParsers() {
13
const parsers = [];
14
if (semver.satisfies(eslintPkg.version, '>=4.0.0 <6.0.0')) {
15
parsers.push(require.resolve('typescript-eslint-parser'));
16
}
17
18
if (semver.satisfies(eslintPkg.version, '>5.0.0')) {
19
parsers.push(require.resolve('@typescript-eslint/parser'));
20
}
21
return parsers;
22
}
23
24
export function getNonDefaultParsers() {
25
return getTSParsers().concat(require.resolve('babel-eslint'));
26
}
27
28
export const FILENAME = testFilePath('foo.js');
29
30
export function testVersion(specifier, t) {
31
return semver.satisfies(eslintPkg.version, specifier) ? test(t()) : [];
32
}
33
34
export function test(t) {
35
if (arguments.length !== 1) {
36
throw new SyntaxError('`test` requires exactly one object argument');
37
}
38
return Object.assign({
39
filename: FILENAME,
40
}, t, {
41
parserOptions: Object.assign({
42
sourceType: 'module',
43
ecmaVersion: 9,
44
}, t.parserOptions),
45
});
46
}
47
48
export function testContext(settings) {
49
return { getFilename() { return FILENAME; },
50
settings: settings || {} };
51
}
52
53
export function getFilename(file) {
54
return path.join(__dirname, '..', 'files', file || 'foo.js');
55
}
56
57
/**
58
* to be added as valid cases just to ensure no nullable fields are going
59
* to crash at runtime
60
* @type {Array}
61
*/
62
export const SYNTAX_CASES = [
63
64
test({ code: 'for (let { foo, bar } of baz) {}' }),
65
test({ code: 'for (let [ foo, bar ] of baz) {}' }),
66
67
test({ code: 'const { x, y } = bar' }),
68
test({ code: 'const { x, y, ...z } = bar', parser: require.resolve('babel-eslint') }),
69
70
// all the exports
71
test({ code: 'let x; export { x }' }),
72
test({ code: 'let x; export { x as y }' }),
73
74
// not sure about these since they reference a file
75
// test({ code: 'export { x } from "./y.js"'}),
76
// test({ code: 'export * as y from "./y.js"', parser: require.resolve('babel-eslint')}),
77
78
test({ code: 'export const x = null' }),
79
test({ code: 'export var x = null' }),
80
test({ code: 'export let x = null' }),
81
82
test({ code: 'export default x' }),
83
test({ code: 'export default class x {}' }),
84
85
// issue #267: parser opt-in extension list
86
test({
87
code: 'import json from "./data.json"',
88
settings: { 'import/extensions': ['.js'] }, // breaking: remove for v2
89
}),
90
91
// JSON
92
test({
93
code: 'import foo from "./foobar.json";',
94
settings: { 'import/extensions': ['.js'] }, // breaking: remove for v2
95
}),
96
test({
97
code: 'import foo from "./foobar";',
98
settings: { 'import/extensions': ['.js'] }, // breaking: remove for v2
99
}),
100
101
// issue #370: deep commonjs import
102
test({
103
code: 'import { foo } from "./issue-370-commonjs-namespace/bar"',
104
settings: { 'import/ignore': ['foo'] },
105
}),
106
107
// issue #348: deep commonjs re-export
108
test({
109
code: 'export * from "./issue-370-commonjs-namespace/bar"',
110
settings: { 'import/ignore': ['foo'] },
111
}),
112
113
test({
114
code: 'import * as a from "./commonjs-namespace/a"; a.b',
115
}),
116
117
// ignore invalid extensions
118
test({
119
code: 'import { foo } from "./ignore.invalid.extension"',
120
}),
121
122
];
123
124