Skip to content

Commit 0611b42

Browse files
committed
feat(file-service): add base driver and data store interfaces
1 parent 157eb17 commit 0611b42

18 files changed

Lines changed: 710 additions & 561 deletions

File tree

packages/file-service/__tests__/browser/file-service-client.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import fs from 'fs-extra';
22
import temp from 'temp';
33

4-
import { DisposableCollection, FileUri, UTF8 } from '@opensumi/ide-core-common';
4+
import { DisposableCollection, FileUri, UTF8, injectGDataStores } from '@opensumi/ide-core-common';
55
import { createBrowserInjector } from '@opensumi/ide-dev-tool/src/injector-helper';
66
import { FileService } from '@opensumi/ide-file-service/lib/node';
77
import { DiskFileSystemProvider } from '@opensumi/ide-file-service/lib/node/disk-file-system.provider';
@@ -29,6 +29,7 @@ describe('FileServiceClient should be work', () => {
2929
useClass: DiskFileSystemProvider,
3030
},
3131
);
32+
injectGDataStores(injector);
3233

3334
beforeAll(() => {
3435
// @ts-ignore

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

Lines changed: 62 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,46 @@
11
import * as fse from 'fs-extra';
22
import temp from 'temp';
33

4-
import { FileUri, sleep } from '@opensumi/ide-core-node';
4+
import { Disposable, FileUri, URI, sleep } from '@opensumi/ide-core-node';
55
import { createNodeInjector } from '@opensumi/ide-dev-tool/src/mock-injector';
66

77
import { DidFilesChangedParams, FileChangeType } from '../../src/common/index';
8+
import { FileChangeCollectionManager, FileChangeCollectionManagerOptions } from '../../src/node/file-change-collection';
89
import { UnRecursiveFileSystemWatcher } from '../../src/node/un-recursive/file-service-watcher';
910

1011
const 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+
1238
describe('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

232249
describe('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

Comments
 (0)