@@ -12,31 +12,29 @@ import { FileSystemWatcherServer } from '../../src/node/file-service-watcher';
1212function sleep ( time : number ) {
1313 return new Promise ( ( resolve ) => setTimeout ( resolve , time ) ) ;
1414}
15-
16- jest . setTimeout ( 10000 ) ;
17-
18- let seed = 1 ;
15+ const sleepTime = 1000 ;
1916
2017( isMacintosh ? describe . skip : describe ) ( 'ParceWatcher Test' , ( ) => {
2118 const track = temp . track ( ) ;
22- const sleepTime = 1000 ;
23- let injector : MockInjector ;
24- let root : URI ;
25- let watcherServer : FileSystemWatcherServer ;
26- let watcherId : number ;
27-
28- beforeEach ( async ( ) => {
29- injector = createNodeInjector ( [ ] ) ;
30- root = FileUri . create ( fse . realpathSync ( await temp . mkdir ( 'parce-watcher-test' ) ) ) ;
19+ const watcherServerList : FileSystemWatcherServer [ ] = [ ] ;
20+ let seed = 1 ;
21+
22+ async function generateWatcher ( ) {
23+ const injector = createNodeInjector ( [ ] ) ;
24+ const root = FileUri . create ( fse . realpathSync ( await temp . mkdir ( `parce-watcher-test-${ seed ++ } ` ) ) ) ;
3125 // @ts -ignore
3226 injector . mock ( FileSystemWatcherServer , 'isEnableNSFW' , ( ) => false ) ;
33- watcherServer = injector . get ( FileSystemWatcherServer ) ;
34- watcherId = await watcherServer . watchFileChanges ( root . toString ( ) ) ;
35- } ) ;
27+ const watcherServer = injector . get ( FileSystemWatcherServer ) ;
28+ const watcherId = await watcherServer . watchFileChanges ( root . toString ( ) ) ;
29+
30+ return { root, watcherServer, watcherId } ;
31+ }
3632
37- afterEach ( async ( ) => {
33+ afterAll ( async ( ) => {
3834 track . cleanupSync ( ) ;
39- watcherServer . dispose ( ) ;
35+ watcherServerList . forEach ( ( watcherServer ) => {
36+ watcherServer . dispose ( ) ;
37+ } ) ;
4038 } ) ;
4139
4240 it ( 'Should receive file changes events from in the workspace by default.' , async ( ) => {
@@ -47,6 +45,8 @@ let seed = 1;
4745 event . changes . forEach ( ( c ) => actualUris . add ( c . uri . toString ( ) ) ) ;
4846 } ,
4947 } ;
48+
49+ const { root, watcherServer } = await generateWatcher ( ) ;
5050 watcherServer . setClient ( watcherClient ) ;
5151
5252 const expectedUris = [
@@ -55,10 +55,10 @@ let seed = 1;
5555 root . withPath ( root . path . join ( 'foo' , 'bar' , 'baz.txt' ) ) . toString ( ) ,
5656 ] ;
5757
58- await fse . mkdir ( FileUri . fsPath ( root . resolve ( 'foo' ) ) ) ;
58+ await fse . mkdir ( FileUri . fsPath ( root . resolve ( 'foo' ) ) , { recursive : true } ) ;
5959 expect ( fse . statSync ( FileUri . fsPath ( root . resolve ( 'foo' ) ) ) . isDirectory ( ) ) . toBe ( true ) ;
6060
61- await fse . mkdir ( FileUri . fsPath ( root . resolve ( 'foo' ) . resolve ( 'bar' ) ) ) ;
61+ await fse . mkdir ( FileUri . fsPath ( root . resolve ( 'foo' ) . resolve ( 'bar' ) ) , { recursive : true } ) ;
6262 expect ( fse . statSync ( FileUri . fsPath ( root . resolve ( 'foo' ) . resolve ( 'bar' ) ) ) . isDirectory ( ) ) . toBe ( true ) ;
6363
6464 await fse . writeFile ( FileUri . fsPath ( root . resolve ( 'foo' ) . resolve ( 'bar' ) . resolve ( 'baz.txt' ) ) , 'baz' ) ;
@@ -67,6 +67,8 @@ let seed = 1;
6767 ) ;
6868 await sleep ( sleepTime ) ;
6969 expect ( expectedUris ) . toEqual ( Array . from ( actualUris ) ) ;
70+
71+ watcherServerList . push ( watcherServer ) ;
7072 } ) ;
7173
7274 it ( 'Should not receive file changes events from in the workspace by default if unwatched' , async ( ) => {
@@ -77,16 +79,17 @@ let seed = 1;
7779 event . changes . forEach ( ( c ) => actualUris . add ( c . uri . toString ( ) ) ) ;
7880 } ,
7981 } ;
82+ const { root, watcherServer, watcherId } = await generateWatcher ( ) ;
8083 watcherServer . setClient ( watcherClient ) ;
8184
8285 /* Unwatch root */
8386 await watcherServer . unwatchFileChanges ( watcherId ) ;
8487
85- fse . mkdirSync ( FileUri . fsPath ( root . resolve ( 'foo' ) ) ) ;
88+ fse . mkdirSync ( FileUri . fsPath ( root . resolve ( 'foo' ) ) , { recursive : true } ) ;
8689 expect ( fse . statSync ( FileUri . fsPath ( root . resolve ( 'foo' ) ) ) . isDirectory ( ) ) . toBe ( true ) ;
8790 await sleep ( sleepTime ) ;
8891
89- fse . mkdirSync ( FileUri . fsPath ( root . resolve ( 'foo' ) . resolve ( 'bar' ) ) ) ;
92+ fse . mkdirSync ( FileUri . fsPath ( root . resolve ( 'foo' ) . resolve ( 'bar' ) ) , { recursive : true } ) ;
9093 expect ( fse . statSync ( FileUri . fsPath ( root . resolve ( 'foo' ) . resolve ( 'bar' ) ) ) . isDirectory ( ) ) . toBe ( true ) ;
9194 await sleep ( sleepTime ) ;
9295
@@ -95,79 +98,91 @@ let seed = 1;
9598 'baz' ,
9699 ) ;
97100 await sleep ( sleepTime ) ;
98-
99101 expect ( actualUris . size ) . toEqual ( 0 ) ;
102+
103+ watcherServerList . push ( watcherServer ) ;
100104 } ) ;
101105
102106 it ( 'Merge common events on one watcher' , async ( ) => {
103- const folderName = `folder_${ seed ++ } ` ;
107+ const { root, watcherServer, watcherId } = await generateWatcher ( ) ;
108+ const folderName = `folder_${ seed } ` ;
104109 const newFolder = FileUri . fsPath ( root . resolve ( folderName ) ) ;
105110 expect ( watcherId ) . toBeDefined ( ) ;
106- fse . mkdirSync ( newFolder ) ;
111+ fse . mkdirSync ( newFolder , { recursive : true } ) ;
107112 const newWatcherId = await watcherServer . watchFileChanges ( newFolder ) ;
108113 expect ( newWatcherId === watcherId ) . toBeTruthy ( ) ;
114+ watcherServerList . push ( watcherServer ) ;
109115 } ) ;
110116
111117 it ( 'Can receive events while watch file is not existed' , async ( ) => {
112- const folderName = `folder_${ seed ++ } ` ;
118+ const { root, watcherServer, watcherId } = await generateWatcher ( ) ;
119+
120+ const folderName = `folder_${ seed } ` ;
113121 const newFolder = FileUri . fsPath ( root . resolve ( folderName ) ) ;
114122 expect ( watcherId ) . toBeDefined ( ) ;
115- fse . mkdirSync ( newFolder ) ;
123+ fse . mkdirSync ( newFolder , { recursive : true } ) ;
116124 const parentId = await watcherServer . watchFileChanges ( newFolder ) ;
117125 const childFile = FileUri . fsPath ( root . resolve ( folderName ) . resolve ( 'index.js' ) ) ;
118126 const childId = await watcherServer . watchFileChanges ( childFile ) ;
119127 expect ( parentId === childId ) . toBeTruthy ( ) ;
128+ watcherServerList . push ( watcherServer ) ;
120129 } ) ;
121130
122131 it ( 'Excludes options should be worked' , async ( ) => {
123132 const watcherClient = {
124133 onDidFilesChanged : jest . fn ( ) ,
125134 } ;
135+ const { root, watcherServer } = await generateWatcher ( ) ;
126136 watcherServer . setClient ( watcherClient ) ;
127- const folderName = `folder_${ seed ++ } ` ;
137+
138+ const folderName = `folder_${ seed } ` ;
128139 const newFolder = FileUri . fsPath ( root . resolve ( folderName ) ) ;
129140 const fileA = FileUri . fsPath ( root . resolve ( folderName ) . resolve ( 'a' ) ) ;
130141 const fileB = FileUri . fsPath ( root . resolve ( folderName ) . resolve ( 'b' ) ) ;
131- fse . mkdirSync ( newFolder ) ;
142+
143+ fse . mkdirSync ( newFolder , { recursive : true } ) ;
132144 await sleep ( sleepTime ) ;
133145 watcherClient . onDidFilesChanged . mockClear ( ) ;
146+
134147 let id = await watcherServer . watchFileChanges ( newFolder , { excludes : [ ] } ) ;
135148 await fse . ensureFile ( fileA ) ;
136149 await sleep ( sleepTime ) ;
137150 expect ( watcherClient . onDidFilesChanged ) . toBeCalledTimes ( 1 ) ;
138151 await watcherServer . unwatchFileChanges ( id ) ;
152+
139153 id = await watcherServer . watchFileChanges ( newFolder , { excludes : [ '**/b/**' ] } ) ;
140154 await fse . ensureFile ( fileB ) ;
141155 await sleep ( sleepTime ) ;
142156 expect ( watcherClient . onDidFilesChanged ) . toBeCalledTimes ( 1 ) ;
143- watcherServer . unwatchFileChanges ( id ) ;
157+ await watcherServer . unwatchFileChanges ( id ) ;
158+ watcherServerList . push ( watcherServer ) ;
144159 } ) ;
145160} ) ;
146161
147162( isMacintosh ? describe . skip : describe ) ( 'Watch file rename/move/new' , ( ) => {
148- jest . setTimeout ( 10000 ) ;
149-
150163 const track = temp . track ( ) ;
151- const sleepTime = 1000 ;
152- let root : URI ;
153- let watcherServer : FileSystemWatcherServer ;
154- let injector : MockInjector ;
155-
156- beforeEach ( async ( ) => {
157- injector = createNodeInjector ( [ ] ) ;
158- root = FileUri . create ( fse . realpathSync ( temp . mkdirSync ( 'nsfw-test' ) ) ) ;
159- fse . mkdirpSync ( FileUri . fsPath ( root . resolve ( 'for_rename_folder' ) ) ) ;
160- fse . writeFileSync ( FileUri . fsPath ( root . resolve ( 'for_rename' ) ) , 'rename' ) ;
164+
165+ async function generateWatcher ( ) {
166+ const injector = createNodeInjector ( [ ] ) ;
167+ const root = FileUri . create ( fse . realpathSync ( await temp . mkdir ( 'nfsw-test' ) ) ) ;
161168 // @ts -ignore
162169 injector . mock ( FileSystemWatcherServer , 'isEnableNSFW' , ( ) => false ) ;
163- watcherServer = injector . get ( FileSystemWatcherServer ) ;
170+ const watcherServer = injector . get ( FileSystemWatcherServer ) ;
171+
172+ fse . mkdirpSync ( FileUri . fsPath ( root . resolve ( 'for_rename_folder' ) ) ) ;
173+ fse . writeFileSync ( FileUri . fsPath ( root . resolve ( 'for_rename' ) ) , 'rename' ) ;
174+
164175 await watcherServer . watchFileChanges ( root . toString ( ) ) ;
165- await sleep ( sleepTime ) ;
166- } ) ;
167176
168- afterEach ( ( ) => {
177+ return { root, watcherServer } ;
178+ }
179+ const watcherServerList : FileSystemWatcherServer [ ] = [ ] ;
180+
181+ afterAll ( async ( ) => {
169182 track . cleanupSync ( ) ;
170- watcherServer . dispose ( ) ;
183+ watcherServerList . forEach ( ( watcherServer ) => {
184+ watcherServer . dispose ( ) ;
185+ } ) ;
171186 } ) ;
172187
173188 it ( 'Rename file' , async ( ) => {
@@ -186,7 +201,7 @@ let seed = 1;
186201 } ) ;
187202 } ,
188203 } ;
189-
204+ const { root , watcherServer } = await generateWatcher ( ) ;
190205 watcherServer . setClient ( watcherClient ) ;
191206
192207 const expectedAddUris = [ root . resolve ( 'for_rename_renamed' ) . toString ( ) ] ;
@@ -198,6 +213,7 @@ let seed = 1;
198213
199214 expect ( [ ...addUris ] ) . toEqual ( expectedAddUris ) ;
200215 expect ( [ ...deleteUris ] ) . toEqual ( expectedDeleteUris ) ;
216+ watcherServerList . push ( watcherServer ) ;
201217 } ) ;
202218
203219 it ( 'Move file' , async ( ) => {
@@ -217,11 +233,12 @@ let seed = 1;
217233 } ,
218234 } ;
219235
236+ const { root, watcherServer } = await generateWatcher ( ) ;
220237 watcherServer . setClient ( watcherClient ) ;
221238
222239 const expectedAddUris = [ root . resolve ( 'for_rename_folder' ) . resolve ( 'for_rename' ) . toString ( ) ] ;
223-
224240 const expectedDeleteUris = [ root . resolve ( 'for_rename' ) . toString ( ) ] ;
241+
225242 await fse . move (
226243 FileUri . fsPath ( root . resolve ( 'for_rename' ) ) ,
227244 FileUri . fsPath ( root . resolve ( 'for_rename_folder' ) . resolve ( 'for_rename' ) ) ,
@@ -234,6 +251,7 @@ let seed = 1;
234251
235252 expect ( Array . from ( addUris ) ) . toEqual ( expectedAddUris ) ;
236253 expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
254+ watcherServerList . push ( watcherServer ) ;
237255 } ) ;
238256
239257 it ( 'Move file on current directry' , async ( ) => {
@@ -252,7 +270,7 @@ let seed = 1;
252270 } ) ;
253271 } ,
254272 } ;
255-
273+ const { root , watcherServer } = await generateWatcher ( ) ;
256274 watcherServer . setClient ( watcherClient ) ;
257275
258276 const expectedAddUris = [ root . resolve ( 'for_rename_1' ) . toString ( ) ] ;
@@ -266,6 +284,7 @@ let seed = 1;
266284
267285 expect ( Array . from ( addUris ) ) . toEqual ( expectedAddUris ) ;
268286 expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
287+ watcherServerList . push ( watcherServer ) ;
269288 } ) ;
270289
271290 it ( 'New file' , async ( ) => {
@@ -284,7 +303,7 @@ let seed = 1;
284303 } ) ;
285304 } ,
286305 } ;
287-
306+ const { root , watcherServer } = await generateWatcher ( ) ;
288307 watcherServer . setClient ( watcherClient ) ;
289308
290309 const expectedAddUris = [ root . resolve ( 'README.md' ) . toString ( ) ] ;
@@ -296,5 +315,6 @@ let seed = 1;
296315
297316 expect ( Array . from ( addUris ) ) . toEqual ( expectedAddUris ) ;
298317 expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
318+ watcherServerList . push ( watcherServer ) ;
299319 } ) ;
300320} ) ;
0 commit comments