Path: blob/main/src/vs/editor/test/common/services/languagesRegistry.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 { URI } from '../../../../base/common/uri.js';7import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';8import { LanguagesRegistry } from '../../../common/services/languagesRegistry.js';910suite('LanguagesRegistry', () => {1112ensureNoDisposablesAreLeakedInTestSuite();1314test('output language does not have a name', () => {15const registry = new LanguagesRegistry(false);1617registry._registerLanguages([{18id: 'outputLangId',19extensions: [],20aliases: [],21mimetypes: ['outputLanguageMimeType'],22}]);2324assert.deepStrictEqual(registry.getSortedRegisteredLanguageNames(), []);2526registry.dispose();27});2829test('language with alias does have a name', () => {30const registry = new LanguagesRegistry(false);3132registry._registerLanguages([{33id: 'langId',34extensions: [],35aliases: ['LangName'],36mimetypes: ['bla'],37}]);3839assert.deepStrictEqual(registry.getSortedRegisteredLanguageNames(), [{ languageName: 'LangName', languageId: 'langId' }]);40assert.deepStrictEqual(registry.getLanguageName('langId'), 'LangName');4142registry.dispose();43});4445test('language without alias gets a name', () => {46const registry = new LanguagesRegistry(false);4748registry._registerLanguages([{49id: 'langId',50extensions: [],51mimetypes: ['bla'],52}]);5354assert.deepStrictEqual(registry.getSortedRegisteredLanguageNames(), [{ languageName: 'langId', languageId: 'langId' }]);55assert.deepStrictEqual(registry.getLanguageName('langId'), 'langId');5657registry.dispose();58});5960test('bug #4360: f# not shown in status bar', () => {61const registry = new LanguagesRegistry(false);6263registry._registerLanguages([{64id: 'langId',65extensions: ['.ext1'],66aliases: ['LangName'],67mimetypes: ['bla'],68}]);6970registry._registerLanguages([{71id: 'langId',72extensions: ['.ext2'],73aliases: [],74mimetypes: ['bla'],75}]);7677assert.deepStrictEqual(registry.getSortedRegisteredLanguageNames(), [{ languageName: 'LangName', languageId: 'langId' }]);78assert.deepStrictEqual(registry.getLanguageName('langId'), 'LangName');7980registry.dispose();81});8283test('issue #5278: Extension cannot override language name anymore', () => {84const registry = new LanguagesRegistry(false);8586registry._registerLanguages([{87id: 'langId',88extensions: ['.ext1'],89aliases: ['LangName'],90mimetypes: ['bla'],91}]);9293registry._registerLanguages([{94id: 'langId',95extensions: ['.ext2'],96aliases: ['BetterLanguageName'],97mimetypes: ['bla'],98}]);99100assert.deepStrictEqual(registry.getSortedRegisteredLanguageNames(), [{ languageName: 'BetterLanguageName', languageId: 'langId' }]);101assert.deepStrictEqual(registry.getLanguageName('langId'), 'BetterLanguageName');102103registry.dispose();104});105106test('mimetypes are generated if necessary', () => {107const registry = new LanguagesRegistry(false);108109registry._registerLanguages([{110id: 'langId'111}]);112113assert.deepStrictEqual(registry.getMimeType('langId'), 'text/x-langId');114115registry.dispose();116});117118test('first mimetype wins', () => {119const registry = new LanguagesRegistry(false);120121registry._registerLanguages([{122id: 'langId',123mimetypes: ['text/langId', 'text/langId2']124}]);125126assert.deepStrictEqual(registry.getMimeType('langId'), 'text/langId');127128registry.dispose();129});130131test('first mimetype wins 2', () => {132const registry = new LanguagesRegistry(false);133134registry._registerLanguages([{135id: 'langId'136}]);137138registry._registerLanguages([{139id: 'langId',140mimetypes: ['text/langId']141}]);142143assert.deepStrictEqual(registry.getMimeType('langId'), 'text/x-langId');144145registry.dispose();146});147148test('aliases', () => {149const registry = new LanguagesRegistry(false);150151registry._registerLanguages([{152id: 'a'153}]);154155assert.deepStrictEqual(registry.getSortedRegisteredLanguageNames(), [{ languageName: 'a', languageId: 'a' }]);156assert.deepStrictEqual(registry.getLanguageIdByLanguageName('a'), 'a');157assert.deepStrictEqual(registry.getLanguageName('a'), 'a');158159registry._registerLanguages([{160id: 'a',161aliases: ['A1', 'A2']162}]);163164assert.deepStrictEqual(registry.getSortedRegisteredLanguageNames(), [{ languageName: 'A1', languageId: 'a' }]);165assert.deepStrictEqual(registry.getLanguageIdByLanguageName('a'), 'a');166assert.deepStrictEqual(registry.getLanguageIdByLanguageName('a1'), 'a');167assert.deepStrictEqual(registry.getLanguageIdByLanguageName('a2'), 'a');168assert.deepStrictEqual(registry.getLanguageName('a'), 'A1');169170registry._registerLanguages([{171id: 'a',172aliases: ['A3', 'A4']173}]);174175assert.deepStrictEqual(registry.getSortedRegisteredLanguageNames(), [{ languageName: 'A3', languageId: 'a' }]);176assert.deepStrictEqual(registry.getLanguageIdByLanguageName('a'), 'a');177assert.deepStrictEqual(registry.getLanguageIdByLanguageName('a1'), 'a');178assert.deepStrictEqual(registry.getLanguageIdByLanguageName('a2'), 'a');179assert.deepStrictEqual(registry.getLanguageIdByLanguageName('a3'), 'a');180assert.deepStrictEqual(registry.getLanguageIdByLanguageName('a4'), 'a');181assert.deepStrictEqual(registry.getLanguageName('a'), 'A3');182183registry.dispose();184});185186test('empty aliases array means no alias', () => {187const registry = new LanguagesRegistry(false);188189registry._registerLanguages([{190id: 'a'191}]);192193assert.deepStrictEqual(registry.getSortedRegisteredLanguageNames(), [{ languageName: 'a', languageId: 'a' }]);194assert.deepStrictEqual(registry.getLanguageIdByLanguageName('a'), 'a');195assert.deepStrictEqual(registry.getLanguageName('a'), 'a');196197registry._registerLanguages([{198id: 'b',199aliases: []200}]);201202assert.deepStrictEqual(registry.getSortedRegisteredLanguageNames(), [{ languageName: 'a', languageId: 'a' }]);203assert.deepStrictEqual(registry.getLanguageIdByLanguageName('a'), 'a');204assert.deepStrictEqual(registry.getLanguageIdByLanguageName('b'), 'b');205assert.deepStrictEqual(registry.getLanguageName('a'), 'a');206assert.deepStrictEqual(registry.getLanguageName('b'), null);207208registry.dispose();209});210211test('extensions', () => {212const registry = new LanguagesRegistry(false);213214registry._registerLanguages([{215id: 'a',216aliases: ['aName'],217extensions: ['aExt']218}]);219220assert.deepStrictEqual(registry.getExtensions('a'), ['aExt']);221222registry._registerLanguages([{223id: 'a',224extensions: ['aExt2']225}]);226227assert.deepStrictEqual(registry.getExtensions('a'), ['aExt', 'aExt2']);228229registry.dispose();230});231232test('extensions of primary language registration come first', () => {233const registry = new LanguagesRegistry(false);234235registry._registerLanguages([{236id: 'a',237extensions: ['aExt3']238}]);239240assert.deepStrictEqual(registry.getExtensions('a')[0], 'aExt3');241242registry._registerLanguages([{243id: 'a',244configuration: URI.file('conf.json'),245extensions: ['aExt']246}]);247248assert.deepStrictEqual(registry.getExtensions('a')[0], 'aExt');249250registry._registerLanguages([{251id: 'a',252extensions: ['aExt2']253}]);254255assert.deepStrictEqual(registry.getExtensions('a')[0], 'aExt');256257registry.dispose();258});259260test('filenames', () => {261const registry = new LanguagesRegistry(false);262263registry._registerLanguages([{264id: 'a',265aliases: ['aName'],266filenames: ['aFilename']267}]);268269assert.deepStrictEqual(registry.getFilenames('a'), ['aFilename']);270271registry._registerLanguages([{272id: 'a',273filenames: ['aFilename2']274}]);275276assert.deepStrictEqual(registry.getFilenames('a'), ['aFilename', 'aFilename2']);277278registry.dispose();279});280281test('configuration', () => {282const registry = new LanguagesRegistry(false);283284registry._registerLanguages([{285id: 'a',286aliases: ['aName'],287configuration: URI.file('/path/to/aFilename')288}]);289290assert.deepStrictEqual(registry.getConfigurationFiles('a'), [URI.file('/path/to/aFilename')]);291assert.deepStrictEqual(registry.getConfigurationFiles('aname'), []);292assert.deepStrictEqual(registry.getConfigurationFiles('aName'), []);293294registry._registerLanguages([{295id: 'a',296configuration: URI.file('/path/to/aFilename2')297}]);298299assert.deepStrictEqual(registry.getConfigurationFiles('a'), [URI.file('/path/to/aFilename'), URI.file('/path/to/aFilename2')]);300assert.deepStrictEqual(registry.getConfigurationFiles('aname'), []);301assert.deepStrictEqual(registry.getConfigurationFiles('aName'), []);302303registry.dispose();304});305});306307308