Path: blob/main/src/vs/editor/contrib/inlineCompletions/test/browser/layout.test.ts
4798 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 { Size2D } from '../../../../common/core/2d/size.js';8import { OffsetRange } from '../../../../common/core/ranges/offsetRange.js';9import { getMaxTowerHeightInAvailableArea } from '../../browser/view/inlineEdits/utils/towersLayout.js';1011suite('Layout - getMaxTowerHeightInAvailableArea', () => {12ensureNoDisposablesAreLeakedInTestSuite();1314test('tower fits within single available area', () => {15const towerHorizontalRange = new OffsetRange(5, 15); // width of 1016const availableTowerAreas = [new Size2D(50, 30)];1718// Should return the available height (30)19assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 30);20});2122test('max height available in area', () => {23const towerHorizontalRange = new OffsetRange(5, 15); // width of 1024const availableTowerAreas = [new Size2D(50, 30)];2526// Should return the available height (30), even if original tower was 4027assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 30);28});2930test('tower extends beyond available width', () => {31const towerHorizontalRange = new OffsetRange(0, 60); // width of 6032const availableTowerAreas = [new Size2D(50, 30)];3334// Should return 0 because tower extends beyond available areas35assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 0);36});3738test('tower fits across multiple available areas', () => {39const towerHorizontalRange = new OffsetRange(10, 40); // width of 3040const availableTowerAreas = [41new Size2D(20, 30),42new Size2D(20, 25),43new Size2D(20, 30)44];4546// Should return the minimum height across overlapping areas (25)47assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 25);48});4950test('min height across overlapping areas', () => {51const towerHorizontalRange = new OffsetRange(10, 40); // width of 3052const availableTowerAreas = [53new Size2D(20, 30),54new Size2D(20, 15), // Shortest area55new Size2D(20, 30)56];5758// Should return the minimum height (15)59assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 15);60});6162test('tower at left edge of available areas', () => {63const towerHorizontalRange = new OffsetRange(0, 10); // width of 1064const availableTowerAreas = [new Size2D(50, 30)];6566// Should return the available height (30)67assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 30);68});6970test('tower at right edge of available areas', () => {71const towerHorizontalRange = new OffsetRange(40, 50); // width of 1072const availableTowerAreas = [new Size2D(50, 30)];7374// Should return the available height (30)75assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 30);76});7778test('tower exactly matches available area', () => {79const towerHorizontalRange = new OffsetRange(0, 50); // width of 5080const availableTowerAreas = [new Size2D(50, 30)];8182// Should return the available height (30)83assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 30);84});8586test('empty available areas', () => {87const towerHorizontalRange = new OffsetRange(0, 10); // width of 1088const availableTowerAreas: Size2D[] = [];8990// Should return 0 for empty areas91assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 0);92});9394test('tower spans exactly two available areas', () => {95const towerHorizontalRange = new OffsetRange(10, 50); // width of 4096const availableTowerAreas = [97new Size2D(30, 25),98new Size2D(30, 25)99];100101// Should return the minimum height across both areas (25)102assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 25);103});104105test('tower starts at boundary between two areas', () => {106const towerHorizontalRange = new OffsetRange(30, 50); // width of 20107const availableTowerAreas = [108new Size2D(30, 25),109new Size2D(30, 25)110];111112// Should return the height of the second area (25)113assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 25);114});115116test('tower with varying height available areas', () => {117const towerHorizontalRange = new OffsetRange(0, 50); // width of 50118const availableTowerAreas = [119new Size2D(10, 30),120new Size2D(10, 15), // Shortest area121new Size2D(10, 25),122new Size2D(10, 30),123new Size2D(10, 40)124];125126// Should return the minimum height (15)127assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 15);128});129130test('tower beyond all available areas to the right', () => {131const towerHorizontalRange = new OffsetRange(100, 110); // width of 10132const availableTowerAreas = [new Size2D(50, 30)];133134// Should return 0 because tower is beyond available areas135assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 0);136});137});138139140