Path: blob/main/src/vs/editor/contrib/folding/test/browser/hiddenRangeModel.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 { IRange } from '../../../../common/core/range.js';6import { FoldingModel } from '../../browser/foldingModel.js';7import { HiddenRangeModel } from '../../browser/hiddenRangeModel.js';8import { computeRanges } from '../../browser/indentRangeProvider.js';9import { createTextModel } from '../../../../test/common/testTextModel.js';10import { TestDecorationProvider } from './foldingModel.test.js';11import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';121314interface ExpectedRange {15startLineNumber: number;16endLineNumber: number;17}1819suite('Hidden Range Model', () => {20ensureNoDisposablesAreLeakedInTestSuite();2122function r(startLineNumber: number, endLineNumber: number): ExpectedRange {23return { startLineNumber, endLineNumber };24}2526function assertRanges(actual: IRange[], expectedRegions: ExpectedRange[], message?: string) {27assert.deepStrictEqual(actual.map(r => ({ startLineNumber: r.startLineNumber, endLineNumber: r.endLineNumber })), expectedRegions, message);28}2930test('hasRanges', () => {31const lines = [32/* 1*/ '/**',33/* 2*/ ' * Comment',34/* 3*/ ' */',35/* 4*/ 'class A {',36/* 5*/ ' void foo() {',37/* 6*/ ' if (true) {',38/* 7*/ ' //hello',39/* 8*/ ' }',40/* 9*/ ' }',41/* 10*/ '}'];4243const textModel = createTextModel(lines.join('\n'));44const foldingModel = new FoldingModel(textModel, new TestDecorationProvider(textModel));45const hiddenRangeModel = new HiddenRangeModel(foldingModel);46try {47assert.strictEqual(hiddenRangeModel.hasRanges(), false);4849const ranges = computeRanges(textModel, false, undefined);50foldingModel.update(ranges);5152foldingModel.toggleCollapseState([foldingModel.getRegionAtLine(1)!, foldingModel.getRegionAtLine(6)!]);53assertRanges(hiddenRangeModel.hiddenRanges, [r(2, 3), r(7, 7)]);5455assert.strictEqual(hiddenRangeModel.hasRanges(), true);56assert.strictEqual(hiddenRangeModel.isHidden(1), false);57assert.strictEqual(hiddenRangeModel.isHidden(2), true);58assert.strictEqual(hiddenRangeModel.isHidden(3), true);59assert.strictEqual(hiddenRangeModel.isHidden(4), false);60assert.strictEqual(hiddenRangeModel.isHidden(5), false);61assert.strictEqual(hiddenRangeModel.isHidden(6), false);62assert.strictEqual(hiddenRangeModel.isHidden(7), true);63assert.strictEqual(hiddenRangeModel.isHidden(8), false);64assert.strictEqual(hiddenRangeModel.isHidden(9), false);65assert.strictEqual(hiddenRangeModel.isHidden(10), false);6667foldingModel.toggleCollapseState([foldingModel.getRegionAtLine(4)!]);68assertRanges(hiddenRangeModel.hiddenRanges, [r(2, 3), r(5, 9)]);6970assert.strictEqual(hiddenRangeModel.hasRanges(), true);71assert.strictEqual(hiddenRangeModel.isHidden(1), false);72assert.strictEqual(hiddenRangeModel.isHidden(2), true);73assert.strictEqual(hiddenRangeModel.isHidden(3), true);74assert.strictEqual(hiddenRangeModel.isHidden(4), false);75assert.strictEqual(hiddenRangeModel.isHidden(5), true);76assert.strictEqual(hiddenRangeModel.isHidden(6), true);77assert.strictEqual(hiddenRangeModel.isHidden(7), true);78assert.strictEqual(hiddenRangeModel.isHidden(8), true);79assert.strictEqual(hiddenRangeModel.isHidden(9), true);80assert.strictEqual(hiddenRangeModel.isHidden(10), false);8182foldingModel.toggleCollapseState([foldingModel.getRegionAtLine(1)!, foldingModel.getRegionAtLine(6)!, foldingModel.getRegionAtLine(4)!]);83assertRanges(hiddenRangeModel.hiddenRanges, []);84assert.strictEqual(hiddenRangeModel.hasRanges(), false);85assert.strictEqual(hiddenRangeModel.isHidden(1), false);86assert.strictEqual(hiddenRangeModel.isHidden(2), false);87assert.strictEqual(hiddenRangeModel.isHidden(3), false);88assert.strictEqual(hiddenRangeModel.isHidden(4), false);89assert.strictEqual(hiddenRangeModel.isHidden(5), false);90assert.strictEqual(hiddenRangeModel.isHidden(6), false);91assert.strictEqual(hiddenRangeModel.isHidden(7), false);92assert.strictEqual(hiddenRangeModel.isHidden(8), false);93assert.strictEqual(hiddenRangeModel.isHidden(9), false);94assert.strictEqual(hiddenRangeModel.isHidden(10), false);95} finally {96textModel.dispose();97hiddenRangeModel.dispose();98}99});100});101102103