Skip to content

Commit 2ae8c84

Browse files
refactor: refactor file-watcher test case (#2592)
* test: make sure parent dir exists * refactor: refactor file-watcher test case --------- Co-authored-by: pipiiiiii <[email protected]>
1 parent 88cbaea commit 2ae8c84

1 file changed

Lines changed: 71 additions & 51 deletions

File tree

packages/file-service/__tests__/node/file-service-watcher.test.ts

Lines changed: 71 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -12,31 +12,29 @@ import { FileSystemWatcherServer } from '../../src/node/file-service-watcher';
1212
function 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

Comments
 (0)