X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fqunit%2Fsuites%2Fresources%2Fmediawiki%2Fmediawiki.storage.test.js;h=fab7e1fef1a24af9cea872e7aca46dc23fe6bf8f;hb=add9bd191fd4d16250b301208600854cb52f6b33;hp=6cef4a7c8184fa3f3f9480ad9533ca8e3a85449e;hpb=70e760ee4e37edad1be0573b37c17fe6899e4806;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.storage.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.storage.test.js index 6cef4a7c81..fab7e1fef1 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.storage.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.storage.test.js @@ -1,36 +1,56 @@ -( function ( mw ) { +( function () { QUnit.module( 'mediawiki.storage' ); - QUnit.test( 'set/get with localStorage', 3, function ( assert ) { - this.sandbox.stub( mw.storage, 'localStorage', { + QUnit.test( 'set/get with storage support', function ( assert ) { + var stub = { setItem: this.sandbox.spy(), getItem: this.sandbox.stub() - } ); + }; + stub.getItem.withArgs( 'foo' ).returns( 'test' ); + stub.getItem.returns( null ); + this.sandbox.stub( mw.storage, 'store', stub ); mw.storage.set( 'foo', 'test' ); - assert.ok( mw.storage.localStorage.setItem.calledOnce ); + assert.ok( stub.setItem.calledOnce ); - mw.storage.localStorage.getItem.withArgs( 'foo' ).returns( 'test' ); - mw.storage.localStorage.getItem.returns( null ); assert.strictEqual( mw.storage.get( 'foo' ), 'test', 'Check value gets stored.' ); assert.strictEqual( mw.storage.get( 'bar' ), null, 'Unset values are null.' ); } ); - QUnit.test( 'set/get without localStorage', 3, function ( assert ) { - this.sandbox.stub( mw.storage, 'localStorage', { + QUnit.test( 'set/get with storage methods disabled', function ( assert ) { + // This covers browsers where storage is disabled + // (quota full, or security/privacy settings). + // On most browsers, these interface will be accessible with + // their methods throwing. + var stub = { getItem: this.sandbox.stub(), removeItem: this.sandbox.stub(), setItem: this.sandbox.stub() - } ); + }; + stub.getItem.throws(); + stub.setItem.throws(); + stub.removeItem.throws(); + this.sandbox.stub( mw.storage, 'store', stub ); - mw.storage.localStorage.getItem.throws(); assert.strictEqual( mw.storage.get( 'foo' ), false ); - - mw.storage.localStorage.setItem.throws(); assert.strictEqual( mw.storage.set( 'foo', 'test' ), false ); + assert.strictEqual( mw.storage.remove( 'foo', 'test' ), false ); + } ); + + QUnit.test( 'set/get with storage object disabled', function ( assert ) { + // On other browsers, these entire object is disabled. + // `'localStorage' in window` would be true (and pass feature test) + // but trying to read the object as window.localStorage would throw + // an exception. Such case would instantiate SafeStorage with + // undefined after the internal try/catch. + var old = mw.storage.store; + mw.storage.store = undefined; - mw.storage.localStorage.removeItem.throws(); + assert.strictEqual( mw.storage.get( 'foo' ), false ); + assert.strictEqual( mw.storage.set( 'foo', 'test' ), false ); assert.strictEqual( mw.storage.remove( 'foo', 'test' ), false ); + + mw.storage.store = old; } ); -}( mediaWiki ) ); +}() );