11import * as fse from 'fs-extra' ;
22import temp from 'temp' ;
33
4- import { FileUri , sleep } from '@opensumi/ide-core-node' ;
4+ import { Disposable , FileUri , URI , 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 ;
1112
13+ async function generateWatcher ( track : typeof temp , watchPathCb : ( root : URI ) => string ) {
14+ const injector = createNodeInjector ( [ ] ) ;
15+ const root = FileUri . create ( await fse . realpath ( await track . mkdir ( 'unRecursive-test' ) ) ) ;
16+ injector . addProviders ( {
17+ token : FileChangeCollectionManagerOptions ,
18+ useValue : { debounceTimeout : 0 } ,
19+ } ) ;
20+ const fileChangeCollectionManager = injector . get ( FileChangeCollectionManager ) ;
21+ const watcherServer = injector . get ( UnRecursiveFileSystemWatcher ) ;
22+ fse . mkdirpSync ( FileUri . fsPath ( root . resolve ( 'for_rename_folder' ) ) ) ;
23+ fse . writeFileSync ( FileUri . fsPath ( root . resolve ( 'for_rename' ) ) , 'rename' ) ;
24+ const watcherId = await watcherServer . watchFileChanges ( watchPathCb ( root ) ) ;
25+
26+ const setClient = ( client : { onDidFilesChanged : ( event : DidFilesChangedParams ) => void } ) =>
27+ watcherServer . addDispose ( fileChangeCollectionManager . setClientForTest ( watcherId , client ) ) ;
28+ watcherServer . addDispose (
29+ Disposable . create ( ( ) => {
30+ // eslint-disable-next-line no-console
31+ console . log ( 'dispose watcher id' , watcherId ) ;
32+ watcherServer . unwatchFileChanges ( watcherId ) ;
33+ } ) ,
34+ ) ;
35+ return { root, watcherServer, setClient } ;
36+ }
37+
1238describe ( 'unRecursively watch for folder additions, deletions, rename,and updates' , ( ) => {
1339 const track = temp . track ( ) ;
14- async function generateWatcher ( ) {
15- const injector = createNodeInjector ( [ ] ) ;
16- const root = FileUri . create ( fse . realpathSync ( await temp . mkdir ( 'unRecursive-test' ) ) ) ;
17- const watcherServer = injector . get ( UnRecursiveFileSystemWatcher ) ;
18- fse . mkdirpSync ( FileUri . fsPath ( root . resolve ( 'for_rename_folder' ) ) ) ;
19- fse . writeFileSync ( FileUri . fsPath ( root . resolve ( 'for_rename' ) ) , 'rename' ) ;
20- await watcherServer . watchFileChanges ( root . toString ( ) ) ;
21- return { root, watcherServer } ;
22- }
23- const watcherServerList : UnRecursiveFileSystemWatcher [ ] = [ ] ;
24- afterAll ( async ( ) => {
40+ const rootPathCb = ( root : URI ) => root . toString ( ) ;
41+
42+ afterAll ( ( ) => {
2543 track . cleanupSync ( ) ;
26- watcherServerList . forEach ( ( watcherServer ) => {
27- watcherServer . dispose ( ) ;
28- } ) ;
2944 } ) ;
3045 it ( 'Rename the files under the folder' , async ( ) => {
3146 const addUris = new Set < string > ( ) ;
@@ -43,8 +58,8 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
4358 } ) ;
4459 } ,
4560 } ;
46- const { root, watcherServer } = await generateWatcher ( ) ;
47- watcherServer . setClient ( watcherClient ) ;
61+ const { root, watcherServer, setClient } = await generateWatcher ( track , rootPathCb ) ;
62+ setClient ( watcherClient ) ;
4863
4964 const expectedAddUris = [ root . resolve ( 'for_rename_renamed' ) . toString ( ) ] ;
5065
@@ -54,7 +69,7 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
5469 await sleep ( sleepTime ) ;
5570 expect ( [ ...addUris ] ) . toEqual ( expectedAddUris ) ;
5671 expect ( [ ...deleteUris ] ) . toEqual ( expectedDeleteUris ) ;
57- watcherServerList . push ( watcherServer ) ;
72+ watcherServer . dispose ( ) ;
5873 } ) ;
5974 it ( 'Add the files under the folder' , async ( ) => {
6075 const addUris = new Set < string > ( ) ;
@@ -72,8 +87,8 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
7287 } ) ;
7388 } ,
7489 } ;
75- const { root, watcherServer } = await generateWatcher ( ) ;
76- watcherServer . setClient ( watcherClient ) ;
90+ const { root, watcherServer, setClient } = await generateWatcher ( track , rootPathCb ) ;
91+ setClient ( watcherClient ) ;
7792
7893 const expectedAddUris = [ root . resolve ( 'README.md' ) . toString ( ) ] ;
7994
@@ -84,7 +99,7 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
8499
85100 expect ( Array . from ( addUris ) ) . toEqual ( expectedAddUris ) ;
86101 expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
87- watcherServerList . push ( watcherServer ) ;
102+ watcherServer . dispose ( ) ;
88103 } ) ;
89104 it ( 'Update the files under the folder' , async ( ) => {
90105 const updatedUris = new Set < string > ( ) ;
@@ -101,15 +116,15 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
101116 } ) ;
102117 } ,
103118 } ;
104- const { root, watcherServer } = await generateWatcher ( ) ;
105- watcherServer . setClient ( watcherClient ) ;
119+ const { root, watcherServer, setClient } = await generateWatcher ( track , rootPathCb ) ;
120+ setClient ( watcherClient ) ;
106121 const expectedDeleteUris = [ ] ;
107122 const expectedUpdatedUris = [ root . resolve ( 'for_rename' ) . toString ( ) ] ;
108123 fse . writeFileSync ( root . resolve ( 'for_rename' ) . codeUri . fsPath . toString ( ) , '' ) ;
109124 await sleep ( sleepTime ) ;
110125 expect ( Array . from ( updatedUris ) ) . toEqual ( expectedUpdatedUris ) ;
111126 expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
112- watcherServerList . push ( watcherServer ) ;
127+ watcherServer . dispose ( ) ;
113128 } ) ;
114129 it ( 'Delete the files under the folder' , async ( ) => {
115130 const addUris = new Set < string > ( ) ;
@@ -127,16 +142,17 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
127142 } ) ;
128143 } ,
129144 } ;
130- const { root, watcherServer } = await generateWatcher ( ) ;
131- watcherServer . setClient ( watcherClient ) ;
145+ const { root, watcherServer, setClient } = await generateWatcher ( track , rootPathCb ) ;
146+ setClient ( watcherClient ) ;
147+
132148 const expectedDeleteUris = [ root . resolve ( 'for_rename' ) . toString ( ) ] ;
133149 const expectedAddUris = [ ] ;
134150 await fse . unlink ( root . resolve ( 'for_rename' ) . codeUri . fsPath . toString ( ) ) ;
135151 await sleep ( sleepTime ) ;
136152
137153 expect ( Array . from ( addUris ) ) . toEqual ( expectedAddUris ) ;
138154 expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
139- watcherServerList . push ( watcherServer ) ;
155+ watcherServer . dispose ( ) ;
140156 } ) ;
141157 it ( 'Rename the watched folder' , async ( ) => {
142158 const addUris = new Set < string > ( ) ;
@@ -154,8 +170,8 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
154170 } ) ;
155171 } ,
156172 } ;
157- const { root, watcherServer } = await generateWatcher ( ) ;
158- watcherServer . setClient ( watcherClient ) ;
173+ const { root, watcherServer, setClient } = await generateWatcher ( track , rootPathCb ) ;
174+ setClient ( watcherClient ) ;
159175
160176 const expectedAddUris = [ ] ;
161177 const expectedDeleteUris = [ ] ;
@@ -168,7 +184,7 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
168184
169185 expect ( [ ...addUris ] ) . toEqual ( expectedAddUris ) ;
170186 expect ( [ ...deleteUris ] ) . toEqual ( expectedDeleteUris ) ;
171- watcherServerList . push ( watcherServer ) ;
187+ watcherServer . dispose ( ) ;
172188 } ) ;
173189 it ( 'Add the watched folder' , async ( ) => {
174190 const addUris = new Set < string > ( ) ;
@@ -185,8 +201,8 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
185201 } ) ;
186202 } ,
187203 } ;
188- const { root, watcherServer } = await generateWatcher ( ) ;
189- watcherServer . setClient ( watcherClient ) ;
204+ const { root, watcherServer, setClient } = await generateWatcher ( track , rootPathCb ) ;
205+ setClient ( watcherClient ) ;
190206
191207 const expectedAddUris = [ ] ;
192208
@@ -197,7 +213,7 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
197213
198214 expect ( Array . from ( addUris ) ) . toEqual ( expectedAddUris ) ;
199215 expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
200- watcherServerList . push ( watcherServer ) ;
216+ watcherServer . dispose ( ) ;
201217 } ) ;
202218
203219 it ( 'Delete the watched folder' , async ( ) => {
@@ -216,35 +232,26 @@ describe('unRecursively watch for folder additions, deletions, rename,and update
216232 } ) ;
217233 } ,
218234 } ;
219- const { root, watcherServer } = await generateWatcher ( ) ;
220- watcherServer . setClient ( watcherClient ) ;
235+ const { root, watcherServer, setClient } = await generateWatcher ( track , rootPathCb ) ;
236+ setClient ( watcherClient ) ;
237+
221238 const expectedDeleteUris = [ ] ;
222239 const expectedAddUris = [ ] ;
223240 await fse . remove ( root . resolve ( 'for_rename_folder' ) . codeUri . fsPath . toString ( ) ) ;
224241 await sleep ( sleepTime ) ;
225242
226243 expect ( Array . from ( addUris ) ) . toEqual ( expectedAddUris ) ;
227244 expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
228- watcherServerList . push ( watcherServer ) ;
245+ watcherServer . dispose ( ) ;
229246 } ) ;
230247} ) ;
231248
232249describe ( 'Delete and update monitored files' , ( ) => {
233250 const track = temp . track ( ) ;
234- async function generateWatcher ( ) {
235- const injector = createNodeInjector ( [ ] ) ;
236- const root = FileUri . create ( fse . realpathSync ( await temp . mkdir ( 'unRecursive-test' ) ) ) ;
237- const watcherServer = injector . get ( UnRecursiveFileSystemWatcher ) ;
238- fse . writeFileSync ( FileUri . fsPath ( root . resolve ( 'for_rename' ) ) , 'rename' ) ;
239- await watcherServer . watchFileChanges ( root . toString ( ) + '/for_rename' ) ;
240- return { root, watcherServer } ;
241- }
242- const watcherServerList : UnRecursiveFileSystemWatcher [ ] = [ ] ;
243- afterAll ( async ( ) => {
251+ const rootPathCb = ( root : URI ) => root . toString ( ) + '/for_rename' ;
252+
253+ afterAll ( ( ) => {
244254 track . cleanupSync ( ) ;
245- watcherServerList . forEach ( ( watcherServer ) => {
246- watcherServer . dispose ( ) ;
247- } ) ;
248255 } ) ;
249256
250257 it ( 'Delete watched files' , async ( ) => {
@@ -263,8 +270,8 @@ describe('Delete and update monitored files', () => {
263270 } ) ;
264271 } ,
265272 } ;
266- const { root, watcherServer } = await generateWatcher ( ) ;
267- watcherServer . setClient ( watcherClient ) ;
273+ const { root, watcherServer, setClient } = await generateWatcher ( track , rootPathCb ) ;
274+ setClient ( watcherClient ) ;
268275
269276 const expectedDeleteUris = [ root . resolve ( 'for_rename' ) . toString ( ) ] ;
270277
@@ -273,7 +280,7 @@ describe('Delete and update monitored files', () => {
273280 await sleep ( sleepTime ) ;
274281 expect ( Array . from ( addUris ) ) . toEqual ( expectedAddUris ) ;
275282 expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
276- watcherServerList . push ( watcherServer ) ;
283+ watcherServer . dispose ( ) ;
277284 } ) ;
278285
279286 it ( 'Update watched files' , async ( ) => {
@@ -292,14 +299,14 @@ describe('Delete and update monitored files', () => {
292299 } ) ;
293300 } ,
294301 } ;
295- const { root, watcherServer } = await generateWatcher ( ) ;
296- watcherServer . setClient ( watcherClient ) ;
302+ const { root, watcherServer, setClient } = await generateWatcher ( track , rootPathCb ) ;
303+ setClient ( watcherClient ) ;
297304 const expectedDeleteUris = [ ] ;
298305 const expectedUpdatedUris = [ root . resolve ( 'for_rename' ) . toString ( ) ] ;
299306 await fse . writeFile ( root . resolve ( 'for_rename' ) . codeUri . fsPath . toString ( ) , 'for' ) ;
300307 await sleep ( sleepTime ) ;
301308 expect ( Array . from ( updatedUris ) ) . toEqual ( expectedUpdatedUris ) ;
302309 expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
303- watcherServerList . push ( watcherServer ) ;
310+ watcherServer . dispose ( ) ;
304311 } ) ;
305312} ) ;
0 commit comments