Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
epidemian
GitHub Repository: epidemian/eslint-plugin-import
Path: blob/main/tests/src/rules/default.js
829 views
1
import path from 'path';
2
import { test, SYNTAX_CASES, getTSParsers } from '../utils';
3
import { RuleTester } from 'eslint';
4
5
import { CASE_SENSITIVE_FS } from 'eslint-module-utils/resolve';
6
7
const ruleTester = new RuleTester();
8
const rule = require('rules/default');
9
10
ruleTester.run('default', rule, {
11
valid: [
12
test({ code: 'import "./malformed.js"' }),
13
14
test({ code: 'import foo from "./empty-folder";' }),
15
test({ code: 'import { foo } from "./default-export";' }),
16
test({ code: 'import foo from "./default-export";' }),
17
test({ code: 'import foo from "./mixed-exports";' }),
18
test({
19
code: 'import bar from "./default-export";' }),
20
test({
21
code: 'import CoolClass from "./default-class";' }),
22
test({
23
code: 'import bar, { baz } from "./default-export";' }),
24
25
// core modules always have a default
26
test({ code: 'import crypto from "crypto";' }),
27
28
test({ code: 'import common from "./common";' }),
29
30
// es7 export syntax
31
test({ code: 'export bar from "./bar"',
32
parser: require.resolve('babel-eslint') }),
33
test({ code: 'export { default as bar } from "./bar"' }),
34
test({ code: 'export bar, { foo } from "./bar"',
35
parser: require.resolve('babel-eslint') }),
36
test({ code: 'export { default as bar, foo } from "./bar"' }),
37
test({ code: 'export bar, * as names from "./bar"',
38
parser: require.resolve('babel-eslint') }),
39
40
// sanity check
41
test({ code: 'export {a} from "./named-exports"' }),
42
test({
43
code: 'import twofer from "./trampoline"',
44
parser: require.resolve('babel-eslint'),
45
}),
46
47
// jsx
48
test({
49
code: 'import MyCoolComponent from "./jsx/MyCoolComponent.jsx"',
50
parserOptions: {
51
sourceType: 'module',
52
ecmaVersion: 6,
53
ecmaFeatures: { jsx: true },
54
},
55
}),
56
57
// #54: import of named export default
58
test({ code: 'import foo from "./named-default-export"' }),
59
60
// #94: redux export of execution result,
61
test({ code: 'import connectedApp from "./redux"' }),
62
test({
63
code: 'import App from "./jsx/App"',
64
parserOptions: {
65
ecmaFeatures: { jsx: true, modules: true },
66
},
67
}),
68
69
// from no-errors
70
test({
71
code: "import Foo from './jsx/FooES7.js';",
72
parser: require.resolve('babel-eslint'),
73
}),
74
75
// #545: more ES7 cases
76
test({
77
code: "import bar from './default-export-from.js';",
78
parser: require.resolve('babel-eslint'),
79
}),
80
test({
81
code: "import bar from './default-export-from-named.js';",
82
parser: require.resolve('babel-eslint'),
83
}),
84
test({
85
code: "import bar from './default-export-from-ignored.js';",
86
settings: { 'import/ignore': ['common'] },
87
parser: require.resolve('babel-eslint'),
88
}),
89
test({
90
code: "export bar from './default-export-from-ignored.js';",
91
settings: { 'import/ignore': ['common'] },
92
parser: require.resolve('babel-eslint'),
93
}),
94
95
...SYNTAX_CASES,
96
],
97
98
invalid: [
99
test({
100
code: "import Foo from './jsx/FooES7.js';",
101
errors: ["Parse errors in imported module './jsx/FooES7.js': Unexpected token = (6:16)"],
102
}),
103
104
test({
105
code: 'import baz from "./named-exports";',
106
errors: [{ message: 'No default export found in imported module "./named-exports".',
107
type: 'ImportDefaultSpecifier' }] }),
108
109
// es7 export syntax
110
test({
111
code: 'export baz from "./named-exports"',
112
parser: require.resolve('babel-eslint'),
113
errors: ['No default export found in imported module "./named-exports".'],
114
}),
115
test({
116
code: 'export baz, { bar } from "./named-exports"',
117
parser: require.resolve('babel-eslint'),
118
errors: ['No default export found in imported module "./named-exports".'],
119
}),
120
test({
121
code: 'export baz, * as names from "./named-exports"',
122
parser: require.resolve('babel-eslint'),
123
errors: ['No default export found in imported module "./named-exports".'],
124
}),
125
// exports default from a module with no default
126
test({
127
code: 'import twofer from "./broken-trampoline"',
128
parser: require.resolve('babel-eslint'),
129
errors: ['No default export found in imported module "./broken-trampoline".'],
130
}),
131
132
// #328: * exports do not include default
133
test({
134
code: 'import barDefault from "./re-export"',
135
errors: ['No default export found in imported module "./re-export".'],
136
}),
137
],
138
});
139
140
// #311: import of mismatched case
141
if (!CASE_SENSITIVE_FS) {
142
ruleTester.run('default (path case-insensitivity)', rule, {
143
valid: [
144
test({
145
code: 'import foo from "./jsx/MyUncoolComponent.jsx"',
146
}),
147
],
148
invalid: [
149
test({
150
code: 'import bar from "./Named-Exports"',
151
errors: ['No default export found in imported module "./Named-Exports".'],
152
}),
153
],
154
});
155
}
156
157
context('TypeScript', function () {
158
getTSParsers().forEach((parser) => {
159
ruleTester.run(`default`, rule, {
160
valid: [
161
test({
162
code: `import foobar from "./typescript-default"`,
163
parser,
164
settings: {
165
'import/parsers': { [parser]: ['.ts'] },
166
'import/resolver': { 'eslint-import-resolver-typescript': true },
167
},
168
}),
169
test({
170
code: `import foobar from "./typescript-export-assign-default"`,
171
parser,
172
settings: {
173
'import/parsers': { [parser]: ['.ts'] },
174
'import/resolver': { 'eslint-import-resolver-typescript': true },
175
},
176
}),
177
test({
178
code: `import foobar from "./typescript-export-assign-function"`,
179
parser,
180
settings: {
181
'import/parsers': { [parser]: ['.ts'] },
182
'import/resolver': { 'eslint-import-resolver-typescript': true },
183
},
184
}),
185
test({
186
code: `import foobar from "./typescript-export-assign-mixed"`,
187
parser,
188
settings: {
189
'import/parsers': { [parser]: ['.ts'] },
190
'import/resolver': { 'eslint-import-resolver-typescript': true },
191
},
192
}),
193
test({
194
code: `import foobar from "./typescript-export-assign-default-reexport"`,
195
parser,
196
settings: {
197
'import/parsers': { [parser]: ['.ts'] },
198
'import/resolver': { 'eslint-import-resolver-typescript': true },
199
},
200
}),
201
test({
202
code: `import React from "./typescript-export-assign-default-namespace"`,
203
parser,
204
settings: {
205
'import/parsers': { [parser]: ['.ts'] },
206
'import/resolver': { 'eslint-import-resolver-typescript': true },
207
},
208
parserOptions: {
209
tsconfigRootDir: path.resolve(__dirname, '../../files/typescript-export-assign-default-namespace/'),
210
},
211
}),
212
test({
213
code: `import Foo from "./typescript-export-as-default-namespace"`,
214
parser,
215
settings: {
216
'import/parsers': { [parser]: ['.ts'] },
217
'import/resolver': { 'eslint-import-resolver-typescript': true },
218
},
219
parserOptions: {
220
tsconfigRootDir: path.resolve(__dirname, '../../files/typescript-export-as-default-namespace/'),
221
},
222
}),
223
test({
224
code: `import Foo from "./typescript-export-react-test-renderer"`,
225
parser,
226
settings: {
227
'import/parsers': { [parser]: ['.ts'] },
228
'import/resolver': { 'eslint-import-resolver-typescript': true },
229
},
230
parserOptions: {
231
tsconfigRootDir: path.resolve(__dirname, '../../files/typescript-export-react-test-renderer/'),
232
},
233
}),
234
test({
235
code: `import Foo from "./typescript-extended-config"`,
236
parser,
237
settings: {
238
'import/parsers': { [parser]: ['.ts'] },
239
'import/resolver': { 'eslint-import-resolver-typescript': true },
240
},
241
parserOptions: {
242
tsconfigRootDir: path.resolve(__dirname, '../../files/typescript-extended-config/'),
243
},
244
}),
245
test({
246
code: `import foobar from "./typescript-export-assign-property"`,
247
parser,
248
settings: {
249
'import/parsers': { [parser]: ['.ts'] },
250
'import/resolver': { 'eslint-import-resolver-typescript': true },
251
},
252
}),
253
],
254
255
invalid: [
256
test({
257
code: `import foobar from "./typescript"`,
258
parser,
259
settings: {
260
'import/parsers': { [parser]: ['.ts'] },
261
'import/resolver': { 'eslint-import-resolver-typescript': true },
262
},
263
errors: ['No default export found in imported module "./typescript".'],
264
}),
265
test({
266
code: `import React from "./typescript-export-assign-default-namespace"`,
267
parser,
268
settings: {
269
'import/parsers': { [parser]: ['.ts'] },
270
'import/resolver': { 'eslint-import-resolver-typescript': true },
271
},
272
errors: ['No default export found in imported module "./typescript-export-assign-default-namespace".'],
273
}),
274
test({
275
code: `import FooBar from "./typescript-export-as-default-namespace"`,
276
parser,
277
settings: {
278
'import/parsers': { [parser]: ['.ts'] },
279
'import/resolver': { 'eslint-import-resolver-typescript': true },
280
},
281
errors: ['No default export found in imported module "./typescript-export-as-default-namespace".'],
282
}),
283
test({
284
code: `import Foo from "./typescript-export-as-default-namespace"`,
285
parser,
286
settings: {
287
'import/parsers': { [parser]: ['.ts'] },
288
'import/resolver': { 'eslint-import-resolver-typescript': true },
289
},
290
parserOptions: {
291
tsconfigRootDir: path.resolve(__dirname, '../../files/typescript-no-compiler-options/'),
292
},
293
errors: [
294
{
295
message: 'No default export found in imported module "./typescript-export-as-default-namespace".',
296
line: 1,
297
column: 8,
298
endLine: 1,
299
endColumn: 11,
300
},
301
],
302
}),
303
],
304
});
305
});
306
});
307
308