11import * as fse from 'fs-extra' ;
22import temp from 'temp' ;
33
4- import { FileUri , sleep } from '@opensumi/ide-core-node' ;
4+ import { Disposable , FileUri , sleep } from '@opensumi/ide-core-node' ;
55import { createNodeInjector } from '@opensumi/ide-dev-tool/src/mock-injector' ;
66
77import { DidFilesChangedParams , FileChangeType } from '../../src/common/index' ;
8+ import { FileChangeCollectionManager , FileChangeCollectionManagerOptions } from '../../src/node/file-change-collection' ;
89import { UnRecursiveFileSystemWatcher } from '../../src/node/un-recursive/file-service-watcher' ;
910
1011const sleepTime = 1000 ;
@@ -14,18 +15,29 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
1415 async function generateWatcher ( ) {
1516 const injector = createNodeInjector ( [ ] ) ;
1617 const root = FileUri . create ( fse . realpathSync ( await temp . mkdir ( 'unRecursive-test' ) ) ) ;
18+ injector . addProviders ( {
19+ token : FileChangeCollectionManagerOptions ,
20+ useValue : { debounceTimeout : 0 } ,
21+ } ) ;
22+ const fileChangeCollectionManager = injector . get ( FileChangeCollectionManager ) ;
1723 const watcherServer = injector . get ( UnRecursiveFileSystemWatcher ) ;
1824 fse . mkdirpSync ( FileUri . fsPath ( root . resolve ( 'for_rename_folder' ) ) ) ;
1925 fse . writeFileSync ( FileUri . fsPath ( root . resolve ( 'for_rename' ) ) , 'rename' ) ;
20- await watcherServer . watchFileChanges ( root . toString ( ) ) ;
21- return { root, watcherServer } ;
26+ const watcherId = await watcherServer . watchFileChanges ( root . toString ( ) ) ;
27+
28+ const setClient = ( client : { onDidFilesChanged : ( event : DidFilesChangedParams ) => void } ) =>
29+ watcherServer . addDispose ( fileChangeCollectionManager . setClientForTest ( watcherId , client ) ) ;
30+ watcherServer . addDispose (
31+ Disposable . create ( ( ) => {
32+ // eslint-disable-next-line no-console
33+ console . log ( 'dispose watcher id' , watcherId ) ;
34+ watcherServer . unwatchFileChanges ( watcherId ) ;
35+ } ) ,
36+ ) ;
37+ return { root, watcherServer, setClient } ;
2238 }
23- const watcherServerList : UnRecursiveFileSystemWatcher [ ] = [ ] ;
24- afterAll ( async ( ) => {
39+ afterAll ( ( ) => {
2540 track . cleanupSync ( ) ;
26- watcherServerList . forEach ( ( watcherServer ) => {
27- watcherServer . dispose ( ) ;
28- } ) ;
2941 } ) ;
3042 it ( 'Rename the files under the folder' , async ( ) => {
3143 const addUris = new Set < string > ( ) ;
@@ -43,8 +55,8 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
4355 } ) ;
4456 } ,
4557 } ;
46- const { root, watcherServer } = await generateWatcher ( ) ;
47- watcherServer . setClient ( watcherClient ) ;
58+ const { root, watcherServer, setClient } = await generateWatcher ( ) ;
59+ setClient ( watcherClient ) ;
4860
4961 const expectedAddUris = [ root . resolve ( 'for_rename_renamed' ) . toString ( ) ] ;
5062
@@ -54,7 +66,7 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
5466 await sleep ( sleepTime ) ;
5567 expect ( [ ...addUris ] ) . toEqual ( expectedAddUris ) ;
5668 expect ( [ ...deleteUris ] ) . toEqual ( expectedDeleteUris ) ;
57- watcherServerList . push ( watcherServer ) ;
69+ watcherServer . dispose ( ) ;
5870 } ) ;
5971 it ( 'Add the files under the folder' , async ( ) => {
6072 const addUris = new Set < string > ( ) ;
@@ -72,8 +84,8 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
7284 } ) ;
7385 } ,
7486 } ;
75- const { root, watcherServer } = await generateWatcher ( ) ;
76- watcherServer . setClient ( watcherClient ) ;
87+ const { root, watcherServer, setClient } = await generateWatcher ( ) ;
88+ setClient ( watcherClient ) ;
7789
7890 const expectedAddUris = [ root . resolve ( 'README.md' ) . toString ( ) ] ;
7991
@@ -84,7 +96,7 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
8496
8597 expect ( Array . from ( addUris ) ) . toEqual ( expectedAddUris ) ;
8698 expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
87- watcherServerList . push ( watcherServer ) ;
99+ watcherServer . dispose ( ) ;
88100 } ) ;
89101 it ( 'Update the files under the folder' , async ( ) => {
90102 const updatedUris = new Set < string > ( ) ;
@@ -101,15 +113,15 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
101113 } ) ;
102114 } ,
103115 } ;
104- const { root, watcherServer } = await generateWatcher ( ) ;
105- watcherServer . setClient ( watcherClient ) ;
116+ const { root, watcherServer, setClient } = await generateWatcher ( ) ;
117+ setClient ( watcherClient ) ;
106118 const expectedDeleteUris = [ ] ;
107119 const expectedUpdatedUris = [ root . resolve ( 'for_rename' ) . toString ( ) ] ;
108120 fse . writeFileSync ( root . resolve ( 'for_rename' ) . codeUri . fsPath . toString ( ) , '' ) ;
109121 await sleep ( sleepTime ) ;
110122 expect ( Array . from ( updatedUris ) ) . toEqual ( expectedUpdatedUris ) ;
111123 expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
112- watcherServerList . push ( watcherServer ) ;
124+ watcherServer . dispose ( ) ;
113125 } ) ;
114126 it ( 'Delete the files under the folder' , async ( ) => {
115127 const addUris = new Set < string > ( ) ;
@@ -127,16 +139,17 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
127139 } ) ;
128140 } ,
129141 } ;
130- const { root, watcherServer } = await generateWatcher ( ) ;
131- watcherServer . setClient ( watcherClient ) ;
142+ const { root, watcherServer, setClient } = await generateWatcher ( ) ;
143+ setClient ( watcherClient ) ;
144+
132145 const expectedDeleteUris = [ root . resolve ( 'for_rename' ) . toString ( ) ] ;
133146 const expectedAddUris = [ ] ;
134147 await fse . unlink ( root . resolve ( 'for_rename' ) . codeUri . fsPath . toString ( ) ) ;
135148 await sleep ( sleepTime ) ;
136149
137150 expect ( Array . from ( addUris ) ) . toEqual ( expectedAddUris ) ;
138151 expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
139- watcherServerList . push ( watcherServer ) ;
152+ watcherServer . dispose ( ) ;
140153 } ) ;
141154 it ( 'Rename the watched folder' , async ( ) => {
142155 const addUris = new Set < string > ( ) ;
@@ -154,8 +167,8 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
154167 } ) ;
155168 } ,
156169 } ;
157- const { root, watcherServer } = await generateWatcher ( ) ;
158- watcherServer . setClient ( watcherClient ) ;
170+ const { root, watcherServer, setClient } = await generateWatcher ( ) ;
171+ setClient ( watcherClient ) ;
159172
160173 const expectedAddUris = [ ] ;
161174 const expectedDeleteUris = [ ] ;
@@ -168,7 +181,7 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
168181
169182 expect ( [ ...addUris ] ) . toEqual ( expectedAddUris ) ;
170183 expect ( [ ...deleteUris ] ) . toEqual ( expectedDeleteUris ) ;
171- watcherServerList . push ( watcherServer ) ;
184+ watcherServer . dispose ( ) ;
172185 } ) ;
173186 it ( 'Add the watched folder' , async ( ) => {
174187 const addUris = new Set < string > ( ) ;
@@ -185,8 +198,8 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
185198 } ) ;
186199 } ,
187200 } ;
188- const { root, watcherServer } = await generateWatcher ( ) ;
189- watcherServer . setClient ( watcherClient ) ;
201+ const { root, watcherServer, setClient } = await generateWatcher ( ) ;
202+ setClient ( watcherClient ) ;
190203
191204 const expectedAddUris = [ ] ;
192205
@@ -197,7 +210,7 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
197210
198211 expect ( Array . from ( addUris ) ) . toEqual ( expectedAddUris ) ;
199212 expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
200- watcherServerList . push ( watcherServer ) ;
213+ watcherServer . dispose ( ) ;
201214 } ) ;
202215
203216 it ( 'Delete the watched folder' , async ( ) => {
@@ -216,16 +229,17 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
216229 } ) ;
217230 } ,
218231 } ;
219- const { root, watcherServer } = await generateWatcher ( ) ;
220- watcherServer . setClient ( watcherClient ) ;
232+ const { root, watcherServer, setClient } = await generateWatcher ( ) ;
233+ setClient ( watcherClient ) ;
234+
221235 const expectedDeleteUris = [ ] ;
222236 const expectedAddUris = [ ] ;
223237 await fse . remove ( root . resolve ( 'for_rename_folder' ) . codeUri . fsPath . toString ( ) ) ;
224238 await sleep ( sleepTime ) ;
225239
226240 expect ( Array . from ( addUris ) ) . toEqual ( expectedAddUris ) ;
227241 expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
228- watcherServerList . push ( watcherServer ) ;
242+ watcherServer . dispose ( ) ;
229243 } ) ;
230244} ) ;
231245
@@ -234,17 +248,30 @@ describe('Delete and update monitored files', () => {
234248 async function generateWatcher ( ) {
235249 const injector = createNodeInjector ( [ ] ) ;
236250 const root = FileUri . create ( fse . realpathSync ( await temp . mkdir ( 'unRecursive-test' ) ) ) ;
251+
252+ injector . addProviders ( {
253+ token : FileChangeCollectionManagerOptions ,
254+ useValue : { debounceTimeout : 0 } ,
255+ } ) ;
256+ const fileChangeCollectionManager = injector . get ( FileChangeCollectionManager ) ;
257+
237258 const watcherServer = injector . get ( UnRecursiveFileSystemWatcher ) ;
238259 fse . writeFileSync ( FileUri . fsPath ( root . resolve ( 'for_rename' ) ) , 'rename' ) ;
239- await watcherServer . watchFileChanges ( root . toString ( ) + '/for_rename' ) ;
240- return { root, watcherServer } ;
260+ const watcherId = await watcherServer . watchFileChanges ( root . toString ( ) + '/for_rename' ) ;
261+ const setClient = ( client : { onDidFilesChanged : ( event : DidFilesChangedParams ) => void } ) =>
262+ watcherServer . addDispose ( fileChangeCollectionManager . setClientForTest ( watcherId , client ) ) ;
263+ watcherServer . addDispose (
264+ Disposable . create ( ( ) => {
265+ // eslint-disable-next-line no-console
266+ console . log ( 'dispose watcher id' , watcherId ) ;
267+ watcherServer . unwatchFileChanges ( watcherId ) ;
268+ } ) ,
269+ ) ;
270+ return { root, watcherServer, setClient } ;
241271 }
242- const watcherServerList : UnRecursiveFileSystemWatcher [ ] = [ ] ;
243- afterAll ( async ( ) => {
272+
273+ afterAll ( ( ) => {
244274 track . cleanupSync ( ) ;
245- watcherServerList . forEach ( ( watcherServer ) => {
246- watcherServer . dispose ( ) ;
247- } ) ;
248275 } ) ;
249276
250277 it ( 'Delete watched files' , async ( ) => {
@@ -263,8 +290,8 @@ describe('Delete and update monitored files', () => {
263290 } ) ;
264291 } ,
265292 } ;
266- const { root, watcherServer } = await generateWatcher ( ) ;
267- watcherServer . setClient ( watcherClient ) ;
293+ const { root, watcherServer, setClient } = await generateWatcher ( ) ;
294+ setClient ( watcherClient ) ;
268295
269296 const expectedDeleteUris = [ root . resolve ( 'for_rename' ) . toString ( ) ] ;
270297
@@ -273,7 +300,7 @@ describe('Delete and update monitored files', () => {
273300 await sleep ( sleepTime ) ;
274301 expect ( Array . from ( addUris ) ) . toEqual ( expectedAddUris ) ;
275302 expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
276- watcherServerList . push ( watcherServer ) ;
303+ watcherServer . dispose ( ) ;
277304 } ) ;
278305
279306 it ( 'Update watched files' , async ( ) => {
@@ -292,14 +319,14 @@ describe('Delete and update monitored files', () => {
292319 } ) ;
293320 } ,
294321 } ;
295- const { root, watcherServer } = await generateWatcher ( ) ;
296- watcherServer . setClient ( watcherClient ) ;
322+ const { root, watcherServer, setClient } = await generateWatcher ( ) ;
323+ setClient ( watcherClient ) ;
297324 const expectedDeleteUris = [ ] ;
298325 const expectedUpdatedUris = [ root . resolve ( 'for_rename' ) . toString ( ) ] ;
299326 await fse . writeFile ( root . resolve ( 'for_rename' ) . codeUri . fsPath . toString ( ) , 'for' ) ;
300327 await sleep ( sleepTime ) ;
301328 expect ( Array . from ( updatedUris ) ) . toEqual ( expectedUpdatedUris ) ;
302329 expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
303- watcherServerList . push ( watcherServer ) ;
330+ watcherServer . dispose ( ) ;
304331 } ) ;
305332} ) ;
0 commit comments