Skip to content
File

Blob: tools/custom-eslint-rules.test.mjs

javascript128 lines
1/**
2 * Tests for custom ESLint rules.
3 */
4import { RuleTester } from 'eslint';
5import { describe, it } from 'node:test';
6import { noExportDefaultOfImportStar } from './custom-eslint-rules.mjs';
7 
8// Create a new RuleTester instance
9const ruleTester = new RuleTester({
10 languageOptions: {
11 ecmaVersion: 2022,
12 sourceType: 'module',
13 },
14});
15 
16describe('no-export-default-of-import-star', () => {
17 it('should validate the rule', () => {
18 ruleTester.run('no-export-default-of-import-star', noExportDefaultOfImportStar, {
19 valid: [
20 // Valid: Regular named import
21 {
22 code: `
23 import { foo } from 'some-module';
24 export default foo;
25 `,
26 },
27 // Valid: Inline default export
28 {
29 code: `
30 export default { foo: 'bar' };
31 `,
32 },
33 // Valid: Export namespace import as named export
34 {
35 code: `
36 import * as foo from 'some-module';
37 export { foo };
38 `,
39 },
40 // Valid: Namespace import used for something other than export default
41 {
42 code: `
43 import * as foo from 'some-module';
44 const bar = foo;
45 `,
46 },
47 // Valid: Export default with non-identifier
48 {
49 code: `
50 import * as foo from 'some-module';
51 export default foo.bar;
52 `,
53 },
54 // Valid: Re-export all
55 {
56 code: `
57 export * from 'some-module';
58 `,
59 },
60 // Valid: Named imports with object literal default export
61 {
62 code: `
63 import { var1, var2 } from 'some-module';
64 export * from 'some-module';
65 export default { var1, var2 };
66 `,
67 },
68 ],
69 
70 invalid: [
71 // Invalid: Export namespace import as default
72 {
73 code: `
74 import * as foo from 'some-module';
75 export default foo;
76 `,
77 errors: [
78 {
79 messageId: 'noExportDefaultOfImportStar',
80 data: { source: 'some-module' },
81 },
82 ],
83 },
84 // Invalid: Common pattern with _default
85 {
86 code: `
87 import * as _default from 'some-module';
88 export default _default;
89 `,
90 errors: [
91 {
92 messageId: 'noExportDefaultOfImportStar',
93 data: { source: 'some-module' },
94 },
95 ],
96 },
97 // Invalid: Namespace import with scoped package
98 {
99 code: `
100 import * as myModule from '@scope/package';
101 export default myModule;
102 `,
103 errors: [
104 {
105 messageId: 'noExportDefaultOfImportStar',
106 data: { source: '@scope/package' },
107 },
108 ],
109 },
110 // Invalid: Multiple imports, only one violates rule
111 {
112 code: `
113 import { named } from 'module1';
114 import * as ns from 'module2';
115 export default ns;
116 `,
117 errors: [
118 {
119 messageId: 'noExportDefaultOfImportStar',
120 data: { source: 'module2' },
121 },
122 ],
123 },
124 ],
125 });
126 });
127});