extHostTextEditors.test.ts 2.7 KB
Newer Older
1 2 3 4 5
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
import * as assert from 'assert';
J
Johannes Rieken 已提交
6
import * as extHostTypes from 'vs/workbench/api/common/extHostTypes';
7
import { MainContext, MainThreadTextEditorsShape, IWorkspaceEditDto } from 'vs/workbench/api/common/extHost.protocol';
8
import { URI } from 'vs/base/common/uri';
9
import { mock } from 'vs/workbench/test/electron-browser/api/mock';
J
Johannes Rieken 已提交
10
import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors';
A
Alex Dima 已提交
11
import { SingleProxyRPCProtocol, TestRPCProtocol } from 'vs/workbench/test/electron-browser/api/testRPCProtocol';
J
Johannes Rieken 已提交
12
import { ExtHostEditors } from 'vs/workbench/api/common/extHostTextEditors';
13
import { ResourceTextEdit } from 'vs/editor/common/modes';
14 15 16 17 18

suite('ExtHostTextEditors.applyWorkspaceEdit', () => {

	const resource = URI.parse('foo:bar');
	let editors: ExtHostEditors;
J
Johannes Rieken 已提交
19
	let workspaceResourceEdits: IWorkspaceEditDto;
20 21

	setup(() => {
22
		workspaceResourceEdits = null!;
23

A
Alex Dima 已提交
24
		let rpcProtocol = new TestRPCProtocol();
25
		rpcProtocol.set(MainContext.MainThreadTextEditors, new class extends mock<MainThreadTextEditorsShape>() {
J
Johannes Rieken 已提交
26
			$tryApplyWorkspaceEdit(_workspaceResourceEdits: IWorkspaceEditDto): Promise<boolean> {
27
				workspaceResourceEdits = _workspaceResourceEdits;
28
				return Promise.resolve(true);
29 30
			}
		});
31
		const documentsAndEditors = new ExtHostDocumentsAndEditors(SingleProxyRPCProtocol(null));
32 33 34 35
		documentsAndEditors.$acceptDocumentsAndEditorsDelta({
			addedDocuments: [{
				isDirty: false,
				modeId: 'foo',
36
				uri: resource,
37 38 39 40 41
				versionId: 1337,
				lines: ['foo'],
				EOL: '\n',
			}]
		});
A
Alex Dima 已提交
42
		editors = new ExtHostEditors(rpcProtocol, documentsAndEditors);
43 44
	});

M
Matt Bierner 已提交
45
	test('uses version id if document available', async () => {
46 47
		let edit = new extHostTypes.WorkspaceEdit();
		edit.replace(resource, new extHostTypes.Range(0, 0, 0, 0), 'hello');
M
Matt Bierner 已提交
48 49 50
		await editors.applyWorkspaceEdit(edit);
		assert.equal(workspaceResourceEdits.edits.length, 1);
		assert.equal((<ResourceTextEdit>workspaceResourceEdits.edits[0]).modelVersionId, 1337);
51 52
	});

M
Matt Bierner 已提交
53
	test('does not use version id if document is not available', async () => {
54 55
		let edit = new extHostTypes.WorkspaceEdit();
		edit.replace(URI.parse('foo:bar2'), new extHostTypes.Range(0, 0, 0, 0), 'hello');
M
Matt Bierner 已提交
56 57 58
		await editors.applyWorkspaceEdit(edit);
		assert.equal(workspaceResourceEdits.edits.length, 1);
		assert.ok(typeof (<ResourceTextEdit>workspaceResourceEdits.edits[0]).modelVersionId === 'undefined');
59 60 61
	});

});