@@ -3,7 +3,7 @@ import type { ResolvedResult } from 'eslint-import-context'
3
3
4
4
vi . mock ( 'eslint-import-context' , ( ) => {
5
5
let mockContext : { cwd ?: string } | null = null
6
-
6
+
7
7
return {
8
8
useRuleContext : vi . fn ( ( ) => mockContext ) ,
9
9
__setMockContext : ( context : { cwd ?: string } | null ) => {
@@ -13,10 +13,13 @@ vi.mock('eslint-import-context', () => {
13
13
}
14
14
} )
15
15
16
- import { resolve , createTypeScriptImportResolver } from 'eslint-import-resolver-typescript'
16
+ import {
17
+ resolve ,
18
+ createTypeScriptImportResolver ,
19
+ } from 'eslint-import-resolver-typescript'
17
20
import { useRuleContext } from 'eslint-import-context'
18
21
19
- const mockModule = await import ( 'eslint-import-context' ) as any
22
+ const mockModule = ( await import ( 'eslint-import-context' ) ) as any
20
23
21
24
describe ( 'Context-aware import resolution' , ( ) => {
22
25
const originalCwd = process . cwd ( )
@@ -34,40 +37,58 @@ describe('Context-aware import resolution', () => {
34
37
35
38
describe ( 'Dynamic cwd resolution' , ( ) => {
36
39
it ( 'should use context.cwd when available' , ( ) => {
37
- const mockResolve = vi . fn ( ) . mockReturnValue ( { found : false } as ResolvedResult )
38
- const mockResolverFactory = vi . fn ( ) . mockImplementation ( ( ) => ( { sync : mockResolve } ) )
39
- vi . doMock ( 'unrs-resolver' , ( ) => ( { ResolverFactory : mockResolverFactory } ) )
40
+ const mockResolve = vi
41
+ . fn ( )
42
+ . mockReturnValue ( { found : false } as ResolvedResult )
43
+ const mockResolverFactory = vi
44
+ . fn ( )
45
+ . mockImplementation ( ( ) => ( { sync : mockResolve } ) )
46
+ vi . doMock ( 'unrs-resolver' , ( ) => ( {
47
+ ResolverFactory : mockResolverFactory ,
48
+ } ) )
40
49
41
50
mockModule . __setMockContext ( { cwd : testCwd1 } )
42
-
51
+
43
52
resolve ( 'some-module' , '/test/file.ts' , { } )
44
-
53
+
45
54
expect ( useRuleContext ) . toHaveBeenCalled ( )
46
55
expect ( mockResolve ) . toHaveBeenCalled ( )
47
56
} )
48
57
49
58
it ( 'should fallback to process.cwd() when context is null' , ( ) => {
50
- const mockResolve = vi . fn ( ) . mockReturnValue ( { found : false } as ResolvedResult )
51
- const mockResolverFactory = vi . fn ( ) . mockImplementation ( ( ) => ( { sync : mockResolve } ) )
52
- vi . doMock ( 'unrs-resolver' , ( ) => ( { ResolverFactory : mockResolverFactory } ) )
59
+ const mockResolve = vi
60
+ . fn ( )
61
+ . mockReturnValue ( { found : false } as ResolvedResult )
62
+ const mockResolverFactory = vi
63
+ . fn ( )
64
+ . mockImplementation ( ( ) => ( { sync : mockResolve } ) )
65
+ vi . doMock ( 'unrs-resolver' , ( ) => ( {
66
+ ResolverFactory : mockResolverFactory ,
67
+ } ) )
53
68
54
69
mockModule . __setMockContext ( null )
55
-
70
+
56
71
resolve ( 'some-module' , '/test/file.ts' , { } )
57
-
72
+
58
73
expect ( useRuleContext ) . toHaveBeenCalled ( )
59
74
expect ( mockResolve ) . toHaveBeenCalled ( )
60
75
} )
61
76
62
77
it ( 'should fallback to process.cwd() when context.cwd is undefined' , ( ) => {
63
- const mockResolve = vi . fn ( ) . mockReturnValue ( { found : false } as ResolvedResult )
64
- const mockResolverFactory = vi . fn ( ) . mockImplementation ( ( ) => ( { sync : mockResolve } ) )
65
- vi . doMock ( 'unrs-resolver' , ( ) => ( { ResolverFactory : mockResolverFactory } ) )
78
+ const mockResolve = vi
79
+ . fn ( )
80
+ . mockReturnValue ( { found : false } as ResolvedResult )
81
+ const mockResolverFactory = vi
82
+ . fn ( )
83
+ . mockImplementation ( ( ) => ( { sync : mockResolve } ) )
84
+ vi . doMock ( 'unrs-resolver' , ( ) => ( {
85
+ ResolverFactory : mockResolverFactory ,
86
+ } ) )
66
87
67
88
mockModule . __setMockContext ( { } )
68
-
89
+
69
90
resolve ( 'some-module' , '/test/file.ts' , { } )
70
-
91
+
71
92
expect ( useRuleContext ) . toHaveBeenCalled ( )
72
93
expect ( mockResolve ) . toHaveBeenCalled ( )
73
94
} )
@@ -78,49 +99,49 @@ describe('Context-aware import resolution', () => {
78
99
const mockResolverFactory = vi . fn ( )
79
100
vi . doMock ( 'unrs-resolver' , ( ) => ( {
80
101
ResolverFactory : mockResolverFactory . mockImplementation ( ( ) => ( {
81
- sync : vi . fn ( ) . mockReturnValue ( { found : false } as ResolvedResult )
82
- } ) )
102
+ sync : vi . fn ( ) . mockReturnValue ( { found : false } as ResolvedResult ) ,
103
+ } ) ) ,
83
104
} ) )
84
105
85
106
mockModule . __setMockContext ( { cwd : testCwd1 } )
86
-
107
+
87
108
resolve ( 'some-module' , '/test/file.ts' , { } )
88
-
109
+
89
110
expect ( mockResolverFactory ) . toHaveBeenCalledTimes ( 1 )
90
111
} )
91
112
92
113
it ( 'should create separate cache entries for different cwd values' , ( ) => {
93
114
const mockResolverFactory = vi . fn ( )
94
115
vi . doMock ( 'unrs-resolver' , ( ) => ( {
95
116
ResolverFactory : mockResolverFactory . mockImplementation ( ( ) => ( {
96
- sync : vi . fn ( ) . mockReturnValue ( { found : false } as ResolvedResult )
97
- } ) )
117
+ sync : vi . fn ( ) . mockReturnValue ( { found : false } as ResolvedResult ) ,
118
+ } ) ) ,
98
119
} ) )
99
120
100
121
// First resolution with testCwd1
101
122
mockModule . __setMockContext ( { cwd : testCwd1 } )
102
123
resolve ( 'some-module' , '/test/file.ts' , { } )
103
-
124
+
104
125
// Second resolution with testCwd2 should create new resolver
105
126
mockModule . __setMockContext ( { cwd : testCwd2 } )
106
127
resolve ( 'some-module' , '/test/file.ts' , { } )
107
-
128
+
108
129
expect ( mockResolverFactory ) . toHaveBeenCalledTimes ( 2 )
109
130
} )
110
131
111
132
it ( 'should reuse cache for same cwd and options' , ( ) => {
112
133
const mockResolverFactory = vi . fn ( )
113
134
vi . doMock ( 'unrs-resolver' , ( ) => ( {
114
135
ResolverFactory : mockResolverFactory . mockImplementation ( ( ) => ( {
115
- sync : vi . fn ( ) . mockReturnValue ( { found : false } as ResolvedResult )
116
- } ) )
136
+ sync : vi . fn ( ) . mockReturnValue ( { found : false } as ResolvedResult ) ,
137
+ } ) ) ,
117
138
} ) )
118
139
119
140
mockModule . __setMockContext ( { cwd : testCwd1 } )
120
-
141
+
121
142
resolve ( 'some-module' , '/test/file1.ts' , { } )
122
143
resolve ( 'another-module' , '/test/file2.ts' , { } )
123
-
144
+
124
145
expect ( mockResolverFactory ) . toHaveBeenCalledTimes ( 1 )
125
146
} )
126
147
} )
@@ -129,75 +150,87 @@ describe('Context-aware import resolution', () => {
129
150
it ( 'should update cwd and recreate resolver when context changes' , ( ) => {
130
151
const mockResolverFactory = vi . fn ( )
131
152
const mockCloneWithOptions = vi . fn ( )
132
-
153
+
133
154
const mockResolver = {
134
155
sync : vi . fn ( ) . mockReturnValue ( { found : false } as ResolvedResult ) ,
135
- cloneWithOptions : mockCloneWithOptions
156
+ cloneWithOptions : mockCloneWithOptions ,
136
157
}
137
-
158
+
138
159
vi . doMock ( 'unrs-resolver' , ( ) => ( {
139
- ResolverFactory : mockResolverFactory . mockImplementation ( ( ) => mockResolver )
160
+ ResolverFactory : mockResolverFactory . mockImplementation (
161
+ ( ) => mockResolver ,
162
+ ) ,
140
163
} ) )
141
164
142
165
mockModule . __setMockContext ( null )
143
- const resolver = createTypeScriptImportResolver ( { project : [ './tsconfig.json' ] } )
144
-
166
+ const resolver = createTypeScriptImportResolver ( {
167
+ project : [ './tsconfig.json' ] ,
168
+ } )
169
+
145
170
resolver . resolve ( 'some-module' , '/test/file.ts' )
146
-
171
+
147
172
mockModule . __setMockContext ( { cwd : testCwd1 } )
148
173
resolver . resolve ( 'another-module' , '/test/file.ts' )
149
-
174
+
150
175
expect ( useRuleContext ) . toHaveBeenCalledTimes ( 2 )
151
176
expect ( mockCloneWithOptions ) . toHaveBeenCalled ( )
152
177
} )
153
178
154
179
it ( 'should create new resolver when no existing resolver and context changes' , ( ) => {
155
180
const mockResolverFactory = vi . fn ( )
156
-
181
+
157
182
const mockResolver = {
158
- sync : vi . fn ( ) . mockReturnValue ( { found : false } as ResolvedResult )
183
+ sync : vi . fn ( ) . mockReturnValue ( { found : false } as ResolvedResult ) ,
159
184
}
160
-
185
+
161
186
vi . doMock ( 'unrs-resolver' , ( ) => ( {
162
- ResolverFactory : mockResolverFactory . mockImplementation ( ( ) => mockResolver )
187
+ ResolverFactory : mockResolverFactory . mockImplementation (
188
+ ( ) => mockResolver ,
189
+ ) ,
163
190
} ) )
164
191
165
192
mockModule . __setMockContext ( null )
166
- const resolver = createTypeScriptImportResolver ( { project : [ './tsconfig.json' ] } )
167
-
193
+ const resolver = createTypeScriptImportResolver ( {
194
+ project : [ './tsconfig.json' ] ,
195
+ } )
196
+
168
197
mockModule . __setMockContext ( { cwd : testCwd1 } )
169
198
resolver . resolve ( 'some-module' , '/test/file.ts' )
170
-
199
+
171
200
expect ( mockResolverFactory ) . toHaveBeenCalled ( )
172
201
} )
173
202
174
203
it ( 'should not recreate resolver when cwd remains the same' , ( ) => {
175
204
const mockResolverFactory = vi . fn ( )
176
205
const mockCloneWithOptions = vi . fn ( )
177
-
206
+
178
207
const mockResolver = {
179
208
sync : vi . fn ( ) . mockReturnValue ( { found : false } as ResolvedResult ) ,
180
- cloneWithOptions : mockCloneWithOptions
209
+ cloneWithOptions : mockCloneWithOptions ,
181
210
}
182
-
211
+
183
212
vi . doMock ( 'unrs-resolver' , ( ) => ( {
184
- ResolverFactory : mockResolverFactory . mockImplementation ( ( ) => mockResolver )
213
+ ResolverFactory : mockResolverFactory . mockImplementation (
214
+ ( ) => mockResolver ,
215
+ ) ,
185
216
} ) )
186
217
187
218
mockModule . __setMockContext ( { cwd : testCwd1 } )
188
- const resolver = createTypeScriptImportResolver ( { project : [ './tsconfig.json' ] } )
189
-
219
+ const resolver = createTypeScriptImportResolver ( {
220
+ project : [ './tsconfig.json' ] ,
221
+ } )
222
+
190
223
resolver . resolve ( 'some-module' , '/test/file1.ts' )
191
224
resolver . resolve ( 'another-module' , '/test/file2.ts' )
192
-
225
+
193
226
expect ( useRuleContext ) . toHaveBeenCalledTimes ( 2 )
194
227
expect ( mockCloneWithOptions ) . not . toHaveBeenCalled ( )
195
228
} )
196
229
197
230
it ( 'should handle interfaceVersion and name properties correctly' , ( ) => {
198
231
mockModule . __setMockContext ( null )
199
232
const resolver = createTypeScriptImportResolver ( )
200
-
233
+
201
234
expect ( resolver . interfaceVersion ) . toBe ( 3 )
202
235
expect ( resolver . name ) . toBe ( 'eslint-import-resolver-typescript' )
203
236
} )
@@ -206,18 +239,18 @@ describe('Context-aware import resolution', () => {
206
239
describe ( 'Function signature compatibility' , ( ) => {
207
240
it ( 'should handle optional parameters correctly in resolve function' , ( ) => {
208
241
mockModule . __setMockContext ( { cwd : testCwd1 } )
209
-
242
+
210
243
expect ( ( ) => resolve ( 'module' , '/file.ts' , { } , null ) ) . not . toThrow ( )
211
244
expect ( ( ) => resolve ( 'module' , '/file.ts' ) ) . not . toThrow ( )
212
245
expect ( ( ) => resolve ( 'module' , '/file.ts' , undefined ) ) . not . toThrow ( )
213
246
} )
214
247
215
248
it ( 'should handle optional parameters correctly in createTypeScriptImportResolver' , ( ) => {
216
249
mockModule . __setMockContext ( null )
217
-
250
+
218
251
expect ( ( ) => createTypeScriptImportResolver ( { } ) ) . not . toThrow ( )
219
252
expect ( ( ) => createTypeScriptImportResolver ( ) ) . not . toThrow ( )
220
253
expect ( ( ) => createTypeScriptImportResolver ( null ) ) . not . toThrow ( )
221
254
} )
222
255
} )
223
- } )
256
+ } )
0 commit comments