Path: blob/main/src/vs/workbench/test/common/memento.test.ts
3296 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 { DisposableStore } from '../../../base/common/lifecycle.js';7import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../base/test/common/utils.js';8import { StorageScope, IStorageService, StorageTarget } from '../../../platform/storage/common/storage.js';9import { Memento } from '../../common/memento.js';10import { TestStorageService } from './workbenchTestServices.js';1112suite('Memento', () => {13const disposables = new DisposableStore();14let storage: IStorageService;1516setup(() => {17storage = disposables.add(new TestStorageService());18Memento.clear(StorageScope.APPLICATION);19Memento.clear(StorageScope.PROFILE);20Memento.clear(StorageScope.WORKSPACE);21});2223teardown(() => {24disposables.clear();25});2627test('Loading and Saving Memento with Scopes', () => {28const myMemento = new Memento('memento.test', storage);2930// Application31let memento = myMemento.getMemento(StorageScope.APPLICATION, StorageTarget.MACHINE);32memento.foo = [1, 2, 3];33let applicationMemento = myMemento.getMemento(StorageScope.APPLICATION, StorageTarget.MACHINE);34assert.deepStrictEqual(applicationMemento, memento);3536// Profile37memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);38memento.foo = [4, 5, 6];39let profileMemento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);40assert.deepStrictEqual(profileMemento, memento);4142// Workspace43memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);44assert(memento);45memento.foo = 'Hello World';4647myMemento.saveMemento();4849// Application50memento = myMemento.getMemento(StorageScope.APPLICATION, StorageTarget.MACHINE);51assert.deepStrictEqual(memento, { foo: [1, 2, 3] });52applicationMemento = myMemento.getMemento(StorageScope.APPLICATION, StorageTarget.MACHINE);53assert.deepStrictEqual(applicationMemento, memento);5455// Profile56memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);57assert.deepStrictEqual(memento, { foo: [4, 5, 6] });58profileMemento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);59assert.deepStrictEqual(profileMemento, memento);6061// Workspace62memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);63assert.deepStrictEqual(memento, { foo: 'Hello World' });6465// Assert the Mementos are stored properly in storage66assert.deepStrictEqual(JSON.parse(storage.get('memento/memento.test', StorageScope.APPLICATION)!), { foo: [1, 2, 3] });67assert.deepStrictEqual(JSON.parse(storage.get('memento/memento.test', StorageScope.PROFILE)!), { foo: [4, 5, 6] });68assert.deepStrictEqual(JSON.parse(storage.get('memento/memento.test', StorageScope.WORKSPACE)!), { foo: 'Hello World' });6970// Delete Application71memento = myMemento.getMemento(StorageScope.APPLICATION, StorageTarget.MACHINE);72delete memento.foo;7374// Delete Profile75memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);76delete memento.foo;7778// Delete Workspace79memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);80delete memento.foo;8182myMemento.saveMemento();8384// Application85memento = myMemento.getMemento(StorageScope.APPLICATION, StorageTarget.MACHINE);86assert.deepStrictEqual(memento, {});8788// Profile89memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);90assert.deepStrictEqual(memento, {});9192// Workspace93memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);94assert.deepStrictEqual(memento, {});9596// Assert the Mementos are also removed from storage97assert.strictEqual(storage.get('memento/memento.test', StorageScope.APPLICATION, null!), null);98assert.strictEqual(storage.get('memento/memento.test', StorageScope.PROFILE, null!), null);99assert.strictEqual(storage.get('memento/memento.test', StorageScope.WORKSPACE, null!), null);100});101102test('Save and Load', () => {103const myMemento = new Memento('memento.test', storage);104105// Profile106let memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);107memento.foo = [1, 2, 3];108109// Workspace110memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);111assert(memento);112memento.foo = 'Hello World';113114myMemento.saveMemento();115116// Profile117memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);118assert.deepStrictEqual(memento, { foo: [1, 2, 3] });119let profileMemento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);120assert.deepStrictEqual(profileMemento, memento);121122// Workspace123memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);124assert.deepStrictEqual(memento, { foo: 'Hello World' });125126// Profile127memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);128memento.foo = [4, 5, 6];129130// Workspace131memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);132assert(memento);133memento.foo = 'World Hello';134135myMemento.saveMemento();136137// Profile138memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);139assert.deepStrictEqual(memento, { foo: [4, 5, 6] });140profileMemento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);141assert.deepStrictEqual(profileMemento, memento);142143// Workspace144memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);145assert.deepStrictEqual(memento, { foo: 'World Hello' });146147// Delete Profile148memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);149delete memento.foo;150151// Delete Workspace152memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);153delete memento.foo;154155myMemento.saveMemento();156157// Profile158memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);159assert.deepStrictEqual(memento, {});160161// Workspace162memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);163assert.deepStrictEqual(memento, {});164});165166test('Save and Load - 2 Components with same id', () => {167const myMemento = new Memento('memento.test', storage);168const myMemento2 = new Memento('memento.test', storage);169170// Profile171let memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);172memento.foo = [1, 2, 3];173174memento = myMemento2.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);175memento.bar = [1, 2, 3];176177// Workspace178memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);179assert(memento);180memento.foo = 'Hello World';181182memento = myMemento2.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);183assert(memento);184memento.bar = 'Hello World';185186myMemento.saveMemento();187myMemento2.saveMemento();188189// Profile190memento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);191assert.deepStrictEqual(memento, { foo: [1, 2, 3], bar: [1, 2, 3] });192let profileMemento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);193assert.deepStrictEqual(profileMemento, memento);194195memento = myMemento2.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);196assert.deepStrictEqual(memento, { foo: [1, 2, 3], bar: [1, 2, 3] });197profileMemento = myMemento2.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);198assert.deepStrictEqual(profileMemento, memento);199200// Workspace201memento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);202assert.deepStrictEqual(memento, { foo: 'Hello World', bar: 'Hello World' });203204memento = myMemento2.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);205assert.deepStrictEqual(memento, { foo: 'Hello World', bar: 'Hello World' });206});207208test('Clear Memento', () => {209let myMemento = new Memento('memento.test', storage);210211// Profile212let profileMemento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);213profileMemento.foo = 'Hello World';214215// Workspace216let workspaceMemento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);217workspaceMemento.bar = 'Hello World';218219myMemento.saveMemento();220221// Clear222storage = disposables.add(new TestStorageService());223Memento.clear(StorageScope.PROFILE);224Memento.clear(StorageScope.WORKSPACE);225226myMemento = new Memento('memento.test', storage);227profileMemento = myMemento.getMemento(StorageScope.PROFILE, StorageTarget.MACHINE);228workspaceMemento = myMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);229230assert.deepStrictEqual(profileMemento, {});231assert.deepStrictEqual(workspaceMemento, {});232});233234ensureNoDisposablesAreLeakedInTestSuite();235});236237238