Path: blob/main/src/vs/editor/contrib/inlineCompletions/test/browser/getSecondaryEdits.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*--------------------------------------------------------------------------------------------*/4import assert from 'assert';5import { Position } from '../../../../common/core/position.js';6import { getSecondaryEdits } from '../../browser/model/inlineCompletionsModel.js';7import { TextEdit, TextReplacement } from '../../../../common/core/edits/textEdit.js';8import { createTextModel } from '../../../../test/common/testTextModel.js';9import { Range } from '../../../../common/core/range.js';10import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';11import { isDefined } from '../../../../../base/common/types.js';1213suite('getSecondaryEdits', () => {1415ensureNoDisposablesAreLeakedInTestSuite();1617test('basic', async function () {1819const textModel = createTextModel([20'function fib(',21'function fib('22].join('\n'));23const positions = [24new Position(1, 14),25new Position(2, 14)26];27const primaryEdit = new TextReplacement(new Range(1, 1, 1, 14), 'function fib() {');28const secondaryEdits = getSecondaryEdits(textModel, positions, primaryEdit);29assert.deepStrictEqual(secondaryEdits, [new TextReplacement(30new Range(2, 14, 2, 14),31') {'32)]);33textModel.dispose();34});3536test('cursor not on same line as primary edit 1', async function () {3738const textModel = createTextModel([39'function fib(',40'',41'function fib(',42''43].join('\n'));44const positions = [45new Position(2, 1),46new Position(4, 1)47];48const primaryEdit = new TextReplacement(new Range(1, 1, 2, 1), [49'function fib() {',50' return 0;',51'}'52].join('\n'));53const secondaryEdits = getSecondaryEdits(textModel, positions, primaryEdit);54assert.deepStrictEqual(TextEdit.fromParallelReplacementsUnsorted(secondaryEdits.filter(isDefined)).toString(textModel.getValue()), '...ction fib(❰\n↦) {\n\t... 0;\n}❱');55textModel.dispose();56});5758test('cursor not on same line as primary edit 2', async function () {5960const textModel = createTextModel([61'class A {',62'',63'class B {',64'',65'function f() {}'66].join('\n'));67const positions = [68new Position(2, 1),69new Position(4, 1)70];71const primaryEdit = new TextReplacement(new Range(1, 1, 2, 1), [72'class A {',73' public x: number = 0;',74' public y: number = 0;',75'}'76].join('\n'));77const secondaryEdits = getSecondaryEdits(textModel, positions, primaryEdit);78assert.deepStrictEqual(secondaryEdits, [new TextReplacement(79new Range(4, 1, 4, 1), [80' public x: number = 0;',81' public y: number = 0;',82'}'83].join('\n')84)]);85textModel.dispose();86});87});888990