Path: blob/main/src/vs/platform/configuration/test/common/configurationRegistry.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 { Extensions as ConfigurationExtensions, IConfigurationRegistry } from '../../common/configurationRegistry.js';8import { Registry } from '../../../registry/common/platform.js';910suite('ConfigurationRegistry', () => {1112ensureNoDisposablesAreLeakedInTestSuite();1314const configurationRegistry = Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration);1516setup(() => reset());17teardown(() => reset());1819function reset() {20configurationRegistry.deregisterConfigurations(configurationRegistry.getConfigurations());21configurationRegistry.deregisterDefaultConfigurations(configurationRegistry.getRegisteredDefaultConfigurations());22}2324test('configuration override', async () => {25configurationRegistry.registerConfiguration({26'id': '_test_default',27'type': 'object',28'properties': {29'config': {30'type': 'object',31}32}33});34configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config': { a: 1, b: 2 } } }]);35configurationRegistry.registerDefaultConfigurations([{ overrides: { '[lang]': { a: 2, c: 3 } } }]);3637assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 1, b: 2 });38assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { a: 2, c: 3 });39});4041test('configuration override defaults - prevent overriding default value', async () => {42configurationRegistry.registerConfiguration({43'id': '_test_default',44'type': 'object',45'properties': {46'config.preventDefaultValueOverride': {47'type': 'object',48default: { a: 0 },49'disallowConfigurationDefault': true50}51}52});5354configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config.preventDefaultValueOverride': { a: 1, b: 2 } } }]);5556assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config.preventDefaultValueOverride'].default, { a: 0 });57});5859test('configuration override defaults - merges defaults', async () => {60configurationRegistry.registerDefaultConfigurations([{ overrides: { '[lang]': { a: 1, b: 2 } } }]);61configurationRegistry.registerDefaultConfigurations([{ overrides: { '[lang]': { a: 2, c: 3 } } }]);6263assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { a: 2, b: 2, c: 3 });64});6566test('configuration defaults - merge object default overrides', async () => {67configurationRegistry.registerConfiguration({68'id': '_test_default',69'type': 'object',70'properties': {71'config': {72'type': 'object',73}74}75});76configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config': { a: 1, b: 2 } } }]);77configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config': { a: 2, c: 3 } } }]);7879assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 2, b: 2, c: 3 });80});8182test('registering multiple settings with same policy', async () => {83configurationRegistry.registerConfiguration({84'id': '_test_default',85'type': 'object',86'properties': {87'policy1': {88'type': 'object',89policy: {90name: 'policy',91minimumVersion: '1.0.0'92}93},94'policy2': {95'type': 'object',96policy: {97name: 'policy',98minimumVersion: '1.0.0'99}100}101}102});103const actual = configurationRegistry.getConfigurationProperties();104assert.ok(actual['policy1'] !== undefined);105assert.ok(actual['policy2'] === undefined);106});107108test('configuration defaults - deregister merged object default override', async () => {109configurationRegistry.registerConfiguration({110'id': '_test_default',111'type': 'object',112'properties': {113'config': {114'type': 'object',115}116}117});118119const overrides1 = [{ overrides: { 'config': { a: 1, b: 2 } }, source: { id: 'source1', displayName: 'source1' } }];120const overrides2 = [{ overrides: { 'config': { a: 2, c: 3 } }, source: { id: 'source2', displayName: 'source2' } }];121122configurationRegistry.registerDefaultConfigurations(overrides1);123configurationRegistry.registerDefaultConfigurations(overrides2);124125assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 2, b: 2, c: 3 });126127configurationRegistry.deregisterDefaultConfigurations(overrides2);128129assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 1, b: 2 });130131configurationRegistry.deregisterDefaultConfigurations(overrides1);132133assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, {});134});135136test('configuration defaults - deregister merged object default override without source', async () => {137configurationRegistry.registerConfiguration({138'id': '_test_default',139'type': 'object',140'properties': {141'config': {142'type': 'object',143}144}145});146147const overrides1 = [{ overrides: { 'config': { a: 1, b: 2 } } }];148const overrides2 = [{ overrides: { 'config': { a: 2, c: 3 } } }];149150configurationRegistry.registerDefaultConfigurations(overrides1);151configurationRegistry.registerDefaultConfigurations(overrides2);152153assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 2, b: 2, c: 3 });154155configurationRegistry.deregisterDefaultConfigurations(overrides2);156157assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 1, b: 2 });158159configurationRegistry.deregisterDefaultConfigurations(overrides1);160161assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, {});162});163164test('configuration defaults - deregister merged object default language overrides', async () => {165configurationRegistry.registerConfiguration({166'id': '_test_default',167'type': 'object',168'properties': {169'config': {170'type': 'object',171}172}173});174175const overrides1 = [{ overrides: { '[lang]': { 'config': { a: 1, b: 2 } } }, source: { id: 'source1', displayName: 'source1' } }];176const overrides2 = [{ overrides: { '[lang]': { 'config': { a: 2, c: 3 } } }, source: { id: 'source2', displayName: 'source2' } }];177178configurationRegistry.registerDefaultConfigurations(overrides1);179configurationRegistry.registerDefaultConfigurations(overrides2);180181assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { 'config': { a: 2, b: 2, c: 3 } });182183configurationRegistry.deregisterDefaultConfigurations(overrides2);184185assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { 'config': { a: 1, b: 2 } });186187configurationRegistry.deregisterDefaultConfigurations(overrides1);188189assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'], undefined);190});191});192193194