Path: blob/main/src/vs/editor/contrib/folding/test/browser/indentFold.test.ts
4780 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/4import assert from 'assert';5import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';6import { computeRanges } from '../../browser/indentRangeProvider.js';7import { createTextModel } from '../../../../test/common/testTextModel.js';89interface IndentRange {10start: number;11end: number;12}1314suite('Indentation Folding', () => {15ensureNoDisposablesAreLeakedInTestSuite();1617function r(start: number, end: number): IndentRange {18return { start, end };19}2021test('Limit by indent', () => {222324const lines = [25/* 1*/ 'A',26/* 2*/ ' A',27/* 3*/ ' A',28/* 4*/ ' A',29/* 5*/ ' A',30/* 6*/ ' A',31/* 7*/ ' A',32/* 8*/ ' A',33/* 9*/ ' A',34/* 10*/ ' A',35/* 11*/ ' A',36/* 12*/ ' A',37/* 13*/ ' A',38/* 14*/ ' A',39/* 15*/ 'A',40/* 16*/ ' A'41];42const r1 = r(1, 14); //043const r2 = r(3, 11); //144const r3 = r(4, 5); //245const r4 = r(6, 11); //246const r5 = r(8, 9); //347const r6 = r(10, 11); //348const r7 = r(12, 14); //149const r8 = r(13, 14);//450const r9 = r(15, 16);//05152const model = createTextModel(lines.join('\n'));5354function assertLimit(maxEntries: number, expectedRanges: IndentRange[], message: string) {55let reported: number | false = false;56const indentRanges = computeRanges(model, true, undefined, { limit: maxEntries, update: (computed, limited) => reported = limited });57assert.ok(indentRanges.length <= maxEntries, 'max ' + message);58const actual: IndentRange[] = [];59for (let i = 0; i < indentRanges.length; i++) {60actual.push({ start: indentRanges.getStartLineNumber(i), end: indentRanges.getEndLineNumber(i) });61}62assert.deepStrictEqual(actual, expectedRanges, message);63assert.equal(reported, 9 <= maxEntries ? false : maxEntries, 'limited');64}6566assertLimit(1000, [r1, r2, r3, r4, r5, r6, r7, r8, r9], '1000');67assertLimit(9, [r1, r2, r3, r4, r5, r6, r7, r8, r9], '9');68assertLimit(8, [r1, r2, r3, r4, r5, r6, r7, r9], '8');69assertLimit(7, [r1, r2, r3, r4, r5, r7, r9], '7');70assertLimit(6, [r1, r2, r3, r4, r7, r9], '6');71assertLimit(5, [r1, r2, r3, r7, r9], '5');72assertLimit(4, [r1, r2, r7, r9], '4');73assertLimit(3, [r1, r2, r9], '3');74assertLimit(2, [r1, r9], '2');75assertLimit(1, [r1], '1');76assertLimit(0, [], '0');7778model.dispose();79});8081});828384