Path: blob/main/src/vs/workbench/contrib/preferences/test/common/smartSnippetInserter.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 { SmartSnippetInserter } from '../../common/smartSnippetInserter.js';7import { createTextModel } from '../../../../../editor/test/common/testTextModel.js';8import { Position } from '../../../../../editor/common/core/position.js';9import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';1011suite('SmartSnippetInserter', () => {1213function testSmartSnippetInserter(text: string[], runner: (assert: (desiredPos: Position, pos: Position, prepend: string, append: string) => void) => void): void {14const model = createTextModel(text.join('\n'));15runner((desiredPos, pos, prepend, append) => {16const actual = SmartSnippetInserter.insertSnippet(model, desiredPos);17const expected = {18position: pos,19prepend,20append21};22assert.deepStrictEqual(actual, expected);23});24model.dispose();25}2627test('empty text', () => {28testSmartSnippetInserter([29], (assert) => {30assert(new Position(1, 1), new Position(1, 1), '\n[', ']');31});3233testSmartSnippetInserter([34' '35], (assert) => {36assert(new Position(1, 1), new Position(1, 2), '\n[', ']');37assert(new Position(1, 2), new Position(1, 2), '\n[', ']');38});3940testSmartSnippetInserter([41'// just some text'42], (assert) => {43assert(new Position(1, 1), new Position(1, 18), '\n[', ']');44assert(new Position(1, 18), new Position(1, 18), '\n[', ']');45});4647testSmartSnippetInserter([48'// just some text',49''50], (assert) => {51assert(new Position(1, 1), new Position(2, 1), '\n[', ']');52assert(new Position(1, 18), new Position(2, 1), '\n[', ']');53assert(new Position(2, 1), new Position(2, 1), '\n[', ']');54});55});5657test('empty array 1', () => {58testSmartSnippetInserter([59'// just some text',60'[]'61], (assert) => {62assert(new Position(1, 1), new Position(2, 2), '', '');63assert(new Position(2, 1), new Position(2, 2), '', '');64assert(new Position(2, 2), new Position(2, 2), '', '');65assert(new Position(2, 3), new Position(2, 2), '', '');66});67});6869test('empty array 2', () => {70testSmartSnippetInserter([71'// just some text',72'[',73']'74], (assert) => {75assert(new Position(1, 1), new Position(2, 2), '', '');76assert(new Position(2, 1), new Position(2, 2), '', '');77assert(new Position(2, 2), new Position(2, 2), '', '');78assert(new Position(3, 1), new Position(3, 1), '', '');79assert(new Position(3, 2), new Position(3, 1), '', '');80});81});8283test('empty array 3', () => {84testSmartSnippetInserter([85'// just some text',86'[',87'// just some text',88']'89], (assert) => {90assert(new Position(1, 1), new Position(2, 2), '', '');91assert(new Position(2, 1), new Position(2, 2), '', '');92assert(new Position(2, 2), new Position(2, 2), '', '');93assert(new Position(3, 1), new Position(3, 1), '', '');94assert(new Position(3, 2), new Position(3, 1), '', '');95assert(new Position(4, 1), new Position(4, 1), '', '');96assert(new Position(4, 2), new Position(4, 1), '', '');97});98});99100test('one element array 1', () => {101testSmartSnippetInserter([102'// just some text',103'[',104'{}',105']'106], (assert) => {107assert(new Position(1, 1), new Position(2, 2), '', ',');108assert(new Position(2, 1), new Position(2, 2), '', ',');109assert(new Position(2, 2), new Position(2, 2), '', ',');110assert(new Position(3, 1), new Position(3, 1), '', ',');111assert(new Position(3, 2), new Position(3, 1), '', ',');112assert(new Position(3, 3), new Position(3, 3), ',', '');113assert(new Position(4, 1), new Position(4, 1), ',', '');114assert(new Position(4, 2), new Position(4, 1), ',', '');115});116});117118test('two elements array 1', () => {119testSmartSnippetInserter([120'// just some text',121'[',122'{},',123'{}',124']'125], (assert) => {126assert(new Position(1, 1), new Position(2, 2), '', ',');127assert(new Position(2, 1), new Position(2, 2), '', ',');128assert(new Position(2, 2), new Position(2, 2), '', ',');129assert(new Position(3, 1), new Position(3, 1), '', ',');130assert(new Position(3, 2), new Position(3, 1), '', ',');131assert(new Position(3, 3), new Position(3, 3), ',', '');132assert(new Position(3, 4), new Position(3, 4), '', ',');133assert(new Position(4, 1), new Position(4, 1), '', ',');134assert(new Position(4, 2), new Position(4, 1), '', ',');135assert(new Position(4, 3), new Position(4, 3), ',', '');136assert(new Position(5, 1), new Position(5, 1), ',', '');137assert(new Position(5, 2), new Position(5, 1), ',', '');138});139});140141test('two elements array 2', () => {142testSmartSnippetInserter([143'// just some text',144'[',145'{},{}',146']'147], (assert) => {148assert(new Position(1, 1), new Position(2, 2), '', ',');149assert(new Position(2, 1), new Position(2, 2), '', ',');150assert(new Position(2, 2), new Position(2, 2), '', ',');151assert(new Position(3, 1), new Position(3, 1), '', ',');152assert(new Position(3, 2), new Position(3, 1), '', ',');153assert(new Position(3, 3), new Position(3, 3), ',', '');154assert(new Position(3, 4), new Position(3, 4), '', ',');155assert(new Position(3, 5), new Position(3, 4), '', ',');156assert(new Position(3, 6), new Position(3, 6), ',', '');157assert(new Position(4, 1), new Position(4, 1), ',', '');158assert(new Position(4, 2), new Position(4, 1), ',', '');159});160});161162ensureNoDisposablesAreLeakedInTestSuite();163});164165166