outlineModel.test.ts 3.2 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12
/*---------------------------------------------------------------------------------------------
 *  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 { OutlineElement, OutlineGroup } from 'vs/workbench/parts/outline/electron-browser/outlineModel';
import { SymbolKind, SymbolInformation } from 'vs/editor/common/modes';
import { Range } from 'vs/editor/common/core/range';
import URI from 'vs/base/common/uri';
J
Johannes Rieken 已提交
13
import { IMarker, MarkerSeverity } from 'vs/platform/markers/common/markers';
14 15 16 17 18 19 20 21 22 23 24 25 26 27

suite('OutlineModel', function () {


	function fakeSymbolInformation(range: Range, name: string = 'foo'): SymbolInformation {
		return {
			name,
			kind: SymbolKind.Boolean,
			location: { uri: URI.parse('some:uri'), range },
			definingRange: range
		};
	}

	function fakeMarker(range: Range): IMarker {
J
Johannes Rieken 已提交
28
		return { ...range, owner: 'ffff', message: 'test', severity: MarkerSeverity.Error, resource: null };
29 30
	}

J
Johannes Rieken 已提交
31
	test('OutlineElement - updateMarker', function () {
32 33 34 35 36 37 38 39 40 41 42 43 44 45

		let e0 = new OutlineElement('foo1', null, fakeSymbolInformation(new Range(1, 1, 1, 10)));
		let e1 = new OutlineElement('foo2', null, fakeSymbolInformation(new Range(2, 1, 5, 1)));
		let e2 = new OutlineElement('foo3', null, fakeSymbolInformation(new Range(6, 1, 10, 10)));

		let group = new OutlineGroup('group', null, null, 1);
		group.children[e0.id] = e0;
		group.children[e1.id] = e1;
		group.children[e2.id] = e2;

		const data = [fakeMarker(new Range(6, 1, 6, 7)), fakeMarker(new Range(1, 1, 1, 4)), fakeMarker(new Range(10, 2, 14, 1))];
		data.sort(Range.compareRangesUsingStarts); // model does this

		group.updateMarker(data);
46
		assert.equal(data.length, 0); // all 'stolen'
J
Johannes Rieken 已提交
47
		assert.equal(e0.marker.count, 1);
J
Johannes Rieken 已提交
48
		assert.equal(e1.marker, undefined);
J
Johannes Rieken 已提交
49
		assert.equal(e2.marker.count, 2);
50 51

		group.updateMarker([]);
J
Johannes Rieken 已提交
52 53 54
		assert.equal(e0.marker, undefined);
		assert.equal(e1.marker, undefined);
		assert.equal(e2.marker, undefined);
55 56
	});

57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
	test('OutlineElement - updateMarker, 2', function () {

		let p = new OutlineElement('A', null, fakeSymbolInformation(new Range(1, 1, 11, 1)));
		let c1 = new OutlineElement('A/B', null, fakeSymbolInformation(new Range(2, 4, 5, 4)));
		let c2 = new OutlineElement('A/C', null, fakeSymbolInformation(new Range(6, 4, 9, 4)));

		let group = new OutlineGroup('group', null, null, 1);
		group.children[p.id] = p;
		p.children[c1.id] = c1;
		p.children[c2.id] = c2;

		let data = [
			fakeMarker(new Range(2, 4, 5, 4))
		];

		group.updateMarker(data);
		assert.equal(p.marker.count, 0);
		assert.equal(c1.marker.count, 1);
		assert.equal(c2.marker, undefined);

		data = [
			fakeMarker(new Range(2, 4, 5, 4)),
			fakeMarker(new Range(2, 6, 2, 8)),
			fakeMarker(new Range(7, 6, 7, 8)),
		];
		group.updateMarker(data);
		assert.equal(p.marker.count, 0);
		assert.equal(c1.marker.count, 2);
		assert.equal(c2.marker.count, 1);

		data = [
			fakeMarker(new Range(1, 4, 1, 11)),
			fakeMarker(new Range(7, 6, 7, 8)),
		];
		group.updateMarker(data);
		assert.equal(p.marker.count, 1);
		assert.equal(c1.marker, undefined);
		assert.equal(c2.marker.count, 1);
	});
96
});