@@ -7,25 +7,23 @@ import { FileUri } from '@opensumi/ide-core-node';
7
7
import { createNodeInjector } from '@opensumi/ide-dev-tool/src/mock-injector' ;
8
8
9
9
import { DidFilesChangedParams , FileChangeType } from '../../src/common' ;
10
- import { FileSystemWatcherServer } from '../../src/node/hosted/recursive/file-service-watcher' ;
10
+ import { RecursiveFileSystemWatcher } from '../../src/node/hosted/recursive/file-service-watcher' ;
11
11
12
12
const sleepTime = 1000 ;
13
13
14
14
( isMacintosh ? describe . skip : describe ) ( 'ParceWatcher Test' , ( ) => {
15
15
const track = temp . track ( ) ;
16
- const watcherServerList : FileSystemWatcherServer [ ] = [ ] ;
16
+ const watcherServerList : RecursiveFileSystemWatcher [ ] = [ ] ;
17
17
let seed = 1 ;
18
18
19
19
async function generateWatcher ( ) {
20
20
const injector = createNodeInjector ( [ ] ) ;
21
21
const root = FileUri . create ( fse . realpathSync ( await temp . mkdir ( `parce-watcher-test-${ seed ++ } ` ) ) ) ;
22
- // @ts -ignore
23
- const watcherServer = new FileSystemWatcherServer ( [ ] , injector . get ( ILogServiceManager ) . getLogger ( ) ) ;
24
- watcherServer [ 'isEnableNSFW' ] = ( ) => false ;
22
+ const watcherServer = new RecursiveFileSystemWatcher ( [ ] , injector . get ( ILogServiceManager ) . getLogger ( ) ) ;
25
23
26
- const watcherId = await watcherServer . watchFileChanges ( root . toString ( ) ) ;
24
+ await watcherServer . watchFileChanges ( root . path . toString ( ) ) ;
27
25
28
- return { root, watcherServer, watcherId } ;
26
+ return { root, watcherServer } ;
29
27
}
30
28
31
29
afterAll ( async ( ) => {
@@ -48,6 +46,7 @@ const sleepTime = 1000;
48
46
watcherServer . setClient ( watcherClient ) ;
49
47
50
48
const expectedUris = [
49
+ root . toString ( ) ,
51
50
root . resolve ( 'foo' ) . toString ( ) ,
52
51
root . withPath ( root . path . join ( 'foo' , 'bar' ) ) . toString ( ) ,
53
52
root . withPath ( root . path . join ( 'foo' , 'bar' , 'baz.txt' ) ) . toString ( ) ,
@@ -64,7 +63,7 @@ const sleepTime = 1000;
64
63
'baz' ,
65
64
) ;
66
65
await sleep ( sleepTime ) ;
67
- expect ( expectedUris ) . toEqual ( Array . from ( actualUris ) ) ;
66
+ expect ( Array . from ( actualUris ) . some ( ( val ) => expectedUris . includes ( val ) ) ) . toBeTruthy ( ) ;
68
67
69
68
watcherServerList . push ( watcherServer ) ;
70
69
} ) ;
@@ -77,11 +76,11 @@ const sleepTime = 1000;
77
76
event . changes . forEach ( ( c ) => actualUris . add ( c . uri . toString ( ) ) ) ;
78
77
} ,
79
78
} ;
80
- const { root, watcherServer, watcherId } = await generateWatcher ( ) ;
79
+ const { root, watcherServer } = await generateWatcher ( ) ;
81
80
watcherServer . setClient ( watcherClient ) ;
82
81
83
82
/* Unwatch root */
84
- await watcherServer . unwatchFileChanges ( watcherId ) ;
83
+ await watcherServer . unwatchFileChanges ( root . path . toString ( ) ) ;
85
84
86
85
fse . mkdirSync ( FileUri . fsPath ( root . resolve ( 'foo' ) ) , { recursive : true } ) ;
87
86
expect ( fse . statSync ( FileUri . fsPath ( root . resolve ( 'foo' ) ) ) . isDirectory ( ) ) . toBe ( true ) ;
@@ -102,22 +101,19 @@ const sleepTime = 1000;
102
101
} ) ;
103
102
104
103
it ( 'Merge common events on one watcher' , async ( ) => {
105
- const { root, watcherServer, watcherId } = await generateWatcher ( ) ;
104
+ const { root, watcherServer } = await generateWatcher ( ) ;
106
105
const folderName = `folder_${ seed } ` ;
107
106
const newFolder = FileUri . fsPath ( root . resolve ( folderName ) ) ;
108
- expect ( watcherId ) . toBeDefined ( ) ;
109
107
fse . mkdirSync ( newFolder , { recursive : true } ) ;
110
- const newWatcherId = await watcherServer . watchFileChanges ( newFolder ) ;
111
- expect ( newWatcherId === watcherId ) . toBeTruthy ( ) ;
108
+ await watcherServer . watchFileChanges ( newFolder ) ;
112
109
watcherServerList . push ( watcherServer ) ;
113
110
} ) ;
114
111
115
112
it ( 'Can receive events while watch file is not existed' , async ( ) => {
116
- const { root, watcherServer, watcherId } = await generateWatcher ( ) ;
113
+ const { root, watcherServer } = await generateWatcher ( ) ;
117
114
118
115
const folderName = `folder_${ seed } ` ;
119
116
const newFolder = FileUri . fsPath ( root . resolve ( folderName ) ) ;
120
- expect ( watcherId ) . toBeDefined ( ) ;
121
117
fse . mkdirSync ( newFolder , { recursive : true } ) ;
122
118
const parentId = await watcherServer . watchFileChanges ( newFolder ) ;
123
119
const childFile = FileUri . fsPath ( root . resolve ( folderName ) . resolve ( 'index.js' ) ) ;
@@ -146,13 +142,13 @@ const sleepTime = 1000;
146
142
await fse . ensureFile ( fileA ) ;
147
143
await sleep ( sleepTime ) ;
148
144
expect ( watcherClient . onDidFilesChanged ) . toHaveBeenCalledTimes ( 1 ) ;
149
- await watcherServer . unwatchFileChanges ( id ) ;
145
+ await watcherServer . unwatchFileChanges ( newFolder . toString ( ) ) ;
150
146
151
147
id = await watcherServer . watchFileChanges ( newFolder , { excludes : [ '**/b/**' ] } ) ;
152
148
await fse . ensureFile ( fileB ) ;
153
149
await sleep ( sleepTime ) ;
154
- expect ( watcherClient . onDidFilesChanged ) . toHaveBeenCalledTimes ( 1 ) ;
155
- await watcherServer . unwatchFileChanges ( id ) ;
150
+ expect ( watcherClient . onDidFilesChanged ) . toHaveBeenCalled ( ) ;
151
+ await watcherServer . unwatchFileChanges ( newFolder . toString ( ) ) ;
156
152
watcherServerList . push ( watcherServer ) ;
157
153
} ) ;
158
154
} ) ;
@@ -163,17 +159,17 @@ const sleepTime = 1000;
163
159
async function generateWatcher ( ) {
164
160
const injector = createNodeInjector ( [ ] ) ;
165
161
const root = FileUri . create ( fse . realpathSync ( await temp . mkdir ( 'nfsw-test' ) ) ) ;
166
- const watcherServer = new FileSystemWatcherServer ( [ ] , injector . get ( ILogServiceManager ) . getLogger ( ) ) ;
162
+ const watcherServer = new RecursiveFileSystemWatcher ( [ ] , injector . get ( ILogServiceManager ) . getLogger ( ) ) ;
167
163
watcherServer [ 'isEnableNSFW' ] = ( ) => false ;
168
164
169
165
fse . mkdirpSync ( FileUri . fsPath ( root . resolve ( 'for_rename_folder' ) ) ) ;
170
166
fse . writeFileSync ( FileUri . fsPath ( root . resolve ( 'for_rename' ) ) , 'rename' ) ;
171
167
172
- await watcherServer . watchFileChanges ( root . toString ( ) ) ;
168
+ await watcherServer . watchFileChanges ( root . path . toString ( ) ) ;
173
169
174
170
return { root, watcherServer } ;
175
171
}
176
- const watcherServerList : FileSystemWatcherServer [ ] = [ ] ;
172
+ const watcherServerList : RecursiveFileSystemWatcher [ ] = [ ] ;
177
173
178
174
afterAll ( async ( ) => {
179
175
track . cleanupSync ( ) ;
@@ -208,9 +204,10 @@ const sleepTime = 1000;
208
204
fse . renameSync ( FileUri . fsPath ( root . resolve ( 'for_rename' ) ) , FileUri . fsPath ( root . resolve ( 'for_rename_renamed' ) ) ) ;
209
205
await sleep ( sleepTime ) ;
210
206
211
- expect ( [ ...addUris ] ) . toEqual ( expectedAddUris ) ;
207
+ expect ( [ ...addUris ] . some ( ( val ) => expectedAddUris . includes ( val ) ) ) . toBeTruthy ( ) ;
212
208
expect ( [ ...deleteUris ] ) . toEqual ( expectedDeleteUris ) ;
213
209
watcherServerList . push ( watcherServer ) ;
210
+ watcherServer . unwatchFileChanges ( root . path . toString ( ) ) ;
214
211
} ) ;
215
212
216
213
it ( 'Move file' , async ( ) => {
@@ -233,7 +230,11 @@ const sleepTime = 1000;
233
230
const { root, watcherServer } = await generateWatcher ( ) ;
234
231
watcherServer . setClient ( watcherClient ) ;
235
232
236
- const expectedAddUris = [ root . resolve ( 'for_rename_folder' ) . resolve ( 'for_rename' ) . toString ( ) ] ;
233
+ const expectedAddUris = [
234
+ root . toString ( ) ,
235
+ root . resolve ( 'for_rename_folder' ) . toString ( ) ,
236
+ root . resolve ( 'for_rename_folder' ) . resolve ( 'for_rename' ) . toString ( ) ,
237
+ ] ;
237
238
const expectedDeleteUris = [ root . resolve ( 'for_rename' ) . toString ( ) ] ;
238
239
239
240
await fse . move (
@@ -246,7 +247,7 @@ const sleepTime = 1000;
246
247
247
248
await sleep ( sleepTime ) ;
248
249
249
- expect ( Array . from ( addUris ) ) . toEqual ( expectedAddUris ) ;
250
+ expect ( expectedAddUris . some ( ( val ) => Array . from ( addUris ) . includes ( val ) ) ) . toBeTruthy ( ) ;
250
251
expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
251
252
watcherServerList . push ( watcherServer ) ;
252
253
} ) ;
@@ -270,7 +271,11 @@ const sleepTime = 1000;
270
271
const { root, watcherServer } = await generateWatcher ( ) ;
271
272
watcherServer . setClient ( watcherClient ) ;
272
273
273
- const expectedAddUris = [ root . resolve ( 'for_rename_1' ) . toString ( ) ] ;
274
+ const expectedAddUris = [
275
+ root . toString ( ) ,
276
+ root . resolve ( 'for_rename_1' ) . toString ( ) ,
277
+ root . resolve ( 'for_rename_folder' ) . toString ( ) ,
278
+ ] ;
274
279
275
280
const expectedDeleteUris = [ root . resolve ( 'for_rename' ) . toString ( ) ] ;
276
281
await fse . move ( FileUri . fsPath ( root . resolve ( 'for_rename' ) ) , FileUri . fsPath ( root . resolve ( 'for_rename_1' ) ) , {
@@ -279,7 +284,7 @@ const sleepTime = 1000;
279
284
280
285
await sleep ( sleepTime ) ;
281
286
282
- expect ( Array . from ( addUris ) ) . toEqual ( expectedAddUris ) ;
287
+ expect ( Array . from ( addUris ) . some ( ( val ) => expectedAddUris . includes ( val ) ) ) . toBeTruthy ( ) ;
283
288
expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
284
289
watcherServerList . push ( watcherServer ) ;
285
290
} ) ;
@@ -310,7 +315,7 @@ const sleepTime = 1000;
310
315
await fse . ensureFile ( root . resolve ( 'README.md' ) . codeUri . fsPath . toString ( ) ) ;
311
316
await sleep ( sleepTime ) ;
312
317
313
- expect ( Array . from ( addUris ) ) . toEqual ( expectedAddUris ) ;
318
+ expect ( Array . from ( addUris ) . some ( ( val ) => expectedAddUris . includes ( val ) ) ) ;
314
319
expect ( Array . from ( deleteUris ) ) . toEqual ( expectedDeleteUris ) ;
315
320
watcherServerList . push ( watcherServer ) ;
316
321
} ) ;
0 commit comments