extHostTextEditors.test.ts 2.9 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, IInitData } 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
import { ExtHostContextService } from 'vs/workbench/api/common/extHostContextService';
15 16 17 18 19

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

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

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

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

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

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

});