storageService.test.ts 5.4 KB
Newer Older
E
Erich Gamma 已提交
1 2 3 4 5 6 7 8
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

'use strict';

import * as assert from 'assert';
J
Johannes Rieken 已提交
9
import { clone } from 'vs/base/common/objects';
10
import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock';
J
Johannes Rieken 已提交
11
import { StorageScope } from 'vs/platform/storage/common/storage';
12
import { IWorkspaceContextService, WorkspaceContextService } from 'vs/platform/workspace/common/workspace';
13
import { StorageService, InMemoryLocalStorage } from 'vs/platform/storage/common/storageService';
14
import { TestWorkspace } from 'vs/platform/workspace/test/common/testWorkspace';
E
Erich Gamma 已提交
15

B
Benjamin Pasero 已提交
16
suite('Workbench StorageSevice', () => {
E
Erich Gamma 已提交
17

18 19 20 21 22 23 24 25
	let contextService, instantiationService;

	setup(() => {
		instantiationService = new TestInstantiationService();
		contextService = instantiationService.stub(IWorkspaceContextService, WorkspaceContextService);
		instantiationService.stub(IWorkspaceContextService, 'getWorkspace', TestWorkspace);
	});

B
Benjamin Pasero 已提交
26
	test('Swap Data with undefined default value', () => {
27
		let s = new StorageService(new InMemoryLocalStorage(), null, contextService.getWorkspace());
E
Erich Gamma 已提交
28

B
Benjamin Pasero 已提交
29 30 31 32 33 34
		s.swap('Monaco.IDE.Core.Storage.Test.swap', 'foobar', 'barfoo');
		assert.strictEqual('foobar', s.get('Monaco.IDE.Core.Storage.Test.swap'));
		s.swap('Monaco.IDE.Core.Storage.Test.swap', 'foobar', 'barfoo');
		assert.strictEqual('barfoo', s.get('Monaco.IDE.Core.Storage.Test.swap'));
		s.swap('Monaco.IDE.Core.Storage.Test.swap', 'foobar', 'barfoo');
		assert.strictEqual('foobar', s.get('Monaco.IDE.Core.Storage.Test.swap'));
E
Erich Gamma 已提交
35 36
	});

B
Benjamin Pasero 已提交
37
	test('Remove Data', () => {
38
		let s = new StorageService(new InMemoryLocalStorage(), null, contextService.getWorkspace());
B
Benjamin Pasero 已提交
39
		s.store('Monaco.IDE.Core.Storage.Test.remove', 'foobar');
40
		assert.strictEqual('foobar', s.get('Monaco.IDE.Core.Storage.Test.remove'));
E
Erich Gamma 已提交
41

B
Benjamin Pasero 已提交
42
		s.remove('Monaco.IDE.Core.Storage.Test.remove');
43
		assert.ok(!s.get('Monaco.IDE.Core.Storage.Test.remove'));
E
Erich Gamma 已提交
44 45
	});

B
Benjamin Pasero 已提交
46
	test('Get Data, Integer, Boolean', () => {
47
		let s = new StorageService(new InMemoryLocalStorage(), null, contextService.getWorkspace());
E
Erich Gamma 已提交
48

B
Benjamin Pasero 已提交
49 50 51 52 53 54
		assert.strictEqual(s.get('Monaco.IDE.Core.Storage.Test.get', StorageScope.GLOBAL, 'foobar'), 'foobar');
		assert.strictEqual(s.get('Monaco.IDE.Core.Storage.Test.get', StorageScope.GLOBAL, ''), '');
		assert.strictEqual(s.get('Monaco.IDE.Core.Storage.Test.getInteger', StorageScope.GLOBAL, 5), 5);
		assert.strictEqual(s.get('Monaco.IDE.Core.Storage.Test.getInteger', StorageScope.GLOBAL, 0), 0);
		assert.strictEqual(s.get('Monaco.IDE.Core.Storage.Test.getBoolean', StorageScope.GLOBAL, true), true);
		assert.strictEqual(s.get('Monaco.IDE.Core.Storage.Test.getBoolean', StorageScope.GLOBAL, false), false);
E
Erich Gamma 已提交
55

B
Benjamin Pasero 已提交
56 57
		s.store('Monaco.IDE.Core.Storage.Test.get', 'foobar');
		assert.strictEqual(s.get('Monaco.IDE.Core.Storage.Test.get'), 'foobar');
E
Erich Gamma 已提交
58

B
Benjamin Pasero 已提交
59 60
		s.store('Monaco.IDE.Core.Storage.Test.get', '');
		assert.strictEqual(s.get('Monaco.IDE.Core.Storage.Test.get'), '');
E
Erich Gamma 已提交
61

B
Benjamin Pasero 已提交
62 63
		s.store('Monaco.IDE.Core.Storage.Test.getInteger', 5);
		assert.strictEqual(s.getInteger('Monaco.IDE.Core.Storage.Test.getInteger'), 5);
E
Erich Gamma 已提交
64

B
Benjamin Pasero 已提交
65 66
		s.store('Monaco.IDE.Core.Storage.Test.getInteger', 0);
		assert.strictEqual(s.getInteger('Monaco.IDE.Core.Storage.Test.getInteger'), 0);
E
Erich Gamma 已提交
67

B
Benjamin Pasero 已提交
68 69
		s.store('Monaco.IDE.Core.Storage.Test.getBoolean', true);
		assert.strictEqual(s.getBoolean('Monaco.IDE.Core.Storage.Test.getBoolean'), true);
E
Erich Gamma 已提交
70

B
Benjamin Pasero 已提交
71 72
		s.store('Monaco.IDE.Core.Storage.Test.getBoolean', false);
		assert.strictEqual(s.getBoolean('Monaco.IDE.Core.Storage.Test.getBoolean'), false);
E
Erich Gamma 已提交
73

B
Benjamin Pasero 已提交
74 75 76
		assert.strictEqual(s.get('Monaco.IDE.Core.Storage.Test.getDefault', StorageScope.GLOBAL, 'getDefault'), 'getDefault');
		assert.strictEqual(s.getInteger('Monaco.IDE.Core.Storage.Test.getIntegerDefault', StorageScope.GLOBAL, 5), 5);
		assert.strictEqual(s.getBoolean('Monaco.IDE.Core.Storage.Test.getBooleanDefault', StorageScope.GLOBAL, true), true);
E
Erich Gamma 已提交
77 78
	});

B
Benjamin Pasero 已提交
79
	test('StorageSevice cleans up when workspace changes', () => {
E
Erich Gamma 已提交
80
		let storageImpl = new InMemoryLocalStorage();
81
		let s = new StorageService(storageImpl, null, contextService.getWorkspace());
E
Erich Gamma 已提交
82

B
Benjamin Pasero 已提交
83 84 85 86
		s.store('key1', 'foobar');
		s.store('key2', 'something');
		s.store('wkey1', 'foo', StorageScope.WORKSPACE);
		s.store('wkey2', 'foo2', StorageScope.WORKSPACE);
E
Erich Gamma 已提交
87

88
		s = new StorageService(storageImpl, null, contextService.getWorkspace());
E
Erich Gamma 已提交
89

B
Benjamin Pasero 已提交
90 91
		assert.strictEqual(s.get('key1', StorageScope.GLOBAL), 'foobar');
		assert.strictEqual(s.get('key1', StorageScope.WORKSPACE, null), null);
E
Erich Gamma 已提交
92

B
Benjamin Pasero 已提交
93 94 95
		assert.strictEqual(s.get('key2', StorageScope.GLOBAL), 'something');
		assert.strictEqual(s.get('wkey1', StorageScope.WORKSPACE), 'foo');
		assert.strictEqual(s.get('wkey2', StorageScope.WORKSPACE), 'foo2');
E
Erich Gamma 已提交
96 97 98

		let ws: any = clone(TestWorkspace);
		ws.uid = new Date().getTime() + 100;
99
		instantiationService.stub(IWorkspaceContextService, 'getWorkspace', ws);
100
		s = new StorageService(storageImpl, null, contextService.getWorkspace());
E
Erich Gamma 已提交
101

B
Benjamin Pasero 已提交
102 103
		assert.strictEqual(s.get('key1', StorageScope.GLOBAL), 'foobar');
		assert.strictEqual(s.get('key1', StorageScope.WORKSPACE, null), null);
E
Erich Gamma 已提交
104

B
Benjamin Pasero 已提交
105 106 107
		assert.strictEqual(s.get('key2', StorageScope.GLOBAL), 'something');
		assert(!s.get('wkey1', StorageScope.WORKSPACE));
		assert(!s.get('wkey2', StorageScope.WORKSPACE));
E
Erich Gamma 已提交
108 109
	});
});