extHostTextEditors.test.ts 2.8 KB
Newer Older
1 2 3 4 5 6 7 8 9
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
'use strict';

import * as assert from 'assert';
import { TPromise } from 'vs/base/common/winjs.base';
import * as extHostTypes from 'vs/workbench/api/node/extHostTypes';
10
import { MainContext, MainThreadEditorsShape, WorkspaceEditDto } from 'vs/workbench/api/node/extHost.protocol';
11 12 13
import URI from 'vs/base/common/uri';
import { mock } from 'vs/workbench/test/electron-browser/api/mock';
import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/node/extHostDocumentsAndEditors';
A
Alex Dima 已提交
14
import { SingleProxyRPCProtocol, TestRPCProtocol } from 'vs/workbench/test/electron-browser/api/testRPCProtocol';
15
import { ExtHostEditors } from 'vs/workbench/api/node/extHostTextEditors';
16
import { ResourceTextEdit } from 'vs/editor/common/modes';
17 18 19 20 21

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

	const resource = URI.parse('foo:bar');
	let editors: ExtHostEditors;
22
	let workspaceResourceEdits: WorkspaceEditDto;
23 24 25 26

	setup(() => {
		workspaceResourceEdits = null;

A
Alex Dima 已提交
27 28
		let rpcProtocol = new TestRPCProtocol();
		rpcProtocol.set(MainContext.MainThreadEditors, new class extends mock<MainThreadEditorsShape>() {
29
			$tryApplyWorkspaceEdit(_workspaceResourceEdits: WorkspaceEditDto): TPromise<boolean> {
30 31 32 33
				workspaceResourceEdits = _workspaceResourceEdits;
				return TPromise.as(true);
			}
		});
A
Alex Dima 已提交
34
		const documentsAndEditors = new ExtHostDocumentsAndEditors(SingleProxyRPCProtocol(null));
35 36 37 38
		documentsAndEditors.$acceptDocumentsAndEditorsDelta({
			addedDocuments: [{
				isDirty: false,
				modeId: 'foo',
39
				uri: resource,
40 41 42 43 44
				versionId: 1337,
				lines: ['foo'],
				EOL: '\n',
			}]
		});
A
Alex Dima 已提交
45
		editors = new ExtHostEditors(rpcProtocol, documentsAndEditors);
46 47 48 49 50 51
	});

	test('uses version id if document available', () => {
		let edit = new extHostTypes.WorkspaceEdit();
		edit.replace(resource, new extHostTypes.Range(0, 0, 0, 0), 'hello');
		return editors.applyWorkspaceEdit(edit).then((result) => {
52 53
			assert.equal(workspaceResourceEdits.edits.length, 1);
			assert.equal((<ResourceTextEdit>workspaceResourceEdits.edits[0]).modelVersionId, 1337);
54 55 56 57 58 59 60
		});
	});

	test('does not use version id if document is not available', () => {
		let edit = new extHostTypes.WorkspaceEdit();
		edit.replace(URI.parse('foo:bar2'), new extHostTypes.Range(0, 0, 0, 0), 'hello');
		return editors.applyWorkspaceEdit(edit).then((result) => {
61 62
			assert.equal(workspaceResourceEdits.edits.length, 1);
			assert.ok(typeof (<ResourceTextEdit>workspaceResourceEdits.edits[0]).modelVersionId === 'undefined');
63 64 65 66
		});
	});

});