@@ -10,117 +10,195 @@ class ConcreteStorage extends ArrayStorage <string> {
10
10
}
11
11
}
12
12
13
+ /**
14
+ * @type {IStorage<any> }
15
+ */
16
+ const getStorageInstance = ( ) : IStorage < any > => {
17
+ const storage : IStorage < any > = new ConcreteStorage ( ) ;
18
+
19
+ storage . initialize ( ) ;
20
+
21
+ return storage ;
22
+ } ;
23
+
13
24
describe ( 'ArrayStorage' , ( ) => {
25
+ const storageKey : number = 0 ;
26
+ const storageValue : string = 'foo' ;
27
+
28
+ let storage : IStorage < any > ;
29
+
14
30
describe ( 'initialize (...args: any[]): void' , ( ) => {
15
- it ( 'should throws an error when storage isn\'t initialized' , ( ) => {
16
- const storage : IStorage < string > = new ConcreteStorage ( ) ;
31
+ const expectedError : ErrorConstructor = Error ;
32
+
33
+ let testFunc : ( ) => void ;
17
34
18
- assert . throws ( ( ) => storage . set ( 0 , 'foo' ) , Error ) ;
35
+ before ( ( ) => {
36
+ storage = new ConcreteStorage ( ) ;
37
+ testFunc = ( ) => storage . set ( storageKey , storageValue ) ;
38
+ } ) ;
39
+
40
+ it ( 'should throws an error when storage isn\'t initialized' , ( ) => {
41
+ assert . throws ( testFunc , expectedError ) ;
19
42
} ) ;
20
43
} ) ;
21
44
22
45
describe ( 'getStorage (): T[]' , ( ) => {
23
- it ( 'should returns storage' , ( ) => {
24
- const storage : IStorage < string > = new ConcreteStorage ( ) ;
46
+ const expectedInstanceOf : ArrayConstructor = Array ;
47
+
48
+ let arrayStorage : string [ ] ;
49
+
50
+ before ( ( ) => {
51
+ storage = getStorageInstance ( ) ;
25
52
26
- storage . initialize ( ) ;
53
+ arrayStorage = storage . getStorage ( ) ;
54
+ } ) ;
27
55
28
- assert . instanceOf ( storage . getStorage ( ) , Array ) ;
56
+ it ( 'should returns storage' , ( ) => {
57
+ assert . instanceOf ( arrayStorage , expectedInstanceOf ) ;
29
58
} ) ;
30
59
} ) ;
31
60
32
61
describe ( 'get (key: number): T' , ( ) => {
33
- it ( 'should returns value from storage by key ', ( ) => {
34
- const storage : IStorage < string > = new ConcreteStorage ( ) ;
62
+ describe ( 'variant #1: value exist ', ( ) => {
63
+ const expectedValue : string = storageValue ;
35
64
36
- storage . initialize ( ) ;
37
- storage . set ( 0 , 'foo' ) ;
65
+ let value : string ;
38
66
39
- assert . equal ( storage . get ( 0 ) , 'foo' ) ;
67
+ before ( ( ) => {
68
+ storage = getStorageInstance ( ) ;
69
+ storage . set ( storageKey , storageValue ) ;
70
+
71
+ value = storage . get ( storageKey ) ;
72
+ } ) ;
73
+
74
+ it ( 'should returns value from storage by key' , ( ) => {
75
+ assert . equal ( value , expectedValue ) ;
76
+ } ) ;
40
77
} ) ;
41
78
42
- it ( 'should throw an error if value isn\'t exist' , ( ) => {
43
- const storage : IStorage < string > = new ConcreteStorage ( ) ;
79
+ describe ( 'variant #2: value isn\'t exist' , ( ) => {
80
+ const expectedError : ErrorConstructor = Error ;
81
+
82
+ let testFunc : ( ) => void ;
44
83
45
- storage . initialize ( ) ;
84
+ before ( ( ) => {
85
+ storage = getStorageInstance ( ) ;
46
86
47
- assert . throws ( ( ) => storage . get ( 0 ) , Error ) ;
87
+ testFunc = ( ) => storage . get ( storageKey ) ;
88
+ } ) ;
89
+
90
+ it ( 'should throw an error' , ( ) => {
91
+ assert . throws ( testFunc , expectedError ) ;
92
+ } ) ;
48
93
} ) ;
49
94
} ) ;
50
95
51
96
describe ( 'getLength (): number' , ( ) => {
52
- it ( 'should returns length of storage' , ( ) => {
53
- const storage : IStorage < string > = new ConcreteStorage ( ) ;
97
+ const expectedStorageLength : number = 1 ;
98
+
99
+ let storageLength : number ;
54
100
55
- storage . initialize ( ) ;
56
- storage . set ( 0 , 'foo' ) ;
101
+ before ( ( ) => {
102
+ storage = getStorageInstance ( ) ;
103
+ storage . set ( storageKey , storageValue ) ;
57
104
58
- assert . equal ( storage . getLength ( ) , 1 ) ;
105
+ storageLength = storage . getLength ( ) ;
106
+ } ) ;
107
+
108
+ it ( 'should returns length of storage' , ( ) => {
109
+ assert . equal ( storageLength , expectedStorageLength ) ;
59
110
} ) ;
60
111
} ) ;
61
112
62
113
describe ( 'getKeyOf (value: T): number | null' , ( ) => {
63
- it ( 'should returns key of string value' , ( ) => {
64
- const storage : IStorage < string > = new ConcreteStorage ( ) ;
114
+ let key : string | number | null ;
65
115
66
- storage . initialize ( ) ;
67
- storage . set ( 0 , 'foo' ) ;
116
+ describe ( 'variant #1' , ( ) => {
117
+ before ( ( ) => {
118
+ storage = getStorageInstance ( ) ;
119
+ storage . set ( storageKey , storageValue ) ;
120
+
121
+ key = storage . getKeyOf ( storageValue ) ;
122
+ } ) ;
68
123
69
- assert . equal ( storage . getKeyOf ( 'foo' ) , 0 ) ;
124
+ it ( 'should returns key of string value' , ( ) => {
125
+ assert . equal ( key , storageKey ) ;
126
+ } ) ;
70
127
} ) ;
71
128
72
- it ( 'should returns key of object if objects in `set` and `get` are two linked objects' , ( ) => {
73
- const storage : IStorage < Object > = new ConcreteStorage ( ) ;
129
+ describe ( 'variant #2' , ( ) => {
74
130
const object : Object = {
75
131
foo : 'bar'
76
132
} ;
77
133
78
- storage . initialize ( ) ;
79
- storage . set ( 0 , object ) ;
134
+ before ( ( ) => {
135
+ storage = getStorageInstance ( ) ;
136
+ storage . set ( storageKey , object ) ;
80
137
81
- assert . equal ( storage . getKeyOf ( object ) , 0 ) ;
82
- } ) ;
138
+ key = storage . getKeyOf ( object ) ;
139
+ } ) ;
83
140
84
- it ( 'should return `null` if objects in `set` and `get` are two equal objects' , ( ) => {
85
- const storage : IStorage < Object > = new ConcreteStorage ( ) ;
141
+ it ( 'should returns key of object if objects in `set` and `get` are two same objects' , ( ) => {
142
+ assert . equal ( key , storageKey ) ;
143
+ } ) ;
144
+ } ) ;
86
145
87
- storage . initialize ( ) ;
88
- storage . set ( 0 , {
146
+ describe ( 'variant #3' , ( ) => {
147
+ const expectedKey : null = null ;
148
+ const object : Object = {
89
149
foo : 'bar'
150
+ } ;
151
+
152
+ before ( ( ) => {
153
+ storage = getStorageInstance ( ) ;
154
+ storage . set ( storageKey , object ) ;
155
+
156
+ key = storage . getKeyOf ( { ...object } ) ;
90
157
} ) ;
91
158
92
- assert . equal ( storage . getKeyOf ( {
93
- foo : 'bar'
94
- } ) , null ) ;
159
+ it ( 'should return `null` if objects in `set` and `get` are two different objects' , ( ) => {
160
+ assert . equal ( key , expectedKey ) ;
161
+ } ) ;
95
162
} ) ;
96
163
} ) ;
97
164
98
165
describe ( 'set (key: number, value: T): void' , ( ) => {
99
- it ( 'should set value to the storage' , ( ) => {
100
- const storage : IStorage < string > = new ConcreteStorage ( ) ;
166
+ let value : string ;
101
167
102
- storage . initialize ( ) ;
103
- storage . set ( 0 , 'foo' ) ;
168
+ before ( ( ) => {
169
+ storage = getStorageInstance ( ) ;
170
+ storage . set ( storageKey , storageValue ) ;
104
171
105
- assert . equal ( storage . get ( 0 ) , 'foo' ) ;
106
- assert . equal ( storage . getLength ( ) , 1 ) ;
172
+ value = storage . get ( storageKey ) ;
173
+ } ) ;
174
+
175
+ it ( 'should set value to the storage' , ( ) => {
176
+ assert . equal ( value , storageValue ) ;
107
177
} ) ;
108
178
} ) ;
109
179
110
180
describe ( 'mergeWith (storage: this, mergeId: boolean = false): void' , ( ) => {
111
- it ( 'should merge two storages' , ( ) => {
112
- const storage1 : IStorage < string > = new ConcreteStorage ( ) ;
113
- const storage2 : IStorage < string > = new ConcreteStorage ( ) ;
181
+ const secondStorageKey : number = 1 ;
182
+ const secondStorageValue : string = 'bar' ;
183
+
184
+ const expectedArray : string [ ] = [ storageValue , secondStorageValue ] ;
185
+
186
+ let array : string [ ] ;
114
187
115
- storage1 . initialize ( ) ;
116
- storage1 . set ( 0 , 'foo' ) ;
188
+ before ( ( ) => {
189
+ storage = getStorageInstance ( ) ;
190
+ storage . set ( storageKey , storageValue ) ;
117
191
118
- storage2 . initialize ( ) ;
119
- storage2 . set ( 1 , 'bar' ) ;
192
+ const secondStorage : IStorage < string > = getStorageInstance ( ) ;
193
+ secondStorage . set ( secondStorageKey , secondStorageValue ) ;
120
194
121
- storage1 . mergeWith ( storage2 , false ) ;
195
+ storage . mergeWith ( secondStorage , false ) ;
122
196
123
- assert . deepEqual ( storage1 . getStorage ( ) , [ 'foo' , 'bar' ] ) ;
197
+ array = storage . getStorage ( ) ;
198
+ } ) ;
199
+
200
+ it ( 'should merge two storages' , ( ) => {
201
+ assert . deepEqual ( array , expectedArray ) ;
124
202
} ) ;
125
203
} ) ;
126
204
} ) ;
0 commit comments