Path: blob/main/src/vs/editor/test/common/services/textResourceConfigurationService.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 { TestConfigurationService } from '../../../../platform/configuration/test/common/testConfigurationService.js';7import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js';8import { IModelService } from '../../../common/services/model.js';9import { ILanguageService } from '../../../common/languages/language.js';10import { IConfigurationValue, IConfigurationService, ConfigurationTarget } from '../../../../platform/configuration/common/configuration.js';11import { TextResourceConfigurationService } from '../../../common/services/textResourceConfigurationService.js';12import { URI } from '../../../../base/common/uri.js';13import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';141516suite('TextResourceConfigurationService - Update', () => {1718const disposables = ensureNoDisposablesAreLeakedInTestSuite();1920let instantiationService: TestInstantiationService;21let configurationValue: IConfigurationValue<any> = {};22let updateArgs: any[];23const configurationService = new class extends TestConfigurationService {24override inspect() {25return configurationValue;26}27override updateValue() {28updateArgs = [...arguments];29return Promise.resolve();30}31}();32let language: string | null = null;33let testObject: TextResourceConfigurationService;3435setup(() => {36instantiationService = disposables.add(new TestInstantiationService());37instantiationService.stub(IModelService, { getModel() { return null; } });38instantiationService.stub(ILanguageService, { guessLanguageIdByFilepathOrFirstLine() { return language; } });39instantiationService.stub(IConfigurationService, configurationService);40testObject = disposables.add(instantiationService.createInstance(TextResourceConfigurationService));41});4243test('updateValue writes without target and overrides when no language is defined', async () => {44const resource = URI.file('someFile');45await testObject.updateValue(resource, 'a', 'b');46assert.deepStrictEqual(updateArgs, ['a', 'b', { resource, overrideIdentifier: undefined }, ConfigurationTarget.USER_LOCAL]);47});4849test('updateValue writes with target and without overrides when no language is defined', async () => {50const resource = URI.file('someFile');51await testObject.updateValue(resource, 'a', 'b', ConfigurationTarget.USER_LOCAL);52assert.deepStrictEqual(updateArgs, ['a', 'b', { resource, overrideIdentifier: undefined }, ConfigurationTarget.USER_LOCAL]);53});5455test('updateValue writes into given memory target without overrides', async () => {56language = 'a';57configurationValue = {58default: { value: '1' },59userLocal: { value: '2' },60workspaceFolder: { value: '1' },61};62const resource = URI.file('someFile');6364await testObject.updateValue(resource, 'a', 'b', ConfigurationTarget.MEMORY);65assert.deepStrictEqual(updateArgs, ['a', 'b', { resource, overrideIdentifier: undefined }, ConfigurationTarget.MEMORY]);66});6768test('updateValue writes into given workspace target without overrides', async () => {69language = 'a';70configurationValue = {71default: { value: '1' },72userLocal: { value: '2' },73workspaceFolder: { value: '2' },74};75const resource = URI.file('someFile');7677await testObject.updateValue(resource, 'a', 'b', ConfigurationTarget.WORKSPACE);78assert.deepStrictEqual(updateArgs, ['a', 'b', { resource, overrideIdentifier: undefined }, ConfigurationTarget.WORKSPACE]);79});8081test('updateValue writes into given user target without overrides', async () => {82language = 'a';83configurationValue = {84default: { value: '1' },85userLocal: { value: '2' },86workspaceFolder: { value: '2' },87};88const resource = URI.file('someFile');8990await testObject.updateValue(resource, 'a', 'b', ConfigurationTarget.USER);91assert.deepStrictEqual(updateArgs, ['a', 'b', { resource, overrideIdentifier: undefined }, ConfigurationTarget.USER]);92});9394test('updateValue writes into given workspace folder target with overrides', async () => {95language = 'a';96configurationValue = {97default: { value: '1' },98userLocal: { value: '2' },99workspaceFolder: { value: '2', override: '1' },100overrideIdentifiers: [language]101};102const resource = URI.file('someFile');103104await testObject.updateValue(resource, 'a', 'b', ConfigurationTarget.WORKSPACE_FOLDER);105assert.deepStrictEqual(updateArgs, ['a', 'b', { resource, overrideIdentifier: language }, ConfigurationTarget.WORKSPACE_FOLDER]);106});107108test('updateValue writes into derived workspace folder target without overrides', async () => {109language = 'a';110configurationValue = {111default: { value: '1' },112userLocal: { value: '2' },113workspaceFolder: { value: '2' },114};115const resource = URI.file('someFile');116117await testObject.updateValue(resource, 'a', 'b');118assert.deepStrictEqual(updateArgs, ['a', 'b', { resource, overrideIdentifier: undefined }, ConfigurationTarget.WORKSPACE_FOLDER]);119});120121test('updateValue writes into derived workspace folder target with overrides', async () => {122language = 'a';123configurationValue = {124default: { value: '1' },125userLocal: { value: '2' },126workspace: { value: '2', override: '1' },127workspaceFolder: { value: '2', override: '2' },128overrideIdentifiers: [language]129};130const resource = URI.file('someFile');131132await testObject.updateValue(resource, 'a', 'b');133assert.deepStrictEqual(updateArgs, ['a', 'b', { resource, overrideIdentifier: language }, ConfigurationTarget.WORKSPACE_FOLDER]);134});135136test('updateValue writes into derived workspace target without overrides', async () => {137language = 'a';138configurationValue = {139default: { value: '1' },140userLocal: { value: '2' },141workspace: { value: '2' },142};143const resource = URI.file('someFile');144145await testObject.updateValue(resource, 'a', 'b');146assert.deepStrictEqual(updateArgs, ['a', 'b', { resource, overrideIdentifier: undefined }, ConfigurationTarget.WORKSPACE]);147});148149test('updateValue writes into derived workspace target with overrides', async () => {150language = 'a';151configurationValue = {152default: { value: '1' },153userLocal: { value: '2' },154workspace: { value: '2', override: '2' },155overrideIdentifiers: [language]156};157const resource = URI.file('someFile');158159await testObject.updateValue(resource, 'a', 'b');160assert.deepStrictEqual(updateArgs, ['a', 'b', { resource, overrideIdentifier: language }, ConfigurationTarget.WORKSPACE]);161});162163test('updateValue writes into derived workspace target with overrides and value defined in folder', async () => {164language = 'a';165configurationValue = {166default: { value: '1', override: '3' },167userLocal: { value: '2' },168workspace: { value: '2', override: '2' },169workspaceFolder: { value: '2' },170overrideIdentifiers: [language]171};172const resource = URI.file('someFile');173174await testObject.updateValue(resource, 'a', 'b');175assert.deepStrictEqual(updateArgs, ['a', 'b', { resource, overrideIdentifier: language }, ConfigurationTarget.WORKSPACE]);176});177178test('updateValue writes into derived user remote target without overrides', async () => {179language = 'a';180configurationValue = {181default: { value: '1' },182userLocal: { value: '2' },183userRemote: { value: '2' },184};185const resource = URI.file('someFile');186187await testObject.updateValue(resource, 'a', 'b');188assert.deepStrictEqual(updateArgs, ['a', 'b', { resource, overrideIdentifier: undefined }, ConfigurationTarget.USER_REMOTE]);189});190191test('updateValue writes into derived user remote target with overrides', async () => {192language = 'a';193configurationValue = {194default: { value: '1' },195userLocal: { value: '2' },196userRemote: { value: '2', override: '3' },197overrideIdentifiers: [language]198};199const resource = URI.file('someFile');200201await testObject.updateValue(resource, 'a', 'b');202assert.deepStrictEqual(updateArgs, ['a', 'b', { resource, overrideIdentifier: language }, ConfigurationTarget.USER_REMOTE]);203});204205test('updateValue writes into derived user remote target with overrides and value defined in workspace', async () => {206language = 'a';207configurationValue = {208default: { value: '1' },209userLocal: { value: '2' },210userRemote: { value: '2', override: '3' },211workspace: { value: '3' },212overrideIdentifiers: [language]213};214const resource = URI.file('someFile');215216await testObject.updateValue(resource, 'a', 'b');217assert.deepStrictEqual(updateArgs, ['a', 'b', { resource, overrideIdentifier: language }, ConfigurationTarget.USER_REMOTE]);218});219220test('updateValue writes into derived user remote target with overrides and value defined in workspace folder', async () => {221language = 'a';222configurationValue = {223default: { value: '1' },224userLocal: { value: '2', override: '1' },225userRemote: { value: '2', override: '3' },226workspace: { value: '3' },227workspaceFolder: { value: '3' },228overrideIdentifiers: [language]229};230const resource = URI.file('someFile');231232await testObject.updateValue(resource, 'a', 'b');233assert.deepStrictEqual(updateArgs, ['a', 'b', { resource, overrideIdentifier: language }, ConfigurationTarget.USER_REMOTE]);234});235236test('updateValue writes into derived user target without overrides', async () => {237language = 'a';238configurationValue = {239default: { value: '1' },240userLocal: { value: '2' },241};242const resource = URI.file('someFile');243244await testObject.updateValue(resource, 'a', 'b');245assert.deepStrictEqual(updateArgs, ['a', 'b', { resource, overrideIdentifier: undefined }, ConfigurationTarget.USER_LOCAL]);246});247248test('updateValue writes into derived user target with overrides', async () => {249language = 'a';250configurationValue = {251default: { value: '1' },252userLocal: { value: '2', override: '3' },253overrideIdentifiers: [language]254};255const resource = URI.file('someFile');256257await testObject.updateValue(resource, 'a', '2');258assert.deepStrictEqual(updateArgs, ['a', '2', { resource, overrideIdentifier: language }, ConfigurationTarget.USER_LOCAL]);259});260261test('updateValue writes into derived user target with overrides and value is defined in remote', async () => {262language = 'a';263configurationValue = {264default: { value: '1' },265userLocal: { value: '2', override: '3' },266userRemote: { value: '3' },267overrideIdentifiers: [language]268};269const resource = URI.file('someFile');270271await testObject.updateValue(resource, 'a', '2');272assert.deepStrictEqual(updateArgs, ['a', '2', { resource, overrideIdentifier: language }, ConfigurationTarget.USER_LOCAL]);273});274275test('updateValue writes into derived user target with overrides and value is defined in workspace', async () => {276language = 'a';277configurationValue = {278default: { value: '1' },279userLocal: { value: '2', override: '3' },280workspaceValue: { value: '3' },281overrideIdentifiers: [language]282};283const resource = URI.file('someFile');284285await testObject.updateValue(resource, 'a', '2');286assert.deepStrictEqual(updateArgs, ['a', '2', { resource, overrideIdentifier: language }, ConfigurationTarget.USER_LOCAL]);287});288289test('updateValue writes into derived user target with overrides and value is defined in workspace folder', async () => {290language = 'a';291configurationValue = {292default: { value: '1', override: '3' },293userLocal: { value: '2', override: '3' },294userRemote: { value: '3' },295workspaceFolderValue: { value: '3' },296overrideIdentifiers: [language]297};298const resource = URI.file('someFile');299300await testObject.updateValue(resource, 'a', '2');301assert.deepStrictEqual(updateArgs, ['a', '2', { resource, overrideIdentifier: language }, ConfigurationTarget.USER_LOCAL]);302});303304test('updateValue writes into derived user target when overridden in default and not in user', async () => {305language = 'a';306configurationValue = {307default: { value: '1', override: '3' },308userLocal: { value: '2' },309overrideIdentifiers: [language]310};311const resource = URI.file('someFile');312313await testObject.updateValue(resource, 'a', '2');314assert.deepStrictEqual(updateArgs, ['a', '2', { resource, overrideIdentifier: language }, ConfigurationTarget.USER_LOCAL]);315});316317test('updateValue when not changed', async () => {318language = 'a';319configurationValue = {320default: { value: '1' },321};322const resource = URI.file('someFile');323324await testObject.updateValue(resource, 'a', 'b');325assert.deepStrictEqual(updateArgs, ['a', 'b', { resource, overrideIdentifier: undefined }, ConfigurationTarget.USER_LOCAL]);326});327328});329330331