Path: blob/main/src/vs/editor/test/common/viewModel/glyphLanesModel.test.ts
3296 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*--------------------------------------------------------------------------------------------*/45import assert from 'assert';6import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';7import { GlyphMarginLanesModel, } from '../../../common/viewModel/glyphLanesModel.js';8import { Range } from '../../../common/core/range.js';9import { GlyphMarginLane } from '../../../common/model.js';1011suite('GlyphLanesModel', () => {12let model: GlyphMarginLanesModel;1314ensureNoDisposablesAreLeakedInTestSuite();1516const lineRange = (startLineNumber: number, endLineNumber: number) => new Range(startLineNumber, 1, endLineNumber, 1);17const assertLines = (fromLine: number, n: number, expected: GlyphMarginLane[][]) => {18const result: GlyphMarginLane[][] = [];19for (let i = 0; i < n; i++) {20result.push(model.getLanesAtLine(fromLine + i));21}22assert.deepStrictEqual(result, expected, `fromLine: ${fromLine}, n: ${n}`);23};2425setup(() => {26model = new GlyphMarginLanesModel(10);27});2829test('handles empty', () => {30assert.equal(model.requiredLanes, 1);31assertLines(1, 1, [32[GlyphMarginLane.Center],33]);34});3536test('works with a single line range', () => {37model.push(GlyphMarginLane.Left, lineRange(2, 3));38assert.equal(model.requiredLanes, 1);39assertLines(1, 5, [40[GlyphMarginLane.Center], // 141[GlyphMarginLane.Left], // 242[GlyphMarginLane.Left], // 343[GlyphMarginLane.Center], // 444[GlyphMarginLane.Center], // 545]);46});4748test('persists ranges', () => {49model.push(GlyphMarginLane.Left, lineRange(2, 3), true);50assert.equal(model.requiredLanes, 1);51assertLines(1, 5, [52[GlyphMarginLane.Left], // 153[GlyphMarginLane.Left], // 254[GlyphMarginLane.Left], // 355[GlyphMarginLane.Left], // 456[GlyphMarginLane.Left], // 557]);58});5960test('handles overlaps', () => {61model.push(GlyphMarginLane.Left, lineRange(6, 9));62model.push(GlyphMarginLane.Right, lineRange(5, 7));63model.push(GlyphMarginLane.Center, lineRange(7, 8));64assert.equal(model.requiredLanes, 3);65assertLines(5, 6, [66[GlyphMarginLane.Right], // 567[GlyphMarginLane.Left, GlyphMarginLane.Right], // 668[GlyphMarginLane.Left, GlyphMarginLane.Center, GlyphMarginLane.Right], // 769[GlyphMarginLane.Left, GlyphMarginLane.Center], // 870[GlyphMarginLane.Left], // 971[GlyphMarginLane.Center], // 1072]);73});74});757677