Path: blob/main/src/vs/editor/test/common/modes/languageConfiguration.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 { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';7import { StandardTokenType } from '../../../common/encodedTokenAttributes.js';8import { StandardAutoClosingPairConditional } from '../../../common/languages/languageConfiguration.js';9import { TestLanguageConfigurationService } from './testLanguageConfigurationService.js';1011suite('StandardAutoClosingPairConditional', () => {1213ensureNoDisposablesAreLeakedInTestSuite();1415test('Missing notIn', () => {16const v = new StandardAutoClosingPairConditional({ open: '{', close: '}' });17assert.strictEqual(v.isOK(StandardTokenType.Other), true);18assert.strictEqual(v.isOK(StandardTokenType.Comment), true);19assert.strictEqual(v.isOK(StandardTokenType.String), true);20assert.strictEqual(v.isOK(StandardTokenType.RegEx), true);21});2223test('Empty notIn', () => {24const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: [] });25assert.strictEqual(v.isOK(StandardTokenType.Other), true);26assert.strictEqual(v.isOK(StandardTokenType.Comment), true);27assert.strictEqual(v.isOK(StandardTokenType.String), true);28assert.strictEqual(v.isOK(StandardTokenType.RegEx), true);29});3031test('Invalid notIn', () => {32const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: ['bla'] });33assert.strictEqual(v.isOK(StandardTokenType.Other), true);34assert.strictEqual(v.isOK(StandardTokenType.Comment), true);35assert.strictEqual(v.isOK(StandardTokenType.String), true);36assert.strictEqual(v.isOK(StandardTokenType.RegEx), true);37});3839test('notIn in strings', () => {40const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: ['string'] });41assert.strictEqual(v.isOK(StandardTokenType.Other), true);42assert.strictEqual(v.isOK(StandardTokenType.Comment), true);43assert.strictEqual(v.isOK(StandardTokenType.String), false);44assert.strictEqual(v.isOK(StandardTokenType.RegEx), true);45});4647test('notIn in comments', () => {48const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: ['comment'] });49assert.strictEqual(v.isOK(StandardTokenType.Other), true);50assert.strictEqual(v.isOK(StandardTokenType.Comment), false);51assert.strictEqual(v.isOK(StandardTokenType.String), true);52assert.strictEqual(v.isOK(StandardTokenType.RegEx), true);53});5455test('notIn in regex', () => {56const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: ['regex'] });57assert.strictEqual(v.isOK(StandardTokenType.Other), true);58assert.strictEqual(v.isOK(StandardTokenType.Comment), true);59assert.strictEqual(v.isOK(StandardTokenType.String), true);60assert.strictEqual(v.isOK(StandardTokenType.RegEx), false);61});6263test('notIn in strings nor comments', () => {64const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: ['string', 'comment'] });65assert.strictEqual(v.isOK(StandardTokenType.Other), true);66assert.strictEqual(v.isOK(StandardTokenType.Comment), false);67assert.strictEqual(v.isOK(StandardTokenType.String), false);68assert.strictEqual(v.isOK(StandardTokenType.RegEx), true);69});7071test('notIn in strings nor regex', () => {72const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: ['string', 'regex'] });73assert.strictEqual(v.isOK(StandardTokenType.Other), true);74assert.strictEqual(v.isOK(StandardTokenType.Comment), true);75assert.strictEqual(v.isOK(StandardTokenType.String), false);76assert.strictEqual(v.isOK(StandardTokenType.RegEx), false);77});7879test('notIn in comments nor regex', () => {80const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: ['comment', 'regex'] });81assert.strictEqual(v.isOK(StandardTokenType.Other), true);82assert.strictEqual(v.isOK(StandardTokenType.Comment), false);83assert.strictEqual(v.isOK(StandardTokenType.String), true);84assert.strictEqual(v.isOK(StandardTokenType.RegEx), false);85});8687test('notIn in strings, comments nor regex', () => {88const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: ['string', 'comment', 'regex'] });89assert.strictEqual(v.isOK(StandardTokenType.Other), true);90assert.strictEqual(v.isOK(StandardTokenType.Comment), false);91assert.strictEqual(v.isOK(StandardTokenType.String), false);92assert.strictEqual(v.isOK(StandardTokenType.RegEx), false);93});9495test('language configurations priorities', () => {96const languageConfigurationService = new TestLanguageConfigurationService();97const id = 'testLang1';98const d1 = languageConfigurationService.register(id, { comments: { lineComment: '1' } }, 100);99const d2 = languageConfigurationService.register(id, { comments: { lineComment: '2' } }, 10);100assert.strictEqual(languageConfigurationService.getLanguageConfiguration(id).comments?.lineCommentToken, '1');101d1.dispose();102d2.dispose();103languageConfigurationService.dispose();104});105});106107108