Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/editor/contrib/folding/test/browser/hiddenRangeModel.test.ts
4780 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
import assert from 'assert';
6
import { IRange } from '../../../../common/core/range.js';
7
import { FoldingModel } from '../../browser/foldingModel.js';
8
import { HiddenRangeModel } from '../../browser/hiddenRangeModel.js';
9
import { computeRanges } from '../../browser/indentRangeProvider.js';
10
import { createTextModel } from '../../../../test/common/testTextModel.js';
11
import { TestDecorationProvider } from './foldingModel.test.js';
12
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';
13
14
15
interface ExpectedRange {
16
startLineNumber: number;
17
endLineNumber: number;
18
}
19
20
suite('Hidden Range Model', () => {
21
ensureNoDisposablesAreLeakedInTestSuite();
22
23
function r(startLineNumber: number, endLineNumber: number): ExpectedRange {
24
return { startLineNumber, endLineNumber };
25
}
26
27
function assertRanges(actual: IRange[], expectedRegions: ExpectedRange[], message?: string) {
28
assert.deepStrictEqual(actual.map(r => ({ startLineNumber: r.startLineNumber, endLineNumber: r.endLineNumber })), expectedRegions, message);
29
}
30
31
test('hasRanges', () => {
32
const lines = [
33
/* 1*/ '/**',
34
/* 2*/ ' * Comment',
35
/* 3*/ ' */',
36
/* 4*/ 'class A {',
37
/* 5*/ ' void foo() {',
38
/* 6*/ ' if (true) {',
39
/* 7*/ ' //hello',
40
/* 8*/ ' }',
41
/* 9*/ ' }',
42
/* 10*/ '}'];
43
44
const textModel = createTextModel(lines.join('\n'));
45
const foldingModel = new FoldingModel(textModel, new TestDecorationProvider(textModel));
46
const hiddenRangeModel = new HiddenRangeModel(foldingModel);
47
try {
48
assert.strictEqual(hiddenRangeModel.hasRanges(), false);
49
50
const ranges = computeRanges(textModel, false, undefined);
51
foldingModel.update(ranges);
52
53
foldingModel.toggleCollapseState([foldingModel.getRegionAtLine(1)!, foldingModel.getRegionAtLine(6)!]);
54
assertRanges(hiddenRangeModel.hiddenRanges, [r(2, 3), r(7, 7)]);
55
56
assert.strictEqual(hiddenRangeModel.hasRanges(), true);
57
assert.strictEqual(hiddenRangeModel.isHidden(1), false);
58
assert.strictEqual(hiddenRangeModel.isHidden(2), true);
59
assert.strictEqual(hiddenRangeModel.isHidden(3), true);
60
assert.strictEqual(hiddenRangeModel.isHidden(4), false);
61
assert.strictEqual(hiddenRangeModel.isHidden(5), false);
62
assert.strictEqual(hiddenRangeModel.isHidden(6), false);
63
assert.strictEqual(hiddenRangeModel.isHidden(7), true);
64
assert.strictEqual(hiddenRangeModel.isHidden(8), false);
65
assert.strictEqual(hiddenRangeModel.isHidden(9), false);
66
assert.strictEqual(hiddenRangeModel.isHidden(10), false);
67
68
foldingModel.toggleCollapseState([foldingModel.getRegionAtLine(4)!]);
69
assertRanges(hiddenRangeModel.hiddenRanges, [r(2, 3), r(5, 9)]);
70
71
assert.strictEqual(hiddenRangeModel.hasRanges(), true);
72
assert.strictEqual(hiddenRangeModel.isHidden(1), false);
73
assert.strictEqual(hiddenRangeModel.isHidden(2), true);
74
assert.strictEqual(hiddenRangeModel.isHidden(3), true);
75
assert.strictEqual(hiddenRangeModel.isHidden(4), false);
76
assert.strictEqual(hiddenRangeModel.isHidden(5), true);
77
assert.strictEqual(hiddenRangeModel.isHidden(6), true);
78
assert.strictEqual(hiddenRangeModel.isHidden(7), true);
79
assert.strictEqual(hiddenRangeModel.isHidden(8), true);
80
assert.strictEqual(hiddenRangeModel.isHidden(9), true);
81
assert.strictEqual(hiddenRangeModel.isHidden(10), false);
82
83
foldingModel.toggleCollapseState([foldingModel.getRegionAtLine(1)!, foldingModel.getRegionAtLine(6)!, foldingModel.getRegionAtLine(4)!]);
84
assertRanges(hiddenRangeModel.hiddenRanges, []);
85
assert.strictEqual(hiddenRangeModel.hasRanges(), false);
86
assert.strictEqual(hiddenRangeModel.isHidden(1), false);
87
assert.strictEqual(hiddenRangeModel.isHidden(2), false);
88
assert.strictEqual(hiddenRangeModel.isHidden(3), false);
89
assert.strictEqual(hiddenRangeModel.isHidden(4), false);
90
assert.strictEqual(hiddenRangeModel.isHidden(5), false);
91
assert.strictEqual(hiddenRangeModel.isHidden(6), false);
92
assert.strictEqual(hiddenRangeModel.isHidden(7), false);
93
assert.strictEqual(hiddenRangeModel.isHidden(8), false);
94
assert.strictEqual(hiddenRangeModel.isHidden(9), false);
95
assert.strictEqual(hiddenRangeModel.isHidden(10), false);
96
} finally {
97
textModel.dispose();
98
hiddenRangeModel.dispose();
99
}
100
});
101
});
102
103