Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
epidemian
GitHub Repository: epidemian/eslint-plugin-import
Path: blob/main/tests/src/rules/group-exports.js
829 views
1
import { test } from '../utils';
2
import { RuleTester } from 'eslint';
3
import rule from 'rules/group-exports';
4
import { resolve } from 'path';
5
import { default as babelPresetFlow } from 'babel-preset-flow';
6
7
/* eslint-disable max-len */
8
const errors = {
9
named: 'Multiple named export declarations; consolidate all named exports into a single export declaration',
10
commonjs: 'Multiple CommonJS exports; consolidate all exports into a single assignment to `module.exports`',
11
};
12
/* eslint-enable max-len */
13
const ruleTester = new RuleTester({
14
parser: resolve(__dirname, '../../../node_modules/babel-eslint'),
15
parserOptions: {
16
babelOptions: {
17
configFile: false,
18
babelrc: false,
19
presets: [babelPresetFlow],
20
},
21
},
22
});
23
24
ruleTester.run('group-exports', rule, {
25
valid: [
26
test({ code: 'export const test = true' }),
27
test({ code: `
28
export default {}
29
export const test = true
30
` }),
31
test({ code: `
32
const first = true
33
const second = true
34
export {
35
first,
36
second
37
}
38
` }),
39
test({ code: `
40
export default {}
41
/* test */
42
export const test = true
43
` }),
44
test({ code: `
45
export default {}
46
// test
47
export const test = true
48
` }),
49
test({ code: `
50
export const test = true
51
/* test */
52
export default {}
53
` }),
54
test({ code: `
55
export const test = true
56
// test
57
export default {}
58
` }),
59
test({ code: `
60
export { default as module1 } from './module-1'
61
export { default as module2 } from './module-2'
62
` }),
63
test({ code: 'module.exports = {} ' }),
64
test({ code: `
65
module.exports = { test: true,
66
another: false }
67
` }),
68
test({ code: 'exports.test = true' }),
69
70
test({ code: `
71
module.exports = {}
72
const test = module.exports
73
` }),
74
test({ code: `
75
exports.test = true
76
const test = exports.test
77
` }),
78
test({ code: `
79
module.exports = {}
80
module.exports.too.deep = true
81
` }),
82
test({ code: `
83
module.exports.deep.first = true
84
module.exports.deep.second = true
85
` }),
86
test({ code: `
87
module.exports = {}
88
exports.too.deep = true
89
` }),
90
test({ code: `
91
export default {}
92
const test = true
93
export { test }
94
` }),
95
test({ code: `
96
const test = true
97
export { test }
98
const another = true
99
export default {}
100
` }),
101
test({ code: `
102
module.something.else = true
103
module.something.different = true
104
` }),
105
test({ code: `
106
module.exports.test = true
107
module.something.different = true
108
` }),
109
test({ code: `
110
exports.test = true
111
module.something.different = true
112
` }),
113
test({ code: `
114
unrelated = 'assignment'
115
module.exports.test = true
116
` }),
117
test({ code: `
118
type firstType = {
119
propType: string
120
};
121
const first = {};
122
export type { firstType };
123
export { first };
124
` }),
125
test({ code: `
126
type firstType = {
127
propType: string
128
};
129
type secondType = {
130
propType: string
131
};
132
export type { firstType, secondType };
133
` }),
134
test({ code: `
135
export type { type1A, type1B } from './module-1'
136
export { method1 } from './module-1'
137
` }),
138
],
139
invalid: [
140
test({
141
code: `
142
export const test = true
143
export const another = true
144
`,
145
errors: [
146
errors.named,
147
errors.named,
148
],
149
}),
150
test({
151
code: `
152
export { method1 } from './module-1'
153
export { method2 } from './module-1'
154
`,
155
errors: [
156
errors.named,
157
errors.named,
158
],
159
}),
160
test({
161
code: `
162
module.exports = {}
163
module.exports.test = true
164
module.exports.another = true
165
`,
166
errors: [
167
errors.commonjs,
168
errors.commonjs,
169
errors.commonjs,
170
],
171
}),
172
test({
173
code: `
174
module.exports = {}
175
module.exports.test = true
176
`,
177
errors: [
178
errors.commonjs,
179
errors.commonjs,
180
],
181
}),
182
test({
183
code: `
184
module.exports = { test: true }
185
module.exports.another = true
186
`,
187
errors: [
188
errors.commonjs,
189
errors.commonjs,
190
],
191
}),
192
test({
193
code: `
194
module.exports.test = true
195
module.exports.another = true
196
`,
197
errors: [
198
errors.commonjs,
199
errors.commonjs,
200
],
201
}),
202
test({
203
code: `
204
exports.test = true
205
module.exports.another = true
206
`,
207
errors: [
208
errors.commonjs,
209
errors.commonjs,
210
],
211
}),
212
test({
213
code: `
214
module.exports = () => {}
215
module.exports.attached = true
216
`,
217
errors: [
218
errors.commonjs,
219
errors.commonjs,
220
],
221
}),
222
test({
223
code: `
224
module.exports = function test() {}
225
module.exports.attached = true
226
`,
227
errors: [
228
errors.commonjs,
229
errors.commonjs,
230
],
231
}),
232
test({
233
code: `
234
module.exports = () => {}
235
exports.test = true
236
exports.another = true
237
`,
238
errors: [
239
errors.commonjs,
240
errors.commonjs,
241
errors.commonjs,
242
],
243
}),
244
test({
245
code: `
246
module.exports = "non-object"
247
module.exports.attached = true
248
`,
249
errors: [
250
errors.commonjs,
251
errors.commonjs,
252
],
253
}),
254
test({
255
code: `
256
module.exports = "non-object"
257
module.exports.attached = true
258
module.exports.another = true
259
`,
260
errors: [
261
errors.commonjs,
262
errors.commonjs,
263
errors.commonjs,
264
],
265
}),
266
test({
267
code: `
268
type firstType = {
269
propType: string
270
};
271
type secondType = {
272
propType: string
273
};
274
const first = {};
275
export type { firstType };
276
export type { secondType };
277
export { first };
278
`,
279
errors: [
280
errors.named,
281
errors.named,
282
],
283
}),
284
test({
285
code: `
286
export type { type1 } from './module-1'
287
export type { type2 } from './module-1'
288
`,
289
errors: [
290
errors.named,
291
errors.named,
292
],
293
}),
294
],
295
});
296
297