Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/editor/contrib/inlineCompletions/test/browser/getSecondaryEdits.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
import assert from 'assert';
6
import { Position } from '../../../../common/core/position.js';
7
import { getSecondaryEdits } from '../../browser/model/inlineCompletionsModel.js';
8
import { TextEdit, TextReplacement } from '../../../../common/core/edits/textEdit.js';
9
import { createTextModel } from '../../../../test/common/testTextModel.js';
10
import { Range } from '../../../../common/core/range.js';
11
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';
12
import { isDefined } from '../../../../../base/common/types.js';
13
14
suite('getSecondaryEdits', () => {
15
16
ensureNoDisposablesAreLeakedInTestSuite();
17
18
test('basic', async function () {
19
20
const textModel = createTextModel([
21
'function fib(',
22
'function fib('
23
].join('\n'));
24
const positions = [
25
new Position(1, 14),
26
new Position(2, 14)
27
];
28
const primaryEdit = new TextReplacement(new Range(1, 1, 1, 14), 'function fib() {');
29
const secondaryEdits = getSecondaryEdits(textModel, positions, primaryEdit);
30
assert.deepStrictEqual(secondaryEdits, [new TextReplacement(
31
new Range(2, 14, 2, 14),
32
') {'
33
)]);
34
textModel.dispose();
35
});
36
37
test('cursor not on same line as primary edit 1', async function () {
38
39
const textModel = createTextModel([
40
'function fib(',
41
'',
42
'function fib(',
43
''
44
].join('\n'));
45
const positions = [
46
new Position(2, 1),
47
new Position(4, 1)
48
];
49
const primaryEdit = new TextReplacement(new Range(1, 1, 2, 1), [
50
'function fib() {',
51
' return 0;',
52
'}'
53
].join('\n'));
54
const secondaryEdits = getSecondaryEdits(textModel, positions, primaryEdit);
55
assert.deepStrictEqual(TextEdit.fromParallelReplacementsUnsorted(secondaryEdits.filter(isDefined)).toString(textModel.getValue()), '...ction fib(❰\n↦) {\n\t... 0;\n}❱');
56
textModel.dispose();
57
});
58
59
test('cursor not on same line as primary edit 2', async function () {
60
61
const textModel = createTextModel([
62
'class A {',
63
'',
64
'class B {',
65
'',
66
'function f() {}'
67
].join('\n'));
68
const positions = [
69
new Position(2, 1),
70
new Position(4, 1)
71
];
72
const primaryEdit = new TextReplacement(new Range(1, 1, 2, 1), [
73
'class A {',
74
' public x: number = 0;',
75
' public y: number = 0;',
76
'}'
77
].join('\n'));
78
const secondaryEdits = getSecondaryEdits(textModel, positions, primaryEdit);
79
assert.deepStrictEqual(secondaryEdits, [new TextReplacement(
80
new Range(4, 1, 4, 1), [
81
' public x: number = 0;',
82
' public y: number = 0;',
83
'}'
84
].join('\n')
85
)]);
86
textModel.dispose();
87
});
88
});
89
90