Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/editor/contrib/inlineCompletions/test/browser/layout.test.ts
4798 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
6
import assert from 'assert';
7
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';
8
import { Size2D } from '../../../../common/core/2d/size.js';
9
import { OffsetRange } from '../../../../common/core/ranges/offsetRange.js';
10
import { getMaxTowerHeightInAvailableArea } from '../../browser/view/inlineEdits/utils/towersLayout.js';
11
12
suite('Layout - getMaxTowerHeightInAvailableArea', () => {
13
ensureNoDisposablesAreLeakedInTestSuite();
14
15
test('tower fits within single available area', () => {
16
const towerHorizontalRange = new OffsetRange(5, 15); // width of 10
17
const availableTowerAreas = [new Size2D(50, 30)];
18
19
// Should return the available height (30)
20
assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 30);
21
});
22
23
test('max height available in area', () => {
24
const towerHorizontalRange = new OffsetRange(5, 15); // width of 10
25
const availableTowerAreas = [new Size2D(50, 30)];
26
27
// Should return the available height (30), even if original tower was 40
28
assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 30);
29
});
30
31
test('tower extends beyond available width', () => {
32
const towerHorizontalRange = new OffsetRange(0, 60); // width of 60
33
const availableTowerAreas = [new Size2D(50, 30)];
34
35
// Should return 0 because tower extends beyond available areas
36
assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 0);
37
});
38
39
test('tower fits across multiple available areas', () => {
40
const towerHorizontalRange = new OffsetRange(10, 40); // width of 30
41
const availableTowerAreas = [
42
new Size2D(20, 30),
43
new Size2D(20, 25),
44
new Size2D(20, 30)
45
];
46
47
// Should return the minimum height across overlapping areas (25)
48
assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 25);
49
});
50
51
test('min height across overlapping areas', () => {
52
const towerHorizontalRange = new OffsetRange(10, 40); // width of 30
53
const availableTowerAreas = [
54
new Size2D(20, 30),
55
new Size2D(20, 15), // Shortest area
56
new Size2D(20, 30)
57
];
58
59
// Should return the minimum height (15)
60
assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 15);
61
});
62
63
test('tower at left edge of available areas', () => {
64
const towerHorizontalRange = new OffsetRange(0, 10); // width of 10
65
const availableTowerAreas = [new Size2D(50, 30)];
66
67
// Should return the available height (30)
68
assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 30);
69
});
70
71
test('tower at right edge of available areas', () => {
72
const towerHorizontalRange = new OffsetRange(40, 50); // width of 10
73
const availableTowerAreas = [new Size2D(50, 30)];
74
75
// Should return the available height (30)
76
assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 30);
77
});
78
79
test('tower exactly matches available area', () => {
80
const towerHorizontalRange = new OffsetRange(0, 50); // width of 50
81
const availableTowerAreas = [new Size2D(50, 30)];
82
83
// Should return the available height (30)
84
assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 30);
85
});
86
87
test('empty available areas', () => {
88
const towerHorizontalRange = new OffsetRange(0, 10); // width of 10
89
const availableTowerAreas: Size2D[] = [];
90
91
// Should return 0 for empty areas
92
assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 0);
93
});
94
95
test('tower spans exactly two available areas', () => {
96
const towerHorizontalRange = new OffsetRange(10, 50); // width of 40
97
const availableTowerAreas = [
98
new Size2D(30, 25),
99
new Size2D(30, 25)
100
];
101
102
// Should return the minimum height across both areas (25)
103
assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 25);
104
});
105
106
test('tower starts at boundary between two areas', () => {
107
const towerHorizontalRange = new OffsetRange(30, 50); // width of 20
108
const availableTowerAreas = [
109
new Size2D(30, 25),
110
new Size2D(30, 25)
111
];
112
113
// Should return the height of the second area (25)
114
assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 25);
115
});
116
117
test('tower with varying height available areas', () => {
118
const towerHorizontalRange = new OffsetRange(0, 50); // width of 50
119
const availableTowerAreas = [
120
new Size2D(10, 30),
121
new Size2D(10, 15), // Shortest area
122
new Size2D(10, 25),
123
new Size2D(10, 30),
124
new Size2D(10, 40)
125
];
126
127
// Should return the minimum height (15)
128
assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 15);
129
});
130
131
test('tower beyond all available areas to the right', () => {
132
const towerHorizontalRange = new OffsetRange(100, 110); // width of 10
133
const availableTowerAreas = [new Size2D(50, 30)];
134
135
// Should return 0 because tower is beyond available areas
136
assert.strictEqual(getMaxTowerHeightInAvailableArea(towerHorizontalRange, availableTowerAreas), 0);
137
});
138
});
139
140