Path: blob/main/src/vs/platform/configuration/test/common/configurationRegistry.test.ts
5275 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';9import { PolicyCategory } from '../../../../base/common/policy.js';1011suite('ConfigurationRegistry', () => {1213ensureNoDisposablesAreLeakedInTestSuite();1415const configurationRegistry = Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration);1617setup(() => reset());18teardown(() => reset());1920function reset() {21configurationRegistry.deregisterConfigurations(configurationRegistry.getConfigurations());22configurationRegistry.deregisterDefaultConfigurations(configurationRegistry.getRegisteredDefaultConfigurations());23}2425test('configuration override', async () => {26configurationRegistry.registerConfiguration({27'id': '_test_default',28'type': 'object',29'properties': {30'config': {31'type': 'object',32}33}34});35configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config': { a: 1, b: 2 } } }]);36configurationRegistry.registerDefaultConfigurations([{ overrides: { '[lang]': { a: 2, c: 3 } } }]);3738assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 1, b: 2 });39assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { a: 2, c: 3 });40});4142test('configuration override defaults - prevent overriding default value', async () => {43configurationRegistry.registerConfiguration({44'id': '_test_default',45'type': 'object',46'properties': {47'config.preventDefaultValueOverride': {48'type': 'object',49default: { a: 0 },50'disallowConfigurationDefault': true51}52}53});5455configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config.preventDefaultValueOverride': { a: 1, b: 2 } } }]);5657assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config.preventDefaultValueOverride'].default, { a: 0 });58});5960test('configuration override defaults - merges defaults', async () => {61configurationRegistry.registerDefaultConfigurations([{ overrides: { '[lang]': { a: 1, b: 2 } } }]);62configurationRegistry.registerDefaultConfigurations([{ overrides: { '[lang]': { a: 2, c: 3 } } }]);6364assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { a: 2, b: 2, c: 3 });65});6667test('configuration defaults - merge object default overrides', async () => {68configurationRegistry.registerConfiguration({69'id': '_test_default',70'type': 'object',71'properties': {72'config': {73'type': 'object',74}75}76});77configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config': { a: 1, b: 2 } } }]);78configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config': { a: 2, c: 3 } } }]);7980assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 2, b: 2, c: 3 });81});8283test('registering multiple settings with same policy', async () => {84configurationRegistry.registerConfiguration({85'id': '_test_default',86'type': 'object',87'properties': {88'policy1': {89'type': 'object',90policy: {91name: 'policy',92category: PolicyCategory.Extensions,93minimumVersion: '1.0.0',94localization: { description: { key: '', value: '' }, }95}96},97'policy2': {98'type': 'object',99policy: {100name: 'policy',101category: PolicyCategory.Extensions,102minimumVersion: '1.0.0',103localization: { description: { key: '', value: '' }, }104}105}106}107});108const actual = configurationRegistry.getConfigurationProperties();109assert.ok(actual['policy1'] !== undefined);110assert.ok(actual['policy2'] === undefined);111});112113test('configuration defaults - deregister merged object default override', async () => {114configurationRegistry.registerConfiguration({115'id': '_test_default',116'type': 'object',117'properties': {118'config': {119'type': 'object',120}121}122});123124const overrides1 = [{ overrides: { 'config': { a: 1, b: 2 } }, source: { id: 'source1', displayName: 'source1' } }];125const overrides2 = [{ overrides: { 'config': { a: 2, c: 3 } }, source: { id: 'source2', displayName: 'source2' } }];126127configurationRegistry.registerDefaultConfigurations(overrides1);128configurationRegistry.registerDefaultConfigurations(overrides2);129130assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 2, b: 2, c: 3 });131132configurationRegistry.deregisterDefaultConfigurations(overrides2);133134assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 1, b: 2 });135136configurationRegistry.deregisterDefaultConfigurations(overrides1);137138assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, {});139});140141test('configuration defaults - deregister merged object default override without source', async () => {142configurationRegistry.registerConfiguration({143'id': '_test_default',144'type': 'object',145'properties': {146'config': {147'type': 'object',148}149}150});151152const overrides1 = [{ overrides: { 'config': { a: 1, b: 2 } } }];153const overrides2 = [{ overrides: { 'config': { a: 2, c: 3 } } }];154155configurationRegistry.registerDefaultConfigurations(overrides1);156configurationRegistry.registerDefaultConfigurations(overrides2);157158assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 2, b: 2, c: 3 });159160configurationRegistry.deregisterDefaultConfigurations(overrides2);161162assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 1, b: 2 });163164configurationRegistry.deregisterDefaultConfigurations(overrides1);165166assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, {});167});168169test('configuration defaults - deregister merged object default language overrides', async () => {170configurationRegistry.registerConfiguration({171'id': '_test_default',172'type': 'object',173'properties': {174'config': {175'type': 'object',176}177}178});179180const overrides1 = [{ overrides: { '[lang]': { 'config': { a: 1, b: 2 } } }, source: { id: 'source1', displayName: 'source1' } }];181const overrides2 = [{ overrides: { '[lang]': { 'config': { a: 2, c: 3 } } }, source: { id: 'source2', displayName: 'source2' } }];182183configurationRegistry.registerDefaultConfigurations(overrides1);184configurationRegistry.registerDefaultConfigurations(overrides2);185186assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { 'config': { a: 2, b: 2, c: 3 } });187188configurationRegistry.deregisterDefaultConfigurations(overrides2);189190assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { 'config': { a: 1, b: 2 } });191192configurationRegistry.deregisterDefaultConfigurations(overrides1);193194assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'], undefined);195});196});197198199