2 QUnit
.module( 'mediawiki.storage' );
4 QUnit
.test( 'set/get(Object) with storage support', function ( assert
) {
6 object
= { test
: 'value' },
8 setItem: function ( k
, v
) {
12 getItem: function ( k
) {
13 return Object
.prototype.hasOwnProperty
.call( data
, k
) ? data
[ k
] : null;
15 removeItem: function ( k
) {
21 this.sandbox
.stub( mw
.storage
, 'store', stub
);
23 assert
.strictEqual( mw
.storage
.set( 'foo', 'test' ), true, 'set returns true' );
24 assert
.strictEqual( mw
.storage
.get( 'foo' ), 'test', 'Check value gets stored' );
25 assert
.strictEqual( mw
.storage
.get( 'bar' ), null, 'Unset values are null' );
26 assert
.strictEqual( mw
.storage
.remove( 'foo' ), true, 'remove returns true' );
27 assert
.strictEqual( mw
.storage
.get( 'foo' ), null, 'Removed item is null' );
29 assert
.strictEqual( mw
.storage
.setObject( 'baz', object
), true, 'setObject returns true' );
30 assert
.deepEqual( mw
.storage
.getObject( 'baz' ), object
, 'Check value gets stored' );
31 assert
.notStrictEqual( mw
.storage
.getObject( 'baz' ), object
, 'Retrieved value is a new object' );
32 assert
.strictEqual( mw
.storage
.getObject( 'quux' ), null, 'Unset values are null' );
33 assert
.strictEqual( mw
.storage
.remove( 'baz' ), true, 'remove returns true' );
34 assert
.strictEqual( mw
.storage
.getObject( 'baz' ), null, 'Removed item is null' );
36 mw
.storage
.set( 'baz', 'Non-JSON' );
37 assert
.strictEqual( mw
.storage
.getObject( 'baz' ), null, 'Non-JSON values are null' );
41 QUnit
.test( 'set/get(Object) with storage methods disabled', function ( assert
) {
42 // This covers browsers where storage is disabled
43 // (quota full, or security/privacy settings).
44 // On most browsers, these interface will be accessible with
45 // their methods throwing.
47 getItem
: this.sandbox
.stub(),
48 removeItem
: this.sandbox
.stub(),
49 setItem
: this.sandbox
.stub()
51 stub
.getItem
.throws();
52 stub
.setItem
.throws();
53 stub
.removeItem
.throws();
54 this.sandbox
.stub( mw
.storage
, 'store', stub
);
56 assert
.strictEqual( mw
.storage
.get( 'foo' ), false );
57 assert
.strictEqual( mw
.storage
.set( 'foo', 'test' ), false );
58 assert
.strictEqual( mw
.storage
.remove( 'foo' ), false );
60 assert
.strictEqual( mw
.storage
.getObject( 'bar' ), false );
61 assert
.strictEqual( mw
.storage
.setObject( 'bar', { test
: 'value' } ), false );
62 assert
.strictEqual( mw
.storage
.remove( 'bar' ), false );
65 QUnit
.test( 'set/get(Object) with storage object disabled', function ( assert
) {
66 // On other browsers, these entire object is disabled.
67 // `'localStorage' in window` would be true (and pass feature test)
68 // but trying to read the object as window.localStorage would throw
69 // an exception. Such case would instantiate SafeStorage with
70 // undefined after the internal try/catch.
71 var old
= mw
.storage
.store
;
72 mw
.storage
.store
= undefined;
74 assert
.strictEqual( mw
.storage
.get( 'foo' ), false );
75 assert
.strictEqual( mw
.storage
.set( 'foo', 'test' ), false );
76 assert
.strictEqual( mw
.storage
.remove( 'foo', 'test' ), false );
78 assert
.strictEqual( mw
.storage
.getObject( 'bar' ), false );
79 assert
.strictEqual( mw
.storage
.setObject( 'bar', { test
: 'value' } ), false );
80 assert
.strictEqual( mw
.storage
.remove( 'bar' ), false );
82 mw
.storage
.store
= old
;