@@ -11,6 +11,14 @@ describe('session-resume', function () {
11
11
<input id="my-first-checkbox" type="checkbox" value="first-checkbox-value" class="js-session-resumable" />
12
12
<input id="my-second-checkbox" type="checkbox" value="second-checkbox-value" class="js-session-resumable" />
13
13
<input id="my-checked-checkbox" type="checkbox" value="checked-checkbox-value" class="js-session-resumable" checked />
14
+ <select id="my-single-select-field" class="js-session-resumable">
15
+ <option value="first">first</option>
16
+ <option value="second">second</option>
17
+ </select>
18
+ <select id="my-multiple-select-field" class="js-session-resumable" multiple>
19
+ <option value="first">first</option>
20
+ <option value="second">second</option>
21
+ </select>
14
22
</form>
15
23
`
16
24
window . addEventListener ( 'submit' , sessionStorage . setForm , { capture : true } )
@@ -23,7 +31,9 @@ describe('session-resume', function () {
23
31
JSON . stringify ( [
24
32
[ 'my-first-field' , 'test2' ] ,
25
33
[ 'my-first-checkbox' , 'first-checkbox-value' ] ,
26
- [ 'my-checked-checkbox' , 'checked-checkbox-value' ]
34
+ [ 'my-checked-checkbox' , 'checked-checkbox-value' ] ,
35
+ [ 'my-single-select-field' , [ 'second' ] ] ,
36
+ [ 'my-multiple-select-field' , [ 'first' , 'second' ] ]
27
37
] )
28
38
)
29
39
restoreResumableFields ( 'test-persist' )
@@ -33,6 +43,9 @@ describe('session-resume', function () {
33
43
assert . equal ( document . querySelector ( '#my-first-checkbox' ) . checked , true )
34
44
assert . equal ( document . querySelector ( '#my-second-checkbox' ) . checked , false )
35
45
assert . equal ( document . querySelector ( '#my-checked-checkbox' ) . checked , false )
46
+ assert . equal ( document . querySelector ( '#my-single-select-field' ) . value , 'second' )
47
+ assert . equal ( document . querySelector ( '#my-multiple-select-field option[value=first]' ) . selected , true )
48
+ assert . equal ( document . querySelector ( '#my-multiple-select-field option[value=second]' ) . selected , true )
36
49
} )
37
50
38
51
it ( 'uses a Storage object when provided as an option' , function ( ) {
@@ -46,11 +59,21 @@ describe('session-resume', function () {
46
59
}
47
60
}
48
61
49
- fakeStorage . setItem ( 'session-resume:test-persist' , JSON . stringify ( [ [ 'my-first-field' , 'test2' ] ] ) )
62
+ fakeStorage . setItem (
63
+ 'session-resume:test-persist' ,
64
+ JSON . stringify ( [
65
+ [ 'my-first-field' , 'test2' ] ,
66
+ [ 'my-single-select-field' , [ 'second' ] ] ,
67
+ [ 'my-multiple-select-field' , [ 'first' , 'second' ] ]
68
+ ] )
69
+ )
50
70
restoreResumableFields ( 'test-persist' , { storage : fakeStorage } )
51
71
52
72
assert . equal ( document . querySelector ( '#my-first-field' ) . value , 'test2' )
53
73
assert . equal ( document . querySelector ( '#my-second-field' ) . value , 'second-field-value' )
74
+ assert . equal ( document . querySelector ( '#my-single-select-field' ) . value , 'second' )
75
+ assert . equal ( document . querySelector ( '#my-multiple-select-field option[value=first]' ) . selected , true )
76
+ assert . equal ( document . querySelector ( '#my-multiple-select-field option[value=second]' ) . selected , true )
54
77
} )
55
78
56
79
it ( 'leaves unrestored values in session storage' , function ( ) {
@@ -71,7 +94,7 @@ describe('session-resume', function () {
71
94
72
95
// Some fields we want to restore are not always present in the DOM
73
96
// and may be added later. We hold onto the values until they're needed.
74
- assert . deepEqual ( JSON . parse ( sessionStorage . getItem ( 'session-resume:test-persist' ) ) , [
97
+ assert . includeDeepMembers ( JSON . parse ( sessionStorage . getItem ( 'session-resume:test-persist' ) ) , [
75
98
[ 'non-existant-field' , 'test3' ]
76
99
] )
77
100
} )
@@ -127,17 +150,25 @@ describe('session-resume', function () {
127
150
it ( 'persist fields values to session storage by default' , function ( ) {
128
151
document . querySelector ( '#my-first-field' ) . value = 'test1'
129
152
document . querySelector ( '#my-second-field' ) . value = 'test2'
153
+ document . querySelector ( '#my-single-select-field' ) . value = 'first'
154
+ document . querySelector ( '#my-multiple-select-field option[value=first]' ) . selected = true
155
+ document . querySelector ( '#my-multiple-select-field option[value=second]' ) . selected = true
130
156
persistResumableFields ( 'test-persist' )
131
157
132
158
assert . includeDeepMembers ( JSON . parse ( sessionStorage . getItem ( 'session-resume:test-persist' ) ) , [
133
159
[ 'my-first-field' , 'test1' ] ,
134
- [ 'my-second-field' , 'test2' ]
160
+ [ 'my-second-field' , 'test2' ] ,
161
+ [ 'my-single-select-field' , [ 'first' ] ] ,
162
+ [ 'my-multiple-select-field' , [ 'first' , 'second' ] ]
135
163
] )
136
164
} )
137
165
138
166
it ( 'uses a Storage object when provided as an option' , function ( ) {
139
167
document . querySelector ( '#my-first-field' ) . value = 'test1'
140
168
document . querySelector ( '#my-second-field' ) . value = 'test2'
169
+ document . querySelector ( '#my-single-select-field' ) . value = 'second'
170
+ document . querySelector ( '#my-multiple-select-field option[value=first]' ) . selected = true
171
+ document . querySelector ( '#my-multiple-select-field option[value=second]' ) . selected = true
141
172
142
173
const fakeStorageBackend = { }
143
174
const fakeStorage = {
@@ -153,34 +184,54 @@ describe('session-resume', function () {
153
184
154
185
assert . includeDeepMembers ( JSON . parse ( fakeStorage . getItem ( 'session-resume:test-persist' ) ) , [
155
186
[ 'my-first-field' , 'test1' ] ,
156
- [ 'my-second-field' , 'test2' ]
187
+ [ 'my-second-field' , 'test2' ] ,
188
+ [ 'my-single-select-field' , [ 'second' ] ] ,
189
+ [ 'my-multiple-select-field' , [ 'first' , 'second' ] ]
157
190
] )
158
191
} )
159
192
160
193
it ( 'holds onto existing values in the store' , function ( ) {
161
194
sessionStorage . setItem ( 'session-resume:test-persist' , JSON . stringify ( [ [ 'non-existant-field' , 'test3' ] ] ) )
162
195
document . querySelector ( '#my-first-field' ) . value = 'test1'
163
196
document . querySelector ( '#my-second-field' ) . value = 'test2'
197
+ document . querySelector ( '#my-single-select-field' ) . value = 'second'
198
+ document . querySelector ( '#my-multiple-select-field option[value=first]' ) . selected = true
199
+ document . querySelector ( '#my-multiple-select-field option[value=second]' ) . selected = true
164
200
165
201
persistResumableFields ( 'test-persist' )
166
202
167
203
assert . includeDeepMembers ( JSON . parse ( sessionStorage . getItem ( 'session-resume:test-persist' ) ) , [
168
204
[ 'my-first-field' , 'test1' ] ,
169
205
[ 'my-second-field' , 'test2' ] ,
206
+ [ 'my-single-select-field' , [ 'second' ] ] ,
207
+ [ 'my-multiple-select-field' , [ 'first' , 'second' ] ] ,
170
208
[ 'non-existant-field' , 'test3' ]
171
209
] )
172
210
} )
173
211
174
212
it ( 'replaces old values with the latest field values' , function ( ) {
175
- sessionStorage . setItem ( 'session-resume:test-persist' , JSON . stringify ( [ [ 'my-first-field' , 'old data' ] ] ) )
213
+ sessionStorage . setItem (
214
+ 'session-resume:test-persist' ,
215
+ JSON . stringify ( [
216
+ [ 'my-first-field' , 'old data' ] ,
217
+ [ 'my-second-field' , 'old data' ] ,
218
+ [ 'my-single-select-field' , 'first' ] ,
219
+ [ 'my-multiple-select-field' , [ 'first' , 'second' ] ]
220
+ ] )
221
+ )
176
222
document . querySelector ( '#my-first-field' ) . value = 'test1'
177
223
document . querySelector ( '#my-second-field' ) . value = 'test2'
224
+ document . querySelector ( '#my-single-select-field' ) . value = 'second'
225
+ document . querySelector ( '#my-multiple-select-field option[value=first]' ) . selected = false
226
+ document . querySelector ( '#my-multiple-select-field option[value=second]' ) . selected = true
178
227
179
228
persistResumableFields ( 'test-persist' )
180
229
181
230
assert . includeDeepMembers ( JSON . parse ( sessionStorage . getItem ( 'session-resume:test-persist' ) ) , [
182
231
[ 'my-first-field' , 'test1' ] ,
183
- [ 'my-second-field' , 'test2' ]
232
+ [ 'my-second-field' , 'test2' ] ,
233
+ [ 'my-single-select-field' , [ 'second' ] ] ,
234
+ [ 'my-multiple-select-field' , [ 'second' ] ]
184
235
] )
185
236
} )
186
237
@@ -191,7 +242,9 @@ describe('session-resume', function () {
191
242
sessionStorage . clear ( )
192
243
persistResumableFields ( 'test-persist' , { selector : '#my-first-field' } )
193
244
194
- assert . deepEqual ( JSON . parse ( sessionStorage . getItem ( 'session-resume:test-persist' ) ) , [ [ 'my-first-field' , 'test1' ] ] )
245
+ assert . includeDeepMembers ( JSON . parse ( sessionStorage . getItem ( 'session-resume:test-persist' ) ) , [
246
+ [ 'my-first-field' , 'test1' ]
247
+ ] )
195
248
} )
196
249
197
250
it ( 'scopes fields based on the scope: option' , function ( ) {
@@ -210,19 +263,20 @@ describe('session-resume', function () {
210
263
sessionStorage . clear ( )
211
264
persistResumableFields ( 'test-persist' , { scope : document . querySelector ( 'form' ) } )
212
265
213
- assert . deepEqual ( JSON . parse ( sessionStorage . getItem ( 'session-resume:test-persist' ) ) , [
266
+ assert . includeDeepMembers ( JSON . parse ( sessionStorage . getItem ( 'session-resume:test-persist' ) ) , [
214
267
[ 'my-first-field' , 'test1' ] ,
215
268
[ 'my-second-field' , 'test2' ]
216
269
] )
217
270
} )
271
+
218
272
it ( 'scopes fields based on the fields: option' , function ( ) {
219
273
document . getElementById ( 'my-first-field' ) . value = 'test1'
220
274
document . getElementById ( 'my-second-field' ) . value = 'test2'
221
275
222
276
sessionStorage . clear ( )
223
277
persistResumableFields ( 'test-persist' , { fields : document . querySelectorAll ( '#my-second-field' ) } )
224
278
225
- assert . deepEqual ( JSON . parse ( sessionStorage . getItem ( 'session-resume:test-persist' ) ) , [
279
+ assert . includeDeepMembers ( JSON . parse ( sessionStorage . getItem ( 'session-resume:test-persist' ) ) , [
226
280
[ 'my-second-field' , 'test2' ]
227
281
] )
228
282
} )
0 commit comments