Page MenuHomeWickedGov Phorge

Browser.test.js
No OneTemporary

Size
3 KB
Referenced Files
None
Subscribers
None

Browser.test.js

/* global $ */
const
Browser = require( '../../../src/mobile.startup/Browser' ),
dom = require( '../utils/dom' ),
jQuery = require( '../utils/jQuery' ),
sinon = require( 'sinon' ),
mediawiki = require( '../utils/mw' );
let
$html;
/** @type {sinon.SinonSandbox} */ let sandbox;
QUnit.module( 'MobileFrontend Browser.js', {
beforeEach: function () {
let tmpDOM;
sandbox = sinon.sandbox.create();
dom.setUp( sandbox, global );
jQuery.setUp( sandbox, global );
mediawiki.setUp( sandbox, global );
$html = $( tmpDOM );
},
afterEach: function () {
jQuery.tearDown();
sandbox.restore();
}
} );
QUnit.test( 'isIos()', function ( assert ) {
const browser = new Browser( 'Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko)', $html ),
browser4 = new Browser( 'Mozilla/5.0 (iPad; CPU OS 4_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko)', $html ),
browser5 = new Browser( 'Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko)', $html ),
browser2 = new Browser( 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/8.0 Mobile/11A465 Safari/9537.53', $html );
assert.strictEqual( browser.isIos(), true );
assert.strictEqual( browser.isIos( 8 ), false );
assert.strictEqual( browser.isIos( 4 ), false );
assert.strictEqual( browser.isIos( 5 ), false );
assert.strictEqual( browser2.isIos(), true );
assert.strictEqual( browser2.isIos( 8 ), true );
assert.strictEqual( browser4.isIos( 4 ), true );
assert.strictEqual( browser5.isIos( 5 ), true );
} );
QUnit.test( 'Methods are cached', function ( assert ) {
const ipad = new Browser( 'Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko)', $html ),
iphone = new Browser( 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/8.0 Mobile/11A465 Safari/9537.53', $html ),
android2 = new Browser( 'Android 2', $html );
function cache( obj, method ) {
return obj[ '__cache' + obj[ method ].cacheId ];
}
// Check that the same methods across different instances have their own
// cache and don't interfere with one another
assert.strictEqual( ipad.isIos(), true );
assert.strictEqual( ipad.isIos( 8 ), false );
assert.strictEqual( android2.isIos( 8 ), false );
assert.strictEqual( iphone.isIos(), true );
assert.strictEqual( iphone.isIos( 8 ), true );
// Check that the caches have been filled
assert.strictEqual( Object.keys( cache( ipad, 'isIos' ) ).length, 2, 'isIos on ipad cached as expected' );
assert.strictEqual( Object.keys( cache( android2, 'isIos' ) ).length, 1, 'isIos on android cached as expected' );
assert.strictEqual( Object.keys( cache( iphone, 'isIos' ) ).length, 2, 'isIos on iphone cached as expected' );
} );
QUnit.test( 'isWideScreen()', function ( assert ) {
const browser = new Browser( 'Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko)', $html );
sandbox.stub( mw.config, 'get' ).callsFake( function () {
return '720px';
} );
assert.strictEqual( browser.isWideScreen(), true );
} );
QUnit.test( 'supportsTouchEvents()', function ( assert ) {
const browser = new Browser( 'Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko)', $html );
window.ontouchstart = window.ontouchstart || undefined;
assert.strictEqual( browser.supportsTouchEvents(), true );
} );

File Metadata

Mime Type
text/plain
Expires
Aug 19 2026, 16:42 (4 w, 3 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
15/ec/cdde0b90830640e2dd209083424f
Default Alt Text
Browser.test.js (3 KB)

Event Timeline