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
3296 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
11
suite('ConfigurationRegistry', () => {
12
13
ensureNoDisposablesAreLeakedInTestSuite();
14
15
const configurationRegistry = Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration);
16
17
setup(() => reset());
18
teardown(() => reset());
19
20
function reset() {
21
configurationRegistry.deregisterConfigurations(configurationRegistry.getConfigurations());
22
configurationRegistry.deregisterDefaultConfigurations(configurationRegistry.getRegisteredDefaultConfigurations());
23
}
24
25
test('configuration override', async () => {
26
configurationRegistry.registerConfiguration({
27
'id': '_test_default',
28
'type': 'object',
29
'properties': {
30
'config': {
31
'type': 'object',
32
}
33
}
34
});
35
configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config': { a: 1, b: 2 } } }]);
36
configurationRegistry.registerDefaultConfigurations([{ overrides: { '[lang]': { a: 2, c: 3 } } }]);
37
38
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 1, b: 2 });
39
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { a: 2, c: 3 });
40
});
41
42
test('configuration override defaults - prevent overriding default value', async () => {
43
configurationRegistry.registerConfiguration({
44
'id': '_test_default',
45
'type': 'object',
46
'properties': {
47
'config.preventDefaultValueOverride': {
48
'type': 'object',
49
default: { a: 0 },
50
'disallowConfigurationDefault': true
51
}
52
}
53
});
54
55
configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config.preventDefaultValueOverride': { a: 1, b: 2 } } }]);
56
57
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config.preventDefaultValueOverride'].default, { a: 0 });
58
});
59
60
test('configuration override defaults - merges defaults', async () => {
61
configurationRegistry.registerDefaultConfigurations([{ overrides: { '[lang]': { a: 1, b: 2 } } }]);
62
configurationRegistry.registerDefaultConfigurations([{ overrides: { '[lang]': { a: 2, c: 3 } } }]);
63
64
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { a: 2, b: 2, c: 3 });
65
});
66
67
test('configuration defaults - merge object default overrides', async () => {
68
configurationRegistry.registerConfiguration({
69
'id': '_test_default',
70
'type': 'object',
71
'properties': {
72
'config': {
73
'type': 'object',
74
}
75
}
76
});
77
configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config': { a: 1, b: 2 } } }]);
78
configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config': { a: 2, c: 3 } } }]);
79
80
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 2, b: 2, c: 3 });
81
});
82
83
test('registering multiple settings with same policy', async () => {
84
configurationRegistry.registerConfiguration({
85
'id': '_test_default',
86
'type': 'object',
87
'properties': {
88
'policy1': {
89
'type': 'object',
90
policy: {
91
name: 'policy',
92
minimumVersion: '1.0.0'
93
}
94
},
95
'policy2': {
96
'type': 'object',
97
policy: {
98
name: 'policy',
99
minimumVersion: '1.0.0'
100
}
101
}
102
}
103
});
104
const actual = configurationRegistry.getConfigurationProperties();
105
assert.ok(actual['policy1'] !== undefined);
106
assert.ok(actual['policy2'] === undefined);
107
});
108
109
test('configuration defaults - deregister merged object default override', async () => {
110
configurationRegistry.registerConfiguration({
111
'id': '_test_default',
112
'type': 'object',
113
'properties': {
114
'config': {
115
'type': 'object',
116
}
117
}
118
});
119
120
const overrides1 = [{ overrides: { 'config': { a: 1, b: 2 } }, source: { id: 'source1', displayName: 'source1' } }];
121
const overrides2 = [{ overrides: { 'config': { a: 2, c: 3 } }, source: { id: 'source2', displayName: 'source2' } }];
122
123
configurationRegistry.registerDefaultConfigurations(overrides1);
124
configurationRegistry.registerDefaultConfigurations(overrides2);
125
126
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 2, b: 2, c: 3 });
127
128
configurationRegistry.deregisterDefaultConfigurations(overrides2);
129
130
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 1, b: 2 });
131
132
configurationRegistry.deregisterDefaultConfigurations(overrides1);
133
134
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, {});
135
});
136
137
test('configuration defaults - deregister merged object default override without source', async () => {
138
configurationRegistry.registerConfiguration({
139
'id': '_test_default',
140
'type': 'object',
141
'properties': {
142
'config': {
143
'type': 'object',
144
}
145
}
146
});
147
148
const overrides1 = [{ overrides: { 'config': { a: 1, b: 2 } } }];
149
const overrides2 = [{ overrides: { 'config': { a: 2, c: 3 } } }];
150
151
configurationRegistry.registerDefaultConfigurations(overrides1);
152
configurationRegistry.registerDefaultConfigurations(overrides2);
153
154
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 2, b: 2, c: 3 });
155
156
configurationRegistry.deregisterDefaultConfigurations(overrides2);
157
158
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 1, b: 2 });
159
160
configurationRegistry.deregisterDefaultConfigurations(overrides1);
161
162
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, {});
163
});
164
165
test('configuration defaults - deregister merged object default language overrides', async () => {
166
configurationRegistry.registerConfiguration({
167
'id': '_test_default',
168
'type': 'object',
169
'properties': {
170
'config': {
171
'type': 'object',
172
}
173
}
174
});
175
176
const overrides1 = [{ overrides: { '[lang]': { 'config': { a: 1, b: 2 } } }, source: { id: 'source1', displayName: 'source1' } }];
177
const overrides2 = [{ overrides: { '[lang]': { 'config': { a: 2, c: 3 } } }, source: { id: 'source2', displayName: 'source2' } }];
178
179
configurationRegistry.registerDefaultConfigurations(overrides1);
180
configurationRegistry.registerDefaultConfigurations(overrides2);
181
182
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { 'config': { a: 2, b: 2, c: 3 } });
183
184
configurationRegistry.deregisterDefaultConfigurations(overrides2);
185
186
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { 'config': { a: 1, b: 2 } });
187
188
configurationRegistry.deregisterDefaultConfigurations(overrides1);
189
190
assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'], undefined);
191
});
192
});
193
194