Path: blob/main/src/vs/workbench/api/test/browser/extHostBulkEdits.test.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/4import assert from 'assert';5import * as extHostTypes from '../../common/extHostTypes.js';6import { MainContext, IWorkspaceEditDto, MainThreadBulkEditsShape, IWorkspaceTextEditDto } from '../../common/extHost.protocol.js';7import { URI } from '../../../../base/common/uri.js';8import { mock } from '../../../../base/test/common/mock.js';9import { ExtHostDocumentsAndEditors } from '../../common/extHostDocumentsAndEditors.js';10import { SingleProxyRPCProtocol, TestRPCProtocol } from '../common/testRPCProtocol.js';11import { NullLogService } from '../../../../platform/log/common/log.js';12import { ExtHostBulkEdits } from '../../common/extHostBulkEdits.js';13import { nullExtensionDescription } from '../../../services/extensions/common/extensions.js';14import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';15import { SerializableObjectWithBuffers } from '../../../services/extensions/common/proxyIdentifier.js';1617suite('ExtHostBulkEdits.applyWorkspaceEdit', () => {1819const resource = URI.parse('foo:bar');20let bulkEdits: ExtHostBulkEdits;21let workspaceResourceEdits: IWorkspaceEditDto;2223setup(() => {24workspaceResourceEdits = null!;2526const rpcProtocol = new TestRPCProtocol();27rpcProtocol.set(MainContext.MainThreadBulkEdits, new class extends mock<MainThreadBulkEditsShape>() {28override $tryApplyWorkspaceEdit(_workspaceResourceEdits: SerializableObjectWithBuffers<IWorkspaceEditDto>): Promise<boolean> {29workspaceResourceEdits = _workspaceResourceEdits.value;30return Promise.resolve(true);31}32});33const documentsAndEditors = new ExtHostDocumentsAndEditors(SingleProxyRPCProtocol(null), new NullLogService());34documentsAndEditors.$acceptDocumentsAndEditorsDelta({35addedDocuments: [{36isDirty: false,37languageId: 'foo',38uri: resource,39versionId: 1337,40lines: ['foo'],41EOL: '\n',42encoding: 'utf8'43}]44});45bulkEdits = new ExtHostBulkEdits(rpcProtocol, documentsAndEditors);46});4748ensureNoDisposablesAreLeakedInTestSuite();4950test('uses version id if document available', async () => {51const edit = new extHostTypes.WorkspaceEdit();52edit.replace(resource, new extHostTypes.Range(0, 0, 0, 0), 'hello');53await bulkEdits.applyWorkspaceEdit(edit, nullExtensionDescription, undefined);54assert.strictEqual(workspaceResourceEdits.edits.length, 1);55const [first] = workspaceResourceEdits.edits;56assert.strictEqual((<IWorkspaceTextEditDto>first).versionId, 1337);57});5859test('does not use version id if document is not available', async () => {60const edit = new extHostTypes.WorkspaceEdit();61edit.replace(URI.parse('foo:bar2'), new extHostTypes.Range(0, 0, 0, 0), 'hello');62await bulkEdits.applyWorkspaceEdit(edit, nullExtensionDescription, undefined);63assert.strictEqual(workspaceResourceEdits.edits.length, 1);64const [first] = workspaceResourceEdits.edits;65assert.ok(typeof (<IWorkspaceTextEditDto>first).versionId === 'undefined');66});6768});697071