Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/test/common/memento.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 { DisposableStore } from '../../../base/common/lifecycle.js';
8
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../base/test/common/utils.js';
9
import { StorageScope, IStorageService, StorageTarget } from '../../../platform/storage/common/storage.js';
10
import { Memento } from '../../common/memento.js';
11
import { TestStorageService } from './workbenchTestServices.js';
12
13
suite('Memento', () => {
14
const disposables = new DisposableStore();
15
let storage: IStorageService;
16
17
setup(() => {
18
storage = disposables.add(new TestStorageService());
19
Memento.clear(StorageScope.APPLICATION);
20
Memento.clear(StorageScope.PROFILE);
21
Memento.clear(StorageScope.WORKSPACE);
22
});
23
24
teardown(() => {
25
disposables.clear();
26
});
27
28
test('Loading and Saving Memento with Scopes', () => {
29
const myMemento = new Memento('memento.test', storage);
30
31
// Application
32
let memento = myMemento.getMemento(StorageScope.APPLICATION, StorageTarget.MACHINE);
33
memento.foo = [1, 2, 3];
34
let applicationMemento = myMemento.getMemento(StorageScope.APPLICATION, StorageTarget.MACHINE);
35
assert.deepStrictEqual(applicationMemento, memento);
36
37
// Profile
38
memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
39
memento.foo = [4, 5, 6];
40
let profileMemento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
41
assert.deepStrictEqual(profileMemento, memento);
42
43
// Workspace
44
memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);
45
assert(memento);
46
memento.foo = 'Hello World';
47
48
myMemento.saveMemento();
49
50
// Application
51
memento = myMemento.getMemento(StorageScope.APPLICATION, StorageTarget.MACHINE);
52
assert.deepStrictEqual(memento, { foo: [1, 2, 3] });
53
applicationMemento = myMemento.getMemento(StorageScope.APPLICATION, StorageTarget.MACHINE);
54
assert.deepStrictEqual(applicationMemento, memento);
55
56
// Profile
57
memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
58
assert.deepStrictEqual(memento, { foo: [4, 5, 6] });
59
profileMemento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
60
assert.deepStrictEqual(profileMemento, memento);
61
62
// Workspace
63
memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);
64
assert.deepStrictEqual(memento, { foo: 'Hello World' });
65
66
// Assert the Mementos are stored properly in storage
67
assert.deepStrictEqual(JSON.parse(storage.get('memento/memento.test', StorageScope.APPLICATION)!), { foo: [1, 2, 3] });
68
assert.deepStrictEqual(JSON.parse(storage.get('memento/memento.test', StorageScope.PROFILE)!), { foo: [4, 5, 6] });
69
assert.deepStrictEqual(JSON.parse(storage.get('memento/memento.test', StorageScope.WORKSPACE)!), { foo: 'Hello World' });
70
71
// Delete Application
72
memento = myMemento.getMemento(StorageScope.APPLICATION, StorageTarget.MACHINE);
73
delete memento.foo;
74
75
// Delete Profile
76
memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
77
delete memento.foo;
78
79
// Delete Workspace
80
memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);
81
delete memento.foo;
82
83
myMemento.saveMemento();
84
85
// Application
86
memento = myMemento.getMemento(StorageScope.APPLICATION, StorageTarget.MACHINE);
87
assert.deepStrictEqual(memento, {});
88
89
// Profile
90
memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
91
assert.deepStrictEqual(memento, {});
92
93
// Workspace
94
memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);
95
assert.deepStrictEqual(memento, {});
96
97
// Assert the Mementos are also removed from storage
98
assert.strictEqual(storage.get('memento/memento.test', StorageScope.APPLICATION, null!), null);
99
assert.strictEqual(storage.get('memento/memento.test', StorageScope.PROFILE, null!), null);
100
assert.strictEqual(storage.get('memento/memento.test', StorageScope.WORKSPACE, null!), null);
101
});
102
103
test('Save and Load', () => {
104
const myMemento = new Memento('memento.test', storage);
105
106
// Profile
107
let memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
108
memento.foo = [1, 2, 3];
109
110
// Workspace
111
memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);
112
assert(memento);
113
memento.foo = 'Hello World';
114
115
myMemento.saveMemento();
116
117
// Profile
118
memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
119
assert.deepStrictEqual(memento, { foo: [1, 2, 3] });
120
let profileMemento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
121
assert.deepStrictEqual(profileMemento, memento);
122
123
// Workspace
124
memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);
125
assert.deepStrictEqual(memento, { foo: 'Hello World' });
126
127
// Profile
128
memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
129
memento.foo = [4, 5, 6];
130
131
// Workspace
132
memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);
133
assert(memento);
134
memento.foo = 'World Hello';
135
136
myMemento.saveMemento();
137
138
// Profile
139
memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
140
assert.deepStrictEqual(memento, { foo: [4, 5, 6] });
141
profileMemento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
142
assert.deepStrictEqual(profileMemento, memento);
143
144
// Workspace
145
memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);
146
assert.deepStrictEqual(memento, { foo: 'World Hello' });
147
148
// Delete Profile
149
memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
150
delete memento.foo;
151
152
// Delete Workspace
153
memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);
154
delete memento.foo;
155
156
myMemento.saveMemento();
157
158
// Profile
159
memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
160
assert.deepStrictEqual(memento, {});
161
162
// Workspace
163
memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);
164
assert.deepStrictEqual(memento, {});
165
});
166
167
test('Save and Load - 2 Components with same id', () => {
168
const myMemento = new Memento('memento.test', storage);
169
const myMemento2 = new Memento('memento.test', storage);
170
171
// Profile
172
let memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
173
memento.foo = [1, 2, 3];
174
175
memento = myMemento2.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
176
memento.bar = [1, 2, 3];
177
178
// Workspace
179
memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);
180
assert(memento);
181
memento.foo = 'Hello World';
182
183
memento = myMemento2.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);
184
assert(memento);
185
memento.bar = 'Hello World';
186
187
myMemento.saveMemento();
188
myMemento2.saveMemento();
189
190
// Profile
191
memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
192
assert.deepStrictEqual(memento, { foo: [1, 2, 3], bar: [1, 2, 3] });
193
let profileMemento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
194
assert.deepStrictEqual(profileMemento, memento);
195
196
memento = myMemento2.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
197
assert.deepStrictEqual(memento, { foo: [1, 2, 3], bar: [1, 2, 3] });
198
profileMemento = myMemento2.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
199
assert.deepStrictEqual(profileMemento, memento);
200
201
// Workspace
202
memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);
203
assert.deepStrictEqual(memento, { foo: 'Hello World', bar: 'Hello World' });
204
205
memento = myMemento2.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);
206
assert.deepStrictEqual(memento, { foo: 'Hello World', bar: 'Hello World' });
207
});
208
209
test('Clear Memento', () => {
210
let myMemento = new Memento('memento.test', storage);
211
212
// Profile
213
let profileMemento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
214
profileMemento.foo = 'Hello World';
215
216
// Workspace
217
let workspaceMemento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);
218
workspaceMemento.bar = 'Hello World';
219
220
myMemento.saveMemento();
221
222
// Clear
223
storage = disposables.add(new TestStorageService());
224
Memento.clear(StorageScope.PROFILE);
225
Memento.clear(StorageScope.WORKSPACE);
226
227
myMemento = new Memento('memento.test', storage);
228
profileMemento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);
229
workspaceMemento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);
230
231
assert.deepStrictEqual(profileMemento, {});
232
assert.deepStrictEqual(workspaceMemento, {});
233
});
234
235
ensureNoDisposablesAreLeakedInTestSuite();
236
});
237
238