Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/platform/configuration/test/common/configuration.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
import assert from 'assert';
6
import { merge, removeFromValueTree } from '../../common/configuration.js';
7
import { mergeChanges } from '../../common/configurationModels.js';
8
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';
9
10
suite('Configuration', () => {
11
12
ensureNoDisposablesAreLeakedInTestSuite();
13
14
test('simple merge', () => {
15
let base = { 'a': 1, 'b': 2 };
16
merge(base, { 'a': 3, 'c': 4 }, true);
17
assert.deepStrictEqual(base, { 'a': 3, 'b': 2, 'c': 4 });
18
base = { 'a': 1, 'b': 2 };
19
merge(base, { 'a': 3, 'c': 4 }, false);
20
assert.deepStrictEqual(base, { 'a': 1, 'b': 2, 'c': 4 });
21
});
22
23
test('object merge', () => {
24
const base = { 'a': { 'b': 1, 'c': true, 'd': 2 } };
25
merge(base, { 'a': { 'b': undefined, 'c': false, 'e': 'a' } }, true);
26
assert.deepStrictEqual(base, { 'a': { 'b': undefined, 'c': false, 'd': 2, 'e': 'a' } });
27
});
28
29
test('array merge', () => {
30
const base = { 'a': ['b', 'c'] };
31
merge(base, { 'a': ['b', 'd'] }, true);
32
assert.deepStrictEqual(base, { 'a': ['b', 'd'] });
33
});
34
35
test('removeFromValueTree: remove a non existing key', () => {
36
const target = { 'a': { 'b': 2 } };
37
38
removeFromValueTree(target, 'c');
39
40
assert.deepStrictEqual(target, { 'a': { 'b': 2 } });
41
});
42
43
test('removeFromValueTree: remove a multi segmented key from an object that has only sub sections of the key', () => {
44
const target = { 'a': { 'b': 2 } };
45
46
removeFromValueTree(target, 'a.b.c');
47
48
assert.deepStrictEqual(target, { 'a': { 'b': 2 } });
49
});
50
51
test('removeFromValueTree: remove a single segmented key', () => {
52
const target = { 'a': 1 };
53
54
removeFromValueTree(target, 'a');
55
56
assert.deepStrictEqual(target, {});
57
});
58
59
test('removeFromValueTree: remove a single segmented key when its value is undefined', () => {
60
const target = { 'a': undefined };
61
62
removeFromValueTree(target, 'a');
63
64
assert.deepStrictEqual(target, {});
65
});
66
67
test('removeFromValueTree: remove a multi segmented key when its value is undefined', () => {
68
const target = { 'a': { 'b': 1 } };
69
70
removeFromValueTree(target, 'a.b');
71
72
assert.deepStrictEqual(target, {});
73
});
74
75
test('removeFromValueTree: remove a multi segmented key when its value is array', () => {
76
const target = { 'a': { 'b': [1] } };
77
78
removeFromValueTree(target, 'a.b');
79
80
assert.deepStrictEqual(target, {});
81
});
82
83
test('removeFromValueTree: remove a multi segmented key first segment value is array', () => {
84
const target = { 'a': [1] };
85
86
removeFromValueTree(target, 'a.0');
87
88
assert.deepStrictEqual(target, { 'a': [1] });
89
});
90
91
test('removeFromValueTree: remove when key is the first segmenet', () => {
92
const target = { 'a': { 'b': 1 } };
93
94
removeFromValueTree(target, 'a');
95
96
assert.deepStrictEqual(target, {});
97
});
98
99
test('removeFromValueTree: remove a multi segmented key when the first node has more values', () => {
100
const target = { 'a': { 'b': { 'c': 1 }, 'd': 1 } };
101
102
removeFromValueTree(target, 'a.b.c');
103
104
assert.deepStrictEqual(target, { 'a': { 'd': 1 } });
105
});
106
107
test('removeFromValueTree: remove a multi segmented key when in between node has more values', () => {
108
const target = { 'a': { 'b': { 'c': { 'd': 1 }, 'd': 1 } } };
109
110
removeFromValueTree(target, 'a.b.c.d');
111
112
assert.deepStrictEqual(target, { 'a': { 'b': { 'd': 1 } } });
113
});
114
115
test('removeFromValueTree: remove a multi segmented key when the last but one node has more values', () => {
116
const target = { 'a': { 'b': { 'c': 1, 'd': 1 } } };
117
118
removeFromValueTree(target, 'a.b.c');
119
120
assert.deepStrictEqual(target, { 'a': { 'b': { 'd': 1 } } });
121
});
122
123
});
124
125
suite('Configuration Changes: Merge', () => {
126
127
ensureNoDisposablesAreLeakedInTestSuite();
128
129
test('merge only keys', () => {
130
const actual = mergeChanges({ keys: ['a', 'b'], overrides: [] }, { keys: ['c', 'd'], overrides: [] });
131
assert.deepStrictEqual(actual, { keys: ['a', 'b', 'c', 'd'], overrides: [] });
132
});
133
134
test('merge only keys with duplicates', () => {
135
const actual = mergeChanges({ keys: ['a', 'b'], overrides: [] }, { keys: ['c', 'd'], overrides: [] }, { keys: ['a', 'd', 'e'], overrides: [] });
136
assert.deepStrictEqual(actual, { keys: ['a', 'b', 'c', 'd', 'e'], overrides: [] });
137
});
138
139
test('merge only overrides', () => {
140
const actual = mergeChanges({ keys: [], overrides: [['a', ['1', '2']]] }, { keys: [], overrides: [['b', ['3', '4']]] });
141
assert.deepStrictEqual(actual, { keys: [], overrides: [['a', ['1', '2']], ['b', ['3', '4']]] });
142
});
143
144
test('merge only overrides with duplicates', () => {
145
const actual = mergeChanges({ keys: [], overrides: [['a', ['1', '2']], ['b', ['5', '4']]] }, { keys: [], overrides: [['b', ['3', '4']]] }, { keys: [], overrides: [['c', ['1', '4']], ['a', ['2', '3']]] });
146
assert.deepStrictEqual(actual, { keys: [], overrides: [['a', ['1', '2', '3']], ['b', ['5', '4', '3']], ['c', ['1', '4']]] });
147
});
148
149
test('merge', () => {
150
const actual = mergeChanges({ keys: ['b', 'b'], overrides: [['a', ['1', '2']], ['b', ['5', '4']]] }, { keys: ['b'], overrides: [['b', ['3', '4']]] }, { keys: ['c', 'a'], overrides: [['c', ['1', '4']], ['a', ['2', '3']]] });
151
assert.deepStrictEqual(actual, { keys: ['b', 'c', 'a'], overrides: [['a', ['1', '2', '3']], ['b', ['5', '4', '3']], ['c', ['1', '4']]] });
152
});
153
154
test('merge single change', () => {
155
const actual = mergeChanges({ keys: ['b', 'b'], overrides: [['a', ['1', '2']], ['b', ['5', '4']]] });
156
assert.deepStrictEqual(actual, { keys: ['b', 'b'], overrides: [['a', ['1', '2']], ['b', ['5', '4']]] });
157
});
158
159
test('merge no changes', () => {
160
const actual = mergeChanges();
161
assert.deepStrictEqual(actual, { keys: [], overrides: [] });
162
});
163
164
});
165
166