Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/api/test/browser/mainThreadBulkEdits.test.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import assert from 'assert';
7
import { IWorkspaceTextEditDto } from '../../common/extHost.protocol.js';
8
import { mock } from '../../../../base/test/common/mock.js';
9
import { Event } from '../../../../base/common/event.js';
10
import { URI } from '../../../../base/common/uri.js';
11
import { FileSystemProviderCapabilities, IFileService } from '../../../../platform/files/common/files.js';
12
import { reviveWorkspaceEditDto } from '../../browser/mainThreadBulkEdits.js';
13
import { UriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentityService.js';
14
import { IWorkspaceTextEdit } from '../../../../editor/common/languages.js';
15
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';
16
17
suite('MainThreadBulkEdits', function () {
18
19
ensureNoDisposablesAreLeakedInTestSuite();
20
21
test('"Rename failed to apply edits" in monorepo with pnpm #158845', function () {
22
23
24
const fileService = new class extends mock<IFileService>() {
25
override onDidChangeFileSystemProviderCapabilities = Event.None;
26
override onDidChangeFileSystemProviderRegistrations = Event.None;
27
28
override hasProvider(uri: URI) {
29
return true;
30
}
31
32
override hasCapability(resource: URI, capability: FileSystemProviderCapabilities): boolean {
33
// if (resource.scheme === 'case' && capability === FileSystemProviderCapabilities.PathCaseSensitive) {
34
// return false;
35
// }
36
// NO capabilities, esp not being case-sensitive
37
return false;
38
}
39
};
40
41
const uriIdentityService = new UriIdentityService(fileService);
42
43
const edits: IWorkspaceTextEditDto[] = [
44
{ resource: URI.from({ scheme: 'case', path: '/hello/WORLD/foo.txt' }), textEdit: { range: { startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 1 }, text: 'sss' }, versionId: undefined },
45
{ resource: URI.from({ scheme: 'case', path: '/heLLO/world/fOO.txt' }), textEdit: { range: { startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 1 }, text: 'sss' }, versionId: undefined },
46
{ resource: URI.from({ scheme: 'case', path: '/other/path.txt' }), textEdit: { range: { startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 1 }, text: 'sss' }, versionId: undefined },
47
{ resource: URI.from({ scheme: 'foo', path: '/other/path.txt' }), textEdit: { range: { startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 1 }, text: 'sss' }, versionId: undefined },
48
];
49
50
51
const out = reviveWorkspaceEditDto({ edits }, uriIdentityService);
52
53
assert.strictEqual((<IWorkspaceTextEdit>out.edits[0]).resource.path, '/hello/WORLD/foo.txt');
54
assert.strictEqual((<IWorkspaceTextEdit>out.edits[1]).resource.path, '/hello/WORLD/foo.txt'); // the FIRST occurrence defined the shape!
55
assert.strictEqual((<IWorkspaceTextEdit>out.edits[2]).resource.path, '/other/path.txt');
56
assert.strictEqual((<IWorkspaceTextEdit>out.edits[3]).resource.path, '/other/path.txt');
57
58
uriIdentityService.dispose();
59
60
});
61
});
62
63