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 { strictEqual , ok , equal } from 'assert' ;
7+ import { StorageScope } from 'vs/platform/storage/common/storage' ;
8+ import { TestStorageService , TestEnvironmentService } from 'vs/workbench/test/workbenchTestServices' ;
9+ import { StorageService } from 'vs/platform/storage/node/storageService' ;
10+ import { generateUuid } from 'vs/base/common/uuid' ;
11+ import { join } from 'path' ;
12+ import { tmpdir } from 'os' ;
13+ import { mkdirp , del } from 'vs/base/node/pfs' ;
14+ import { NullLogService } from 'vs/platform/log/common/log' ;
15+
16+ suite ( 'StorageService' , ( ) => {
17+
18+ test ( 'Remove Data (global, in-memory)' , ( ) => {
19+ removeData ( StorageScope . GLOBAL ) ;
20+ } ) ;
21+
22+ test ( 'Remove Data (workspace, in-memory)' , ( ) => {
23+ removeData ( StorageScope . WORKSPACE ) ;
24+ } ) ;
25+
26+ function removeData ( scope : StorageScope ) : void {
27+ const storage = new TestStorageService ( ) ;
28+
29+ storage . store ( 'Monaco.IDE.Core.Storage.Test.remove' , 'foobar' , scope ) ;
30+ strictEqual ( 'foobar' , storage . get ( 'Monaco.IDE.Core.Storage.Test.remove' , scope ) ) ;
31+
32+ storage . remove ( 'Monaco.IDE.Core.Storage.Test.remove' , scope ) ;
33+ ok ( ! storage . get ( 'Monaco.IDE.Core.Storage.Test.remove' , scope ) ) ;
34+ }
35+
36+ test ( 'Get Data, Integer, Boolean (global, in-memory)' , ( ) => {
37+ storeData ( StorageScope . GLOBAL ) ;
38+ } ) ;
39+
40+ test ( 'Get Data, Integer, Boolean (workspace, in-memory)' , ( ) => {
41+ storeData ( StorageScope . WORKSPACE ) ;
42+ } ) ;
43+
44+ function storeData ( scope : StorageScope ) : void {
45+ const storage = new TestStorageService ( ) ;
46+
47+ strictEqual ( storage . get ( 'Monaco.IDE.Core.Storage.Test.get' , scope , 'foobar' ) , 'foobar' ) ;
48+ strictEqual ( storage . get ( 'Monaco.IDE.Core.Storage.Test.get' , scope , '' ) , '' ) ;
49+ strictEqual ( storage . get ( 'Monaco.IDE.Core.Storage.Test.getInteger' , scope , 5 ) , 5 ) ;
50+ strictEqual ( storage . get ( 'Monaco.IDE.Core.Storage.Test.getInteger' , scope , 0 ) , 0 ) ;
51+ strictEqual ( storage . get ( 'Monaco.IDE.Core.Storage.Test.getBoolean' , scope , true ) , true ) ;
52+ strictEqual ( storage . get ( 'Monaco.IDE.Core.Storage.Test.getBoolean' , scope , false ) , false ) ;
53+
54+ storage . store ( 'Monaco.IDE.Core.Storage.Test.get' , 'foobar' , scope ) ;
55+ strictEqual ( storage . get ( 'Monaco.IDE.Core.Storage.Test.get' , scope ) , 'foobar' ) ;
56+
57+ storage . store ( 'Monaco.IDE.Core.Storage.Test.get' , '' , scope ) ;
58+ strictEqual ( storage . get ( 'Monaco.IDE.Core.Storage.Test.get' , scope ) , '' ) ;
59+
60+ storage . store ( 'Monaco.IDE.Core.Storage.Test.getInteger' , 5 , scope ) ;
61+ strictEqual ( storage . getInteger ( 'Monaco.IDE.Core.Storage.Test.getInteger' , scope ) , 5 ) ;
62+
63+ storage . store ( 'Monaco.IDE.Core.Storage.Test.getInteger' , 0 , scope ) ;
64+ strictEqual ( storage . getInteger ( 'Monaco.IDE.Core.Storage.Test.getInteger' , scope ) , 0 ) ;
65+
66+ storage . store ( 'Monaco.IDE.Core.Storage.Test.getBoolean' , true , scope ) ;
67+ strictEqual ( storage . getBoolean ( 'Monaco.IDE.Core.Storage.Test.getBoolean' , scope ) , true ) ;
68+
69+ storage . store ( 'Monaco.IDE.Core.Storage.Test.getBoolean' , false , scope ) ;
70+ strictEqual ( storage . getBoolean ( 'Monaco.IDE.Core.Storage.Test.getBoolean' , scope ) , false ) ;
71+
72+ strictEqual ( storage . get ( 'Monaco.IDE.Core.Storage.Test.getDefault' , scope , 'getDefault' ) , 'getDefault' ) ;
73+ strictEqual ( storage . getInteger ( 'Monaco.IDE.Core.Storage.Test.getIntegerDefault' , scope , 5 ) , 5 ) ;
74+ strictEqual ( storage . getBoolean ( 'Monaco.IDE.Core.Storage.Test.getBooleanDefault' , scope , true ) , true ) ;
75+ }
76+
77+ function uniqueStorageDir ( ) : string {
78+ const id = generateUuid ( ) ;
79+
80+ return join ( tmpdir ( ) , 'vsctests' , id , 'storage2' , id ) ;
81+ }
82+
83+ test ( 'Migrate Data' , async ( ) => {
84+ const storageDir = uniqueStorageDir ( ) ;
85+ await mkdirp ( storageDir ) ;
86+
87+ const storage = new StorageService ( join ( storageDir , 'storage.db' ) , new NullLogService ( ) , TestEnvironmentService ) ;
88+ await storage . init ( ) ;
89+
90+ storage . store ( 'bar' , 'foo' , StorageScope . WORKSPACE ) ;
91+ storage . store ( 'barNumber' , 55 , StorageScope . WORKSPACE ) ;
92+ storage . store ( 'barBoolean' , true , StorageScope . GLOBAL ) ;
93+
94+ const newStorageDir = uniqueStorageDir ( ) ;
95+ await mkdirp ( newStorageDir ) ;
96+
97+ await storage . migrate ( newStorageDir ) ;
98+
99+ equal ( storage . get ( 'bar' , StorageScope . WORKSPACE ) , 'foo' ) ;
100+ equal ( storage . getInteger ( 'barNumber' , StorageScope . WORKSPACE ) , 55 ) ;
101+ equal ( storage . getBoolean ( 'barBoolean' , StorageScope . GLOBAL ) , true ) ;
102+
103+ await storage . close ( ) ;
104+ await del ( newStorageDir , tmpdir ( ) ) ;
105+ await del ( storageDir , tmpdir ( ) ) ;
106+ } ) ;
107+ } ) ;
0 commit comments