Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/platform/configuration/test/common/configurationRegistry.test.ts
5275 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import assert from 'assert';
7
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';
8
import { Extensions as ConfigurationExtensions, IConfigurationRegistry } from '../../common/configurationRegistry.js';
9
import { Registry } from '../../../registry/common/platform.js';
10
import { PolicyCategory } from '../../../../base/common/policy.js';
11
12
suite('ConfigurationRegistry', () => {
13
14
ensureNoDisposablesAreLeakedInTestSuite();
15
16
const configurationRegistry = Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration);
17
18
setup(() => reset());
19
teardown(() => reset());
20
21
function reset() {
22
configurationRegistry.deregisterConfigurations(configurationRegistry.getConfigurations());
23
configurationRegistry.deregisterDefaultConfigurations(configurationRegistry.getRegisteredDefaultConfigurations());
24
}
25
26
test('configuration override', async () => {
27
configurationRegistry.registerConfiguration({
28
'id': '_test_default',
29
'type': 'object',
30
'properties': {
31
'config': {
32
'type': 'object',
33
}
34
}
35
});
36
configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config': { a: 1, b: 2 } } }]);
37
configurationRegistry.registerDefaultConfigurations([{ overrides: { '[lang]': { a: 2, c: 3 } } }]);
38
39
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 1, b: 2 });
40
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { a: 2, c: 3 });
41
});
42
43
test('configuration override defaults - prevent overriding default value', async () => {
44
configurationRegistry.registerConfiguration({
45
'id': '_test_default',
46
'type': 'object',
47
'properties': {
48
'config.preventDefaultValueOverride': {
49
'type': 'object',
50
default: { a: 0 },
51
'disallowConfigurationDefault': true
52
}
53
}
54
});
55
56
configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config.preventDefaultValueOverride': { a: 1, b: 2 } } }]);
57
58
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config.preventDefaultValueOverride'].default, { a: 0 });
59
});
60
61
test('configuration override defaults - merges defaults', async () => {
62
configurationRegistry.registerDefaultConfigurations([{ overrides: { '[lang]': { a: 1, b: 2 } } }]);
63
configurationRegistry.registerDefaultConfigurations([{ overrides: { '[lang]': { a: 2, c: 3 } } }]);
64
65
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { a: 2, b: 2, c: 3 });
66
});
67
68
test('configuration defaults - merge object default overrides', async () => {
69
configurationRegistry.registerConfiguration({
70
'id': '_test_default',
71
'type': 'object',
72
'properties': {
73
'config': {
74
'type': 'object',
75
}
76
}
77
});
78
configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config': { a: 1, b: 2 } } }]);
79
configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config': { a: 2, c: 3 } } }]);
80
81
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 2, b: 2, c: 3 });
82
});
83
84
test('registering multiple settings with same policy', async () => {
85
configurationRegistry.registerConfiguration({
86
'id': '_test_default',
87
'type': 'object',
88
'properties': {
89
'policy1': {
90
'type': 'object',
91
policy: {
92
name: 'policy',
93
category: PolicyCategory.Extensions,
94
minimumVersion: '1.0.0',
95
localization: { description: { key: '', value: '' }, }
96
}
97
},
98
'policy2': {
99
'type': 'object',
100
policy: {
101
name: 'policy',
102
category: PolicyCategory.Extensions,
103
minimumVersion: '1.0.0',
104
localization: { description: { key: '', value: '' }, }
105
}
106
}
107
}
108
});
109
const actual = configurationRegistry.getConfigurationProperties();
110
assert.ok(actual['policy1'] !== undefined);
111
assert.ok(actual['policy2'] === undefined);
112
});
113
114
test('configuration defaults - deregister merged object default override', async () => {
115
configurationRegistry.registerConfiguration({
116
'id': '_test_default',
117
'type': 'object',
118
'properties': {
119
'config': {
120
'type': 'object',
121
}
122
}
123
});
124
125
const overrides1 = [{ overrides: { 'config': { a: 1, b: 2 } }, source: { id: 'source1', displayName: 'source1' } }];
126
const overrides2 = [{ overrides: { 'config': { a: 2, c: 3 } }, source: { id: 'source2', displayName: 'source2' } }];
127
128
configurationRegistry.registerDefaultConfigurations(overrides1);
129
configurationRegistry.registerDefaultConfigurations(overrides2);
130
131
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 2, b: 2, c: 3 });
132
133
configurationRegistry.deregisterDefaultConfigurations(overrides2);
134
135
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 1, b: 2 });
136
137
configurationRegistry.deregisterDefaultConfigurations(overrides1);
138
139
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, {});
140
});
141
142
test('configuration defaults - deregister merged object default override without source', async () => {
143
configurationRegistry.registerConfiguration({
144
'id': '_test_default',
145
'type': 'object',
146
'properties': {
147
'config': {
148
'type': 'object',
149
}
150
}
151
});
152
153
const overrides1 = [{ overrides: { 'config': { a: 1, b: 2 } } }];
154
const overrides2 = [{ overrides: { 'config': { a: 2, c: 3 } } }];
155
156
configurationRegistry.registerDefaultConfigurations(overrides1);
157
configurationRegistry.registerDefaultConfigurations(overrides2);
158
159
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 2, b: 2, c: 3 });
160
161
configurationRegistry.deregisterDefaultConfigurations(overrides2);
162
163
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 1, b: 2 });
164
165
configurationRegistry.deregisterDefaultConfigurations(overrides1);
166
167
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, {});
168
});
169
170
test('configuration defaults - deregister merged object default language overrides', async () => {
171
configurationRegistry.registerConfiguration({
172
'id': '_test_default',
173
'type': 'object',
174
'properties': {
175
'config': {
176
'type': 'object',
177
}
178
}
179
});
180
181
const overrides1 = [{ overrides: { '[lang]': { 'config': { a: 1, b: 2 } } }, source: { id: 'source1', displayName: 'source1' } }];
182
const overrides2 = [{ overrides: { '[lang]': { 'config': { a: 2, c: 3 } } }, source: { id: 'source2', displayName: 'source2' } }];
183
184
configurationRegistry.registerDefaultConfigurations(overrides1);
185
configurationRegistry.registerDefaultConfigurations(overrides2);
186
187
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { 'config': { a: 2, b: 2, c: 3 } });
188
189
configurationRegistry.deregisterDefaultConfigurations(overrides2);
190
191
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { 'config': { a: 1, b: 2 } });
192
193
configurationRegistry.deregisterDefaultConfigurations(overrides1);
194
195
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'], undefined);
196
});
197
});
198
199