1
- import rule from '@next/eslint-plugin-next/dist/rules/no-async-client-component'
2
- import { RuleTester } from 'eslint'
3
- ; ( RuleTester as any ) . setDefaultConfig ( {
4
- parserOptions : {
5
- ecmaVersion : 2018 ,
6
- sourceType : 'module' ,
7
- ecmaFeatures : {
8
- modules : true ,
9
- jsx : true ,
10
- } ,
11
- } ,
12
- } )
13
- const ruleTester = new RuleTester ( )
1
+ import { RuleTester as ESLintTesterV8 } from 'eslint'
2
+ import { RuleTester as ESLintTesterV9 } from 'eslint-v9'
3
+ import { rules } from '@next/eslint-plugin-next'
4
+
5
+ const NextESLintRule = rules [ 'no-async-client-component' ]
14
6
15
7
const message =
16
8
'Prevent client components from being async functions. See: https://nextjs.org/docs/messages/no-async-client-component'
17
9
18
- ruleTester . run ( 'no-async-client-component single line' , rule , {
10
+ const tests = {
19
11
valid : [
20
12
`
21
13
export default async function MyComponent() {
22
14
return <></>
23
15
}
24
16
` ,
17
+ `
18
+ "use client"
19
+
20
+ export default async function myFunction() {
21
+ return ''
22
+ }
23
+ ` ,
24
+ `
25
+ async function MyComponent() {
26
+ return <></>
27
+ }
28
+
29
+ export default MyComponent
30
+ ` ,
31
+ `
32
+ "use client"
33
+
34
+ async function myFunction() {
35
+ return ''
36
+ }
37
+
38
+ export default myFunction
39
+ ` ,
40
+ `
41
+ "use client"
42
+
43
+ const myFunction = () => {
44
+ return ''
45
+ }
46
+
47
+ export default myFunction
48
+ ` ,
25
49
] ,
26
50
invalid : [
27
51
{
@@ -32,26 +56,8 @@ ruleTester.run('no-async-client-component single line', rule, {
32
56
return <></>
33
57
}
34
58
` ,
35
- errors : [
36
- {
37
- message,
38
- } ,
39
- ] ,
59
+ errors : [ { message } ] ,
40
60
} ,
41
- ] ,
42
- } )
43
-
44
- ruleTester . run ( 'no-async-client-component single line capitalization' , rule , {
45
- valid : [
46
- `
47
- "use client"
48
-
49
- export default async function myFunction() {
50
- return ''
51
- }
52
- ` ,
53
- ] ,
54
- invalid : [
55
61
{
56
62
code : `
57
63
"use client"
@@ -60,26 +66,8 @@ ruleTester.run('no-async-client-component single line capitalization', rule, {
60
66
return ''
61
67
}
62
68
` ,
63
- errors : [
64
- {
65
- message,
66
- } ,
67
- ] ,
69
+ errors : [ { message } ] ,
68
70
} ,
69
- ] ,
70
- } )
71
-
72
- ruleTester . run ( 'no-async-client-component multiple line' , rule , {
73
- valid : [
74
- `
75
- async function MyComponent() {
76
- return <></>
77
- }
78
-
79
- export default MyComponent
80
- ` ,
81
- ] ,
82
- invalid : [
83
71
{
84
72
code : `
85
73
"use client"
@@ -90,28 +78,8 @@ ruleTester.run('no-async-client-component multiple line', rule, {
90
78
91
79
export default MyComponent
92
80
` ,
93
- errors : [
94
- {
95
- message,
96
- } ,
97
- ] ,
81
+ errors : [ { message } ] ,
98
82
} ,
99
- ] ,
100
- } )
101
-
102
- ruleTester . run ( 'no-async-client-component multiple line capitalization' , rule , {
103
- valid : [
104
- `
105
- "use client"
106
-
107
- async function myFunction() {
108
- return ''
109
- }
110
-
111
- export default myFunction
112
- ` ,
113
- ] ,
114
- invalid : [
115
83
{
116
84
code : `
117
85
"use client"
@@ -122,28 +90,8 @@ ruleTester.run('no-async-client-component multiple line capitalization', rule, {
122
90
123
91
export default MyFunction
124
92
` ,
125
- errors : [
126
- {
127
- message,
128
- } ,
129
- ] ,
93
+ errors : [ { message } ] ,
130
94
} ,
131
- ] ,
132
- } )
133
-
134
- ruleTester . run ( 'no-async-client-component arrow function' , rule , {
135
- valid : [
136
- `
137
- "use client"
138
-
139
- const myFunction = () => {
140
- return ''
141
- }
142
-
143
- export default myFunction
144
- ` ,
145
- ] ,
146
- invalid : [
147
95
{
148
96
code : `
149
97
"use client"
@@ -154,11 +102,33 @@ ruleTester.run('no-async-client-component arrow function', rule, {
154
102
155
103
export default MyFunction
156
104
` ,
157
- errors : [
158
- {
159
- message,
160
- } ,
161
- ] ,
105
+ errors : [ { message } ] ,
162
106
} ,
163
107
] ,
108
+ }
109
+
110
+ describe ( 'no-async-client-component single line' , ( ) => {
111
+ new ESLintTesterV8 ( {
112
+ parserOptions : {
113
+ ecmaVersion : 2018 ,
114
+ sourceType : 'module' ,
115
+ ecmaFeatures : {
116
+ modules : true ,
117
+ jsx : true ,
118
+ } ,
119
+ } ,
120
+ } ) . run ( 'eslint-v8' , NextESLintRule , tests )
121
+
122
+ new ESLintTesterV9 ( {
123
+ languageOptions : {
124
+ ecmaVersion : 2018 ,
125
+ sourceType : 'module' ,
126
+ parserOptions : {
127
+ ecmaFeatures : {
128
+ modules : true ,
129
+ jsx : true ,
130
+ } ,
131
+ } ,
132
+ } ,
133
+ } ) . run ( 'eslint-v9' , NextESLintRule , tests )
164
134
} )
0 commit comments