searchModel.test.ts 4.8 KB
Newer Older
E
Erich Gamma 已提交
1 2 3 4 5 6 7
/*---------------------------------------------------------------------------------------------
 *  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';
S
Sandeep Somavarapu 已提交
8
import {Match, FileMatch, SearchResult} from 'vs/workbench/parts/search/common/searchModel';
J
Johannes Rieken 已提交
9
import URI from 'vs/base/common/uri';
10 11
import {ServiceCollection} from 'vs/platform/instantiation/common/serviceCollection';
import {InstantiationService} from 'vs/platform/instantiation/common/instantiationService';
E
Erich Gamma 已提交
12
import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation';
13 14 15 16 17 18 19 20
import {IFileMatch, ILineMatch} from 'vs/platform/search/common/search';

function aFileMatch(path: string, searchResult?: SearchResult, ...lineMatches: ILineMatch[]): FileMatch {
	let rawMatch: IFileMatch= {
		resource: URI.file('C:\\' + path),
		lineMatches: lineMatches
	};
	return new FileMatch(null, searchResult, rawMatch, null, null);
E
Erich Gamma 已提交
21 22 23 24 25 26
}

suite('Search - Model', () => {
	let instantiation: IInstantiationService;

	setup(() => {
27
		instantiation = new InstantiationService(new ServiceCollection());
E
Erich Gamma 已提交
28 29
	});

B
Benjamin Pasero 已提交
30
	test('Line Match', function () {
31
		let fileMatch = aFileMatch('folder\\file.txt');
E
Erich Gamma 已提交
32 33 34 35 36 37 38 39
		let lineMatch = new Match(fileMatch, 'foo bar', 1, 0, 3);
		assert.equal(lineMatch.text(), 'foo bar');
		assert.equal(lineMatch.range().startLineNumber, 2);
		assert.equal(lineMatch.range().endLineNumber, 2);
		assert.equal(lineMatch.range().startColumn, 1);
		assert.equal(lineMatch.range().endColumn, 4);
	});

B
Benjamin Pasero 已提交
40
	test('Line Match - Remove', function () {
41 42 43 44 45 46
		let fileMatch = aFileMatch('folder\\file.txt', null, ...[{
					preview: 'foo bar',
					lineNumber: 1,
					offsetAndLengths: [[0, 3]]
		}]);
		let lineMatch = fileMatch.matches()[0];
E
Erich Gamma 已提交
47
		fileMatch.remove(lineMatch);
S
Sandeep Somavarapu 已提交
48
		assert.equal(fileMatch.matches().length, 0);
E
Erich Gamma 已提交
49 50
	});

B
Benjamin Pasero 已提交
51
	test('File Match', function () {
52
		let fileMatch = aFileMatch('folder\\file.txt');
E
Erich Gamma 已提交
53 54 55 56
		assert.equal(fileMatch.matches(), 0);
		assert.equal(fileMatch.resource().toString(), 'file:///c%3A/folder/file.txt');
		assert.equal(fileMatch.name(), 'file.txt');

57
		fileMatch = aFileMatch('file.txt');
E
Erich Gamma 已提交
58 59 60 61 62
		assert.equal(fileMatch.matches(), 0);
		assert.equal(fileMatch.resource().toString(), 'file:///c%3A/file.txt');
		assert.equal(fileMatch.name(), 'file.txt');
	});

B
Benjamin Pasero 已提交
63
	test('Search Result', function () {
E
Erich Gamma 已提交
64 65 66 67 68 69 70

		let searchResult = instantiation.createInstance(SearchResult, null);
		assert.equal(searchResult.isEmpty(), true);

		let raw: IFileMatch[] = [];
		for (let i = 0; i < 10; i++) {
			raw.push({
J
Johannes Rieken 已提交
71
				resource: URI.parse('file://c:/' + i),
E
Erich Gamma 已提交
72 73 74 75 76 77 78
				lineMatches: [{
					preview: String(i),
					lineNumber: 1,
					offsetAndLengths: [[0, 1]]
				}]
			});
		}
S
Sandeep Somavarapu 已提交
79
		searchResult.add(raw);
E
Erich Gamma 已提交
80 81 82 83 84

		assert.equal(searchResult.isEmpty(), false);
		assert.equal(searchResult.matches().length, 10);
	});

B
Benjamin Pasero 已提交
85
	test('Alle Drei Zusammen', function () {
E
Erich Gamma 已提交
86 87

		let searchResult = instantiation.createInstance(SearchResult, null);
88
		let fileMatch = aFileMatch('far\\boo', searchResult);
E
Erich Gamma 已提交
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
		let lineMatch = new Match(fileMatch, 'foo bar', 1, 0, 3);

		assert(lineMatch.parent() === fileMatch);
		assert(fileMatch.parent() === searchResult);
	});

	//// ----- utils
	//function lineHasDecorations(model: editor.IModel, lineNumber: number, decorations: { start: number; end: number; }[]): void {
	//    let lineDecorations:typeof decorations = [];
	//    let decs = model.getLineDecorations(lineNumber);
	//    for (let i = 0, len = decs.length; i < len; i++) {
	//        lineDecorations.push({
	//            start: decs[i].range.startColumn,
	//            end: decs[i].range.endColumn
	//        });
	//    }
	//    assert.deepEqual(lineDecorations, decorations);
	//}
	//
	//function lineHasNoDecoration(model: editor.IModel, lineNumber: number): void {
	//    lineHasDecorations(model, lineNumber, []);
	//}
	//
	//function lineHasDecoration(model: editor.IModel, lineNumber: number, start: number, end: number): void {
	//    lineHasDecorations(model, lineNumber, [{
	//        start: start,
	//        end: end
	//    }]);
	//}
	//// ----- end utils
	//
	//test('Model Highlights', function () {
	//
	//    let fileMatch = instantiation.createInstance(FileMatch, null, toUri('folder\\file.txt'));
	//    fileMatch.add(new Match(fileMatch, 'line2', 1, 0, 2));
	//    fileMatch.connect();
	//    lineHasDecoration(oneModel, 2, 1, 3);
	//});
	//
	//test('Dispose', function () {
	//
	//    let fileMatch = instantiation.createInstance(FileMatch, null, toUri('folder\\file.txt'));
	//    fileMatch.add(new Match(fileMatch, 'line2', 1, 0, 2));
	//    fileMatch.connect();
	//    lineHasDecoration(oneModel, 2, 1, 3);
	//
	//    fileMatch.dispose();
	//    lineHasNoDecoration(oneModel, 2);
	//});
});