Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/api/test/browser/extHostBulkEdits.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
import assert from 'assert';
6
import * as extHostTypes from '../../common/extHostTypes.js';
7
import { MainContext, IWorkspaceEditDto, MainThreadBulkEditsShape, IWorkspaceTextEditDto } from '../../common/extHost.protocol.js';
8
import { URI } from '../../../../base/common/uri.js';
9
import { mock } from '../../../../base/test/common/mock.js';
10
import { ExtHostDocumentsAndEditors } from '../../common/extHostDocumentsAndEditors.js';
11
import { SingleProxyRPCProtocol, TestRPCProtocol } from '../common/testRPCProtocol.js';
12
import { NullLogService } from '../../../../platform/log/common/log.js';
13
import { ExtHostBulkEdits } from '../../common/extHostBulkEdits.js';
14
import { nullExtensionDescription } from '../../../services/extensions/common/extensions.js';
15
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';
16
import { SerializableObjectWithBuffers } from '../../../services/extensions/common/proxyIdentifier.js';
17
18
suite('ExtHostBulkEdits.applyWorkspaceEdit', () => {
19
20
const resource = URI.parse('foo:bar');
21
let bulkEdits: ExtHostBulkEdits;
22
let workspaceResourceEdits: IWorkspaceEditDto;
23
24
setup(() => {
25
workspaceResourceEdits = null!;
26
27
const rpcProtocol = new TestRPCProtocol();
28
rpcProtocol.set(MainContext.MainThreadBulkEdits, new class extends mock<MainThreadBulkEditsShape>() {
29
override $tryApplyWorkspaceEdit(_workspaceResourceEdits: SerializableObjectWithBuffers<IWorkspaceEditDto>): Promise<boolean> {
30
workspaceResourceEdits = _workspaceResourceEdits.value;
31
return Promise.resolve(true);
32
}
33
});
34
const documentsAndEditors = new ExtHostDocumentsAndEditors(SingleProxyRPCProtocol(null), new NullLogService());
35
documentsAndEditors.$acceptDocumentsAndEditorsDelta({
36
addedDocuments: [{
37
isDirty: false,
38
languageId: 'foo',
39
uri: resource,
40
versionId: 1337,
41
lines: ['foo'],
42
EOL: '\n',
43
encoding: 'utf8'
44
}]
45
});
46
bulkEdits = new ExtHostBulkEdits(rpcProtocol, documentsAndEditors);
47
});
48
49
ensureNoDisposablesAreLeakedInTestSuite();
50
51
test('uses version id if document available', async () => {
52
const edit = new extHostTypes.WorkspaceEdit();
53
edit.replace(resource, new extHostTypes.Range(0, 0, 0, 0), 'hello');
54
await bulkEdits.applyWorkspaceEdit(edit, nullExtensionDescription, undefined);
55
assert.strictEqual(workspaceResourceEdits.edits.length, 1);
56
const [first] = workspaceResourceEdits.edits;
57
assert.strictEqual((<IWorkspaceTextEditDto>first).versionId, 1337);
58
});
59
60
test('does not use version id if document is not available', async () => {
61
const edit = new extHostTypes.WorkspaceEdit();
62
edit.replace(URI.parse('foo:bar2'), new extHostTypes.Range(0, 0, 0, 0), 'hello');
63
await bulkEdits.applyWorkspaceEdit(edit, nullExtensionDescription, undefined);
64
assert.strictEqual(workspaceResourceEdits.edits.length, 1);
65
const [first] = workspaceResourceEdits.edits;
66
assert.ok(typeof (<IWorkspaceTextEditDto>first).versionId === 'undefined');
67
});
68
69
});
70
71