From 08aa4418c30cfc18ccc69a0f0f9cb9e17be6c196 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Mon, 12 Aug 2013 09:28:15 +0200 Subject: Update to MediaWiki 1.21.1 --- tests/qunit/.htaccess | 1 - tests/qunit/QUnitTestResources.php | 63 -- tests/qunit/data/callMwLoaderTestCallback.js | 1 - tests/qunit/data/load.mock.php | 58 -- tests/qunit/data/qunitOkCall.js | 2 - tests/qunit/data/styleTest.css.php | 61 -- tests/qunit/data/testrunner.js | 266 -------- .../resources/jquery/jquery.autoEllipsis.test.js | 52 -- .../resources/jquery/jquery.byteLength.test.js | 33 - .../resources/jquery/jquery.byteLimit.test.js | 234 ------- .../suites/resources/jquery/jquery.client.test.js | 317 ---------- .../resources/jquery/jquery.colorUtil.test.js | 58 -- .../resources/jquery/jquery.delayedBind.test.js | 35 -- .../resources/jquery/jquery.getAttrs.test.js | 11 - .../resources/jquery/jquery.highlightText.test.js | 232 ------- .../resources/jquery/jquery.localize.test.js | 133 ---- .../resources/jquery/jquery.mwExtension.test.js | 58 -- .../resources/jquery/jquery.tabIndex.test.js | 33 - .../resources/jquery/jquery.tablesorter.test.js | 697 --------------------- .../resources/jquery/jquery.textSelection.test.js | 275 -------- .../mediawiki.api/mediawiki.api.parse.test.js | 26 - .../resources/mediawiki.api/mediawiki.api.test.js | 59 -- .../mediawiki.special.recentchanges.test.js | 62 -- .../resources/mediawiki/mediawiki.Title.test.js | 200 ------ .../resources/mediawiki/mediawiki.Uri.test.js | 388 ------------ .../resources/mediawiki/mediawiki.cldr.test.js | 74 --- .../mediawiki/mediawiki.jqueryMsg.test.js | 97 --- .../resources/mediawiki/mediawiki.jscompat.test.js | 62 -- .../resources/mediawiki/mediawiki.language.test.js | 394 ------------ .../suites/resources/mediawiki/mediawiki.test.js | 649 ------------------- .../resources/mediawiki/mediawiki.user.test.js | 56 -- .../resources/mediawiki/mediawiki.util.test.js | 288 --------- 32 files changed, 4975 deletions(-) delete mode 100644 tests/qunit/.htaccess delete mode 100644 tests/qunit/QUnitTestResources.php delete mode 100644 tests/qunit/data/callMwLoaderTestCallback.js delete mode 100644 tests/qunit/data/load.mock.php delete mode 100644 tests/qunit/data/qunitOkCall.js delete mode 100644 tests/qunit/data/styleTest.css.php delete mode 100644 tests/qunit/data/testrunner.js delete mode 100644 tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js delete mode 100644 tests/qunit/suites/resources/jquery/jquery.byteLength.test.js delete mode 100644 tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js delete mode 100644 tests/qunit/suites/resources/jquery/jquery.client.test.js delete mode 100644 tests/qunit/suites/resources/jquery/jquery.colorUtil.test.js delete mode 100644 tests/qunit/suites/resources/jquery/jquery.delayedBind.test.js delete mode 100644 tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js delete mode 100644 tests/qunit/suites/resources/jquery/jquery.highlightText.test.js delete mode 100644 tests/qunit/suites/resources/jquery/jquery.localize.test.js delete mode 100644 tests/qunit/suites/resources/jquery/jquery.mwExtension.test.js delete mode 100644 tests/qunit/suites/resources/jquery/jquery.tabIndex.test.js delete mode 100644 tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js delete mode 100644 tests/qunit/suites/resources/jquery/jquery.textSelection.test.js delete mode 100644 tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js delete mode 100644 tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js delete mode 100644 tests/qunit/suites/resources/mediawiki.special/mediawiki.special.recentchanges.test.js delete mode 100644 tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js delete mode 100644 tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js delete mode 100644 tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js delete mode 100644 tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js delete mode 100644 tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js delete mode 100644 tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js delete mode 100644 tests/qunit/suites/resources/mediawiki/mediawiki.test.js delete mode 100644 tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js delete mode 100644 tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js (limited to 'tests/qunit') diff --git a/tests/qunit/.htaccess b/tests/qunit/.htaccess deleted file mode 100644 index 605d2f4c..00000000 --- a/tests/qunit/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Allow from all diff --git a/tests/qunit/QUnitTestResources.php b/tests/qunit/QUnitTestResources.php deleted file mode 100644 index 59ae73cd..00000000 --- a/tests/qunit/QUnitTestResources.php +++ /dev/null @@ -1,63 +0,0 @@ - array( - 'scripts' => array( - 'tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js', - 'tests/qunit/suites/resources/jquery/jquery.byteLength.test.js', - 'tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js', - 'tests/qunit/suites/resources/jquery/jquery.client.test.js', - 'tests/qunit/suites/resources/jquery/jquery.colorUtil.test.js', - 'tests/qunit/suites/resources/jquery/jquery.delayedBind.test.js', - 'tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js', - 'tests/qunit/suites/resources/jquery/jquery.highlightText.test.js', - 'tests/qunit/suites/resources/jquery/jquery.localize.test.js', - 'tests/qunit/suites/resources/jquery/jquery.mwExtension.test.js', - 'tests/qunit/suites/resources/jquery/jquery.tabIndex.test.js', - 'tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js', - 'tests/qunit/suites/resources/jquery/jquery.textSelection.test.js', - 'tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js', - 'tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js', - 'tests/qunit/suites/resources/mediawiki/mediawiki.test.js', - 'tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js', - 'tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js', - 'tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js', - 'tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js', - 'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js', - 'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js', - 'tests/qunit/suites/resources/mediawiki.special/mediawiki.special.recentchanges.test.js', - 'tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js', - 'tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js', - ), - 'dependencies' => array( - 'jquery.autoEllipsis', - 'jquery.byteLength', - 'jquery.byteLimit', - 'jquery.client', - 'jquery.colorUtil', - 'jquery.delayedBind', - 'jquery.getAttrs', - 'jquery.highlightText', - 'jquery.localize', - 'jquery.mwExtension', - 'jquery.tabIndex', - 'jquery.tablesorter', - 'jquery.textSelection', - 'mediawiki', - 'mediawiki.api', - 'mediawiki.api.parse', - 'mediawiki.jqueryMsg', - 'mediawiki.Title', - 'mediawiki.Uri', - 'mediawiki.user', - 'mediawiki.util', - 'mediawiki.special.recentchanges', - 'mediawiki.language', - 'mediawiki.cldr', - ), - 'position' => 'top', - ) -); diff --git a/tests/qunit/data/callMwLoaderTestCallback.js b/tests/qunit/data/callMwLoaderTestCallback.js deleted file mode 100644 index 3f2ee92f..00000000 --- a/tests/qunit/data/callMwLoaderTestCallback.js +++ /dev/null @@ -1 +0,0 @@ -mw.loader.testCallback(); diff --git a/tests/qunit/data/load.mock.php b/tests/qunit/data/load.mock.php deleted file mode 100644 index 1c189703..00000000 --- a/tests/qunit/data/load.mock.php +++ /dev/null @@ -1,58 +0,0 @@ - " -mw.loader.implement( 'testUsesMissing', function () { - QUnit.ok( false, 'Module test.usesMissing script should not run.'); - QUnit.start(); -}, {}, {}); -", - - 'testUsesNestedMissing' => " -mw.loader.implement( 'testUsesNestedMissing', function () { - QUnit.ok( false, 'Module testUsesNestedMissing script should not run.'); -}, {}, {}); -", -); - -$response = ''; - -// Only support for non-encoded module names, full module names expected -if ( isset( $_GET['modules'] ) ) { - $modules = explode( ',', $_GET['modules'] ); - foreach ( $modules as $module ) { - if ( isset( $moduleImplementations[$module] ) ) { - $response .= $moduleImplementations[$module]; - } else { - $response .= Xml::encodeJsCall( 'mw.loader.state', array( $module, 'missing' ) ); - } - } -} - -echo $response; diff --git a/tests/qunit/data/qunitOkCall.js b/tests/qunit/data/qunitOkCall.js deleted file mode 100644 index 25c42d6a..00000000 --- a/tests/qunit/data/qunitOkCall.js +++ /dev/null @@ -1,2 +0,0 @@ -QUnit.start(); -QUnit.assert.ok( true, 'Successfully loaded!'); diff --git a/tests/qunit/data/styleTest.css.php b/tests/qunit/data/styleTest.css.php deleted file mode 100644 index 1870d5a3..00000000 --- a/tests/qunit/data/styleTest.css.php +++ /dev/null @@ -1,61 +0,0 @@ -" ); -} - -/** - * CompletenessTest - */ -// Adds toggle checkbox to header -QUnit.config.urlConfig.push( { - id: 'completenesstest', - label: 'Run CompletenessTest', - tooltip: 'Run the completeness test' -} ); - -// Initiate when enabled -if ( QUnit.urlParams.completenesstest ) { - - // Return true to ignore - mwTestIgnore = function ( val, tester, funcPath ) { - - // Don't record methods of the properties of constructors, - // to avoid getting into a loop (prototype.constructor.prototype..). - // Since we're therefor skipping any injection for - // "new mw.Foo()", manually set it to true here. - if ( val instanceof mw.Map ) { - tester.methodCallTracker.Map = true; - return true; - } - if ( val instanceof mw.Title ) { - tester.methodCallTracker.Title = true; - return true; - } - - // Don't record methods of the properties of a jQuery object - if ( val instanceof $ ) { - return true; - } - - return false; - }; - - mwTester = new CompletenessTest( mw, mwTestIgnore ); -} - -/** - * Test environment recommended for all QUnit test modules - */ -// Whether to log environment changes to the console -QUnit.config.urlConfig.push( 'mwlogenv' ); - -/** - * Reset mw.config and others to a fresh copy of the live config for each test(), - * and restore it back to the live one afterwards. - * @param localEnv {Object} [optional] - * @example (see test suite at the bottom of this file) - * - */ -QUnit.newMwEnvironment = ( function () { - var log, liveConfig, liveMessages; - - liveConfig = mw.config.values; - liveMessages = mw.messages.values; - - function freshConfigCopy( custom ) { - // "deep=true" is important here. - // Otherwise we just create a new object with values referring to live config. - // e.g. mw.config.set( 'wgFileExtensions', [] ) would not effect liveConfig, - // but mw.config.get( 'wgFileExtensions' ).push( 'png' ) would as the array - // was passed by reference in $.extend's loop. - return $.extend( {}, liveConfig, custom, /*deep=*/true ); - } - - function freshMessagesCopy( custom ) { - return $.extend( {}, liveMessages, custom, /*deep=*/true ); - } - - log = QUnit.urlParams.mwlogenv ? mw.log : function () {}; - - return function ( localEnv ) { - localEnv = $.extend( { - // QUnit - setup: $.noop, - teardown: $.noop, - // MediaWiki - config: {}, - messages: {} - }, localEnv ); - - return { - setup: function () { - log( 'MwEnvironment> SETUP for "' + QUnit.config.current.module - + ': ' + QUnit.config.current.testName + '"' ); - - // Greetings, mock environment! - mw.config.values = freshConfigCopy( localEnv.config ); - mw.messages.values = freshMessagesCopy( localEnv.messages ); - - localEnv.setup(); - }, - - teardown: function () { - log( 'MwEnvironment> TEARDOWN for "' + QUnit.config.current.module - + ': ' + QUnit.config.current.testName + '"' ); - - localEnv.teardown(); - - // Farewell, mock environment! - mw.config.values = liveConfig; - mw.messages.values = liveMessages; - } - }; - }; -}() ); - -// $.when stops as soon as one fails, which makes sense in most -// practical scenarios, but not in a unit test where we really do -// need to wait until all of them are finished. -QUnit.whenPromisesComplete = function () { - var altPromises = []; - - $.each( arguments, function ( i, arg ) { - var alt = $.Deferred(); - altPromises.push( alt ); - - // Whether this one fails or not, forwards it to - // the 'done' (resolve) callback of the alternative promise. - arg.always( alt.resolve ); - }); - - return $.when.apply( $, altPromises ); -}; - -/** - * Add-on assertion helpers - */ -// Define the add-ons -addons = { - - // Expect boolean true - assertTrue: function ( actual, message ) { - QUnit.push( actual === true, actual, true, message ); - }, - - // Expect boolean false - assertFalse: function ( actual, message ) { - QUnit.push( actual === false, actual, false, message ); - }, - - // Expect numerical value less than X - lt: function ( actual, expected, message ) { - QUnit.push( actual < expected, actual, 'less than ' + expected, message ); - }, - - // Expect numerical value less than or equal to X - ltOrEq: function ( actual, expected, message ) { - QUnit.push( actual <= expected, actual, 'less than or equal to ' + expected, message ); - }, - - // Expect numerical value greater than X - gt: function ( actual, expected, message ) { - QUnit.push( actual > expected, actual, 'greater than ' + expected, message ); - }, - - // Expect numerical value greater than or equal to X - gtOrEq: function ( actual, expected, message ) { - QUnit.push( actual >= expected, actual, 'greater than or equal to ' + expected, message ); - } -}; - -$.extend( QUnit.assert, addons ); - -/** - * Small test suite to confirm proper functionality of the utilities and - * initializations in this file. - */ -var envExecCount = 0; -QUnit.module( 'mediawiki.tests.qunit.testrunner', QUnit.newMwEnvironment({ - setup: function () { - envExecCount += 1; - this.mwHtmlLive = mw.html; - mw.html = { - escape: function () { - return 'mocked-' + envExecCount; - } - }; - }, - teardown: function () { - mw.html = this.mwHtmlLive; - }, - config: { - testVar: 'foo' - }, - messages: { - testMsg: 'Foo.' - } -}) ); - -QUnit.test( 'Setup', 3, function ( assert ) { - assert.equal( mw.html.escape( 'foo' ), 'mocked-1', 'extra setup() callback was ran.' ); - assert.equal( mw.config.get( 'testVar' ), 'foo', 'config object applied' ); - assert.equal( mw.messages.get( 'testMsg' ), 'Foo.', 'messages object applied' ); - - mw.config.set( 'testVar', 'bar' ); - mw.messages.set( 'testMsg', 'Bar.' ); -}); - -QUnit.test( 'Teardown', 3, function ( assert ) { - assert.equal( mw.html.escape( 'foo' ), 'mocked-2', 'extra setup() callback was re-ran.' ); - assert.equal( mw.config.get( 'testVar' ), 'foo', 'config object restored and re-applied after test()' ); - assert.equal( mw.messages.get( 'testMsg' ), 'Foo.', 'messages object restored and re-applied after test()' ); -}); - -QUnit.module( 'mediawiki.tests.qunit.testrunner-after', QUnit.newMwEnvironment() ); - -QUnit.test( 'Teardown', 3, function ( assert ) { - assert.equal( mw.html.escape( '<' ), '<', 'extra teardown() callback was ran.' ); - assert.equal( mw.config.get( 'testVar' ), null, 'config object restored to live in next module()' ); - assert.equal( mw.messages.get( 'testMsg' ), null, 'messages object restored to live in next module()' ); -}); - -}( jQuery, mediaWiki, QUnit ) ); diff --git a/tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js b/tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js deleted file mode 100644 index 0dee2ef0..00000000 --- a/tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js +++ /dev/null @@ -1,52 +0,0 @@ -( function ( mw, $ ) { - -QUnit.module( 'jquery.autoEllipsis', QUnit.newMwEnvironment() ); - -function createWrappedDiv( text, width ) { - var $wrapper = $( '
' ).css( 'width', width ); - var $div = $( '
' ).text( text ); - $wrapper.append( $div ); - return $wrapper; -} - -function findDivergenceIndex( a, b ) { - var i = 0; - while ( i < a.length && i < b.length && a[i] === b[i] ) { - i++; - } - return i; -} - -QUnit.test( 'Position right', 4, function ( assert ) { - // We need this thing to be visible, so append it to the DOM - var origText = 'This is a really long random string and there is no way it fits in 100 pixels.'; - var $wrapper = createWrappedDiv( origText, '100px' ); - $( '#qunit-fixture' ).append( $wrapper ); - $wrapper.autoEllipsis( { position: 'right' } ); - - // Verify that, and only one, span element was created - var $span = $wrapper.find( '> span' ); - assert.strictEqual( $span.length, 1, 'autoEllipsis wrapped the contents in a span element' ); - - // Check that the text fits by turning on word wrapping - $span.css( 'whiteSpace', 'nowrap' ); - assert.ltOrEq( $span.width(), $span.parent().width(), "Text fits (making the span 'white-space:nowrap' does not make it wider than its parent)" ); - - // Add two characters using scary black magic - var spanText = $span.text(); - var d = findDivergenceIndex( origText, spanText ); - var spanTextNew = spanText.substr( 0, d ) + origText[d] + origText[d] + '...'; - - assert.gt( spanTextNew.length, spanText.length, 'Verify that the new span-length is indeed greater' ); - - // Put this text in the span and verify it doesn't fit - $span.text( spanTextNew ); - // In IE6 width works like min-width, allow IE6's width to be "equal to" - if ( $.browser.msie && Number( $.browser.version ) === 6 ) { - assert.gtOrEq( $span.width(), $span.parent().width(), 'Fit is maximal (adding two characters makes it not fit any more) - IE6: Maybe equal to as well due to width behaving like min-width in IE6' ); - } else { - assert.gt( $span.width(), $span.parent().width(), 'Fit is maximal (adding two characters makes it not fit any more)' ); - } -}); - -}( mediaWiki, jQuery ) ); diff --git a/tests/qunit/suites/resources/jquery/jquery.byteLength.test.js b/tests/qunit/suites/resources/jquery/jquery.byteLength.test.js deleted file mode 100644 index a6ddfca6..00000000 --- a/tests/qunit/suites/resources/jquery/jquery.byteLength.test.js +++ /dev/null @@ -1,33 +0,0 @@ -QUnit.module( 'jquery.byteLength', QUnit.newMwEnvironment() ); - -QUnit.test( 'Simple text', 5, function ( assert ) { - var azLc = 'abcdefghijklmnopqrstuvwxyz', - azUc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - num = '0123456789', - x = '*', - space = ' '; - - assert.equal( $.byteLength( azLc ), 26, 'Lowercase a-z' ); - assert.equal( $.byteLength( azUc ), 26, 'Uppercase A-Z' ); - assert.equal( $.byteLength( num ), 10, 'Numbers 0-9' ); - assert.equal( $.byteLength( x ), 1, 'An asterisk' ); - assert.equal( $.byteLength( space ), 3, '3 spaces' ); - -} ); - -QUnit.test( 'Special text', 5, function ( assert ) { - // http://en.wikipedia.org/wiki/UTF-8 - var U_0024 = '$', - U_00A2 = '\u00A2', - U_20AC = '\u20AC', - U_024B62 = '\u024B62', - // The normal one doesn't display properly, try the below which is the same - // according to http://www.fileformat.info/info/unicode/char/24B62/index.htm - U_024B62_alt = '\uD852\uDF62'; - - assert.strictEqual( $.byteLength( U_0024 ), 1, 'U+0024: 1 byte. $ (dollar sign)' ); - assert.strictEqual( $.byteLength( U_00A2 ), 2, 'U+00A2: 2 bytes. \u00A2 (cent sign)' ); - assert.strictEqual( $.byteLength( U_20AC ), 3, 'U+20AC: 3 bytes. \u20AC (euro sign)' ); - assert.strictEqual( $.byteLength( U_024B62 ), 4, 'U+024B62: 4 bytes. \uD852\uDF62 (a Han character)' ); - assert.strictEqual( $.byteLength( U_024B62_alt ), 4, 'U+024B62: 4 bytes. \uD852\uDF62 (a Han character) - alternative method' ); -} ); diff --git a/tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js b/tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js deleted file mode 100644 index 4f86eb96..00000000 --- a/tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js +++ /dev/null @@ -1,234 +0,0 @@ -( function ( $, mw ) { - var simpleSample, U_20AC, mbSample; - - QUnit.module( 'jquery.byteLimit', QUnit.newMwEnvironment() ); - - // Simple sample (20 chars, 20 bytes) - simpleSample = '12345678901234567890'; - - // 3 bytes (euro-symbol) - U_20AC = '\u20AC'; - - // Multi-byte sample (22 chars, 26 bytes) - mbSample = '1234567890' + U_20AC + '1234567890' + U_20AC; - - // Basic sendkey-implementation - function addChars( $input, charstr ) { - var c, len; - for ( c = 0, len = charstr.length; c < len; c += 1 ) { - $input - .val( function ( i, val ) { - // Add character to the value - return val + charstr.charAt( c ); - } ) - .trigger( 'change' ); - } - } - - /** - * Test factory for $.fn.byteLimit - * - * @param $input {jQuery} jQuery object in an input element - * @param hasLimit {Boolean} Wether a limit should apply at all - * @param limit {Number} Limit (if used) otherwise undefined - * The limit should be less than 20 (the sample data's length) - */ - function byteLimitTest( options ) { - var opt = $.extend({ - description: '', - $input: null, - sample: '', - hasLimit: false, - expected: '', - limit: null - }, options); - - QUnit.asyncTest( opt.description, opt.hasLimit ? 3 : 2, function ( assert ) { - setTimeout( function () { - var rawVal, fn, effectiveVal; - - opt.$input.appendTo( '#qunit-fixture' ); - - // Simulate pressing keys for each of the sample characters - addChars( opt.$input, opt.sample ); - - rawVal = opt.$input.val(); - fn = opt.$input.data( 'byteLimit.callback' ); - effectiveVal = fn ? fn( rawVal ) : rawVal; - - if ( opt.hasLimit ) { - assert.ltOrEq( - $.byteLength( effectiveVal ), - opt.limit, - 'Prevent keypresses after byteLimit was reached, length never exceeded the limit' - ); - assert.equal( - $.byteLength( rawVal ), - $.byteLength( opt.expected ), - 'Not preventing keypresses too early, length has reached the expected length' - ); - assert.equal( rawVal, opt.expected, 'New value matches the expected string' ); - - } else { - assert.equal( - $.byteLength( effectiveVal ), - $.byteLength( opt.expected ), - 'Unlimited scenarios are not affected, expected length reached' - ); - assert.equal( rawVal, opt.expected, 'New value matches the expected string' ); - } - QUnit.start(); - }, 10 ); - } ); - } - - byteLimitTest({ - description: 'Plain text input', - $input: $( '' ), - sample: simpleSample, - hasLimit: false, - expected: simpleSample - }); - - byteLimitTest({ - description: 'Plain text input. Calling byteLimit with no parameters and no maxlength attribute (bug 36310)', - $input: $( '' ) - .byteLimit(), - sample: simpleSample, - hasLimit: false, - expected: simpleSample - }); - - byteLimitTest({ - description: 'Limit using the maxlength attribute', - $input: $( '' ) - .attr( 'maxlength', '10' ) - .byteLimit(), - sample: simpleSample, - hasLimit: true, - limit: 10, - expected: '1234567890' - }); - - byteLimitTest({ - description: 'Limit using a custom value', - $input: $( '' ) - .byteLimit( 10 ), - sample: simpleSample, - hasLimit: true, - limit: 10, - expected: '1234567890' - }); - - byteLimitTest({ - description: 'Limit using a custom value, overriding maxlength attribute', - $input: $( '' ) - .attr( 'maxlength', '10' ) - .byteLimit( 15 ), - sample: simpleSample, - hasLimit: true, - limit: 15, - expected: '123456789012345' - }); - - byteLimitTest({ - description: 'Limit using a custom value (multibyte)', - $input: $( '' ) - .byteLimit( 14 ), - sample: mbSample, - hasLimit: true, - limit: 14, - expected: '1234567890' + U_20AC + '1' - }); - - byteLimitTest({ - description: 'Limit using a custom value (multibyte) overlapping a byte', - $input: $( '' ) - .byteLimit( 12 ), - sample: mbSample, - hasLimit: true, - limit: 12, - expected: '1234567890' + '12' - }); - - byteLimitTest({ - description: 'Pass the limit and a callback as input filter', - $input: $( '' ) - .byteLimit( 6, function ( val ) { - // Invalid title - if ( val === '' ) { - return ''; - } - - // Return without namespace prefix - return new mw.Title( String( val ) ).getMain(); - } ), - sample: 'User:Sample', - hasLimit: true, - limit: 6, // 'Sample' length - expected: 'User:Sample' - }); - - byteLimitTest({ - description: 'Limit using the maxlength attribute and pass a callback as input filter', - $input: $( '' ) - .attr( 'maxlength', '6' ) - .byteLimit( function ( val ) { - // Invalid title - if ( val === '' ) { - return ''; - } - - // Return without namespace prefix - return new mw.Title( String( val ) ).getMain(); - } ), - sample: 'User:Sample', - hasLimit: true, - limit: 6, // 'Sample' length - expected: 'User:Sample' - }); - - QUnit.test( 'Confirm properties and attributes set', 4, function ( assert ) { - var $el, $elA, $elB; - - $el = $( '' ) - .attr( 'maxlength', '7' ) - .appendTo( '#qunit-fixture' ) - .byteLimit(); - - assert.strictEqual( $el.attr( 'maxlength' ), '7', 'maxlength attribute unchanged for simple limit' ); - - $el = $( '' ) - .attr( 'maxlength', '7' ) - .appendTo( '#qunit-fixture' ) - .byteLimit( 12 ); - - assert.strictEqual( $el.attr( 'maxlength' ), '12', 'maxlength attribute updated for custom limit' ); - - $el = $( '' ) - .attr( 'maxlength', '7' ) - .appendTo( '#qunit-fixture' ) - .byteLimit( 12, function ( val ) { - return val; - } ); - - assert.strictEqual( $el.attr( 'maxlength' ), undefined, 'maxlength attribute removed for limit with callback' ); - - $elA = $( '' ) - .addClass( 'mw-test-byteLimit-foo' ) - .attr( 'maxlength', '7' ) - .appendTo( '#qunit-fixture' ); - - $elB = $( '' ) - .addClass( 'mw-test-byteLimit-foo' ) - .attr( 'maxlength', '12' ) - .appendTo( '#qunit-fixture' ); - - $el = $( '.mw-test-byteLimit-foo' ); - - assert.strictEqual( $el.length, 2, 'Verify that there are no other elements clashing with this test suite' ); - - $el.byteLimit(); - }); - -}( jQuery, mediaWiki ) ); diff --git a/tests/qunit/suites/resources/jquery/jquery.client.test.js b/tests/qunit/suites/resources/jquery/jquery.client.test.js deleted file mode 100644 index bf62b39a..00000000 --- a/tests/qunit/suites/resources/jquery/jquery.client.test.js +++ /dev/null @@ -1,317 +0,0 @@ -QUnit.module( 'jquery.client', QUnit.newMwEnvironment() ); - -/** Number of user-agent defined */ -var uacount = 0; - -var uas = (function () { - - // Object keyed by userAgent. Value is an array (human-readable name, client-profile object, navigator.platform value) - // Info based on results from http://toolserver.org/~krinkle/testswarm/job/174/ - var uas = { - // Internet Explorer 6 - // Internet Explorer 7 - 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)': { - title: 'Internet Explorer 7', - platform: 'Win32', - profile: { - "name": "msie", - "layout": "trident", - "layoutVersion": "unknown", - "platform": "win", - "version": "7.0", - "versionBase": "7", - "versionNumber": 7 - }, - wikiEditor: { - ltr: true, - rtl: false - } - }, - // Internet Explorer 8 - // Internet Explorer 9 - // Internet Explorer 10 - 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)': { - title: 'Internet Explorer 10', - platform: 'Win32', - profile: { - "name": "msie", - "layout": "trident", - "layoutVersion": "unknown", // should be able to report 6? - "platform": "win", - "version": "10.0", - "versionBase": "10", - "versionNumber": 10 - }, - wikiEditor: { - ltr: true, - rtl: true - } - }, - // Firefox 2 - // Firefox 3.5 - 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.19) Gecko/20110420 Firefox/3.5.19': { - title: 'Firefox 3.5', - platform: 'MacIntel', - profile: { - "name": "firefox", - "layout": "gecko", - "layoutVersion": 20110420, - "platform": "mac", - "version": "3.5.19", - "versionBase": "3", - "versionNumber": 3.5 - }, - wikiEditor: { - ltr: true, - rtl: true - } - }, - // Firefox 3.6 - 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.10 (maverick) Firefox/3.6.17': { - title: 'Firefox 3.6', - platform: 'Linux i686', - profile: { - "name": "firefox", - "layout": "gecko", - "layoutVersion": 20110422, - "platform": "linux", - "version": "3.6.17", - "versionBase": "3", - "versionNumber": 3.6 - }, - wikiEditor: { - ltr: true, - rtl: true - } - }, - // Firefox 4 - 'Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1': { - title: 'Firefox 4', - platform: 'Win32', - profile: { - "name": "firefox", - "layout": "gecko", - "layoutVersion": 20100101, - "platform": "win", - "version": "4.0.1", - "versionBase": "4", - "versionNumber": 4 - }, - wikiEditor: { - ltr: true, - rtl: true - } - }, - // Firefox 10 nightly build - 'Mozilla/5.0 (X11; Linux x86_64; rv:10.0a1) Gecko/20111103 Firefox/10.0a1': { - title: 'Firefox 10 nightly', - platform: 'Linux', - profile: { - "name": "firefox", - "layout": "gecko", - "layoutVersion": 20111103, - "platform": "linux", - "version": "10.0a1", - "versionBase": "10", - "versionNumber": 10 - }, - wikiEditor: { - ltr: true, - rtl: true - } - }, - // Firefox 5 - // Safari 3 - // Safari 4 - 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; nl-nl) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7': { - title: 'Safari 4', - platform: 'MacIntel', - profile: { - "name": "safari", - "layout": "webkit", - "layoutVersion": 531, - "platform": "mac", - "version": "4.0.5", - "versionBase": "4", - "versionNumber": 4 - }, - wikiEditor: { - ltr: true, - rtl: true - } - }, - 'Mozilla/5.0 (Windows; U; Windows NT 6.0; cs-CZ) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7': { - title: 'Safari 4', - platform: 'Win32', - profile: { - "name": "safari", - "layout": "webkit", - "layoutVersion": 533, - "platform": "win", - "version": "4.0.5", - "versionBase": "4", - "versionNumber": 4 - }, - wikiEditor: { - ltr: true, - rtl: true - } - }, - // Safari 5 - // Opera 10 - // Chrome 5 - // Chrome 6 - // Chrome 7 - // Chrome 8 - // Chrome 9 - // Chrome 10 - // Chrome 11 - // Chrome 12 - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30': { - title: 'Chrome 12', - platform: 'MacIntel', - profile: { - "name": "chrome", - "layout": "webkit", - "layoutVersion": 534, - "platform": "mac", - "version": "12.0.742.112", - "versionBase": "12", - "versionNumber": 12 - }, - wikiEditor: { - ltr: true, - rtl: true - } - }, - 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30': { - title: 'Chrome 12', - platform: 'Linux i686', - profile: { - "name": "chrome", - "layout": "webkit", - "layoutVersion": 534, - "platform": "linux", - "version": "12.0.742.68", - "versionBase": "12", - "versionNumber": 12 - }, - wikiEditor: { - ltr: true, - rtl: true - } - }, - // Bug #34924 - 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.34 (KHTML, like Gecko) rekonq Safari/534.34': { - title: 'Rekonq', - platform: 'Linux i686', - profile: { - "name": "rekonq", - "layout": "webkit", - "layoutVersion": 534, - "platform": "linux", - "version": "534.34", - "versionBase": "534", - "versionNumber": 534.34 - }, - wikiEditor: { - ltr: true, - rtl: true - } - } - }; - $.each( uas, function () { - uacount++; - }); - return uas; -}()); - -QUnit.test( 'profile userAgent support', uacount, function ( assert ) { - // Generate a client profile object and compare recursively - var uaTest = function( rawUserAgent, data ) { - var ret = $.client.profile( { - userAgent: rawUserAgent, - platform: data.platform - } ); - assert.deepEqual( ret, data.profile, 'Client profile support check for ' + data.title + ' (' + data.platform + '): ' + rawUserAgent ); - }; - - // Loop through and run tests - $.each( uas, uaTest ); -} ); - -QUnit.test( 'profile return validation for current user agent', 7, function ( assert ) { - var p = $.client.profile(); - function unknownOrType( val, type, summary ) { - assert.ok( typeof val === type || val === 'unknown', summary ); - } - - assert.equal( typeof p, 'object', 'profile returns an object' ); - unknownOrType( p.layout, 'string', 'p.layout is a string (or "unknown")' ); - unknownOrType( p.layoutVersion, 'number', 'p.layoutVersion is a number (or "unknown")' ); - unknownOrType( p.platform, 'string', 'p.platform is a string (or "unknown")' ); - unknownOrType( p.version, 'string', 'p.version is a string (or "unknown")' ); - unknownOrType( p.versionBase, 'string', 'p.versionBase is a string (or "unknown")' ); - assert.equal( typeof p.versionNumber, 'number', 'p.versionNumber is a number' ); -}); - -// Example from WikiEditor -// Make sure to use raw numbers, a string like "7.0" would fail on a -// version 10 browser since in string comparaison "10" is before "7.0" :) -var testMap = { - 'ltr': { - 'msie': [['>=', 7.0]], - 'firefox': [['>=', 2]], - 'opera': [['>=', 9.6]], - 'safari': [['>=', 3]], - 'chrome': [['>=', 3]], - 'netscape': [['>=', 9]], - 'blackberry': false, - 'ipod': false, - 'iphone': false - }, - 'rtl': { - 'msie': [['>=', 8]], - 'firefox': [['>=', 2]], - 'opera': [['>=', 9.6]], - 'safari': [['>=', 3]], - 'chrome': [['>=', 3]], - 'netscape': [['>=', 9]], - 'blackberry': false, - 'ipod': false, - 'iphone': false - } -}; - -QUnit.test( 'test', 1, function ( assert ) { - // .test() uses eval, make sure no exceptions are thrown - // then do a basic return value type check - var testMatch = $.client.test( testMap ); - - assert.equal( typeof testMatch, 'boolean', 'test returns a boolean value' ); - -}); - -QUnit.test( 'User-agent matches against WikiEditor\'s compatibility map', uacount * 2, function ( assert ) { - var $body = $( 'body' ), - bodyClasses = $body.attr( 'class' ); - - // Loop through and run tests - $.each( uas, function ( agent, data ) { - $.each( ['ltr', 'rtl'], function ( i, dir ) { - $body.removeClass( 'ltr rtl' ).addClass( dir ); - var profile = $.client.profile( { - userAgent: agent, - platform: data.platform - } ); - var testMatch = $.client.test( testMap, profile ); - $body.removeClass( dir ); - - assert.equal( testMatch, data.wikiEditor[dir], 'testing comparison based on ' + dir + ', ' + agent ); - }); - }); - - // Restore body classes - $body.attr( 'class', bodyClasses ); -}); - diff --git a/tests/qunit/suites/resources/jquery/jquery.colorUtil.test.js b/tests/qunit/suites/resources/jquery/jquery.colorUtil.test.js deleted file mode 100644 index 7b37f5a0..00000000 --- a/tests/qunit/suites/resources/jquery/jquery.colorUtil.test.js +++ /dev/null @@ -1,58 +0,0 @@ -QUnit.module( 'jquery.colorUtil', QUnit.newMwEnvironment() ); - -QUnit.test( 'getRGB', 18, function ( assert ) { - assert.strictEqual( $.colorUtil.getRGB(), undefined, 'No arguments' ); - assert.strictEqual( $.colorUtil.getRGB( '' ), undefined, 'Empty string' ); - assert.deepEqual( $.colorUtil.getRGB( [0, 100, 255] ), [0, 100, 255], 'Parse array of rgb values' ); - assert.deepEqual( $.colorUtil.getRGB( 'rgb(0,100,255)' ), [0, 100, 255], 'Parse simple rgb string' ); - assert.deepEqual( $.colorUtil.getRGB( 'rgb(0, 100, 255)' ), [0, 100, 255], 'Parse simple rgb string with spaces' ); - assert.deepEqual( $.colorUtil.getRGB( 'rgb(0%,20%,40%)' ), [0, 51, 102], 'Parse rgb string with percentages' ); - assert.deepEqual( $.colorUtil.getRGB( 'rgb(0%, 20%, 40%)' ), [0, 51, 102], 'Parse rgb string with percentages and spaces' ); - assert.deepEqual( $.colorUtil.getRGB( '#f2ddee' ), [242, 221, 238], 'Hex string: 6 char lowercase' ); - assert.deepEqual( $.colorUtil.getRGB( '#f2DDEE' ), [242, 221, 238], 'Hex string: 6 char uppercase' ); - assert.deepEqual( $.colorUtil.getRGB( '#f2DdEe' ), [242, 221, 238], 'Hex string: 6 char mixed' ); - assert.deepEqual( $.colorUtil.getRGB( '#eee' ), [238, 238, 238], 'Hex string: 3 char lowercase' ); - assert.deepEqual( $.colorUtil.getRGB( '#EEE' ), [238, 238, 238], 'Hex string: 3 char uppercase' ); - assert.deepEqual( $.colorUtil.getRGB( '#eEe' ), [238, 238, 238], 'Hex string: 3 char mixed' ); - assert.deepEqual( $.colorUtil.getRGB( 'rgba(0, 0, 0, 0)' ), [255, 255, 255], 'Zero rgba for Safari 3; Transparent (whitespace)' ); - - // Perhaps this is a bug in colorUtil, but it is the current behaviour so, let's keep - // track of it, so we will know in case it would ever change. - assert.strictEqual( $.colorUtil.getRGB( 'rgba(0,0,0,0)' ), undefined, 'Zero rgba without whitespace' ); - - assert.deepEqual( $.colorUtil.getRGB( 'lightGreen' ), [144, 238, 144], 'Color names (lightGreen)' ); - assert.deepEqual( $.colorUtil.getRGB( 'transparent' ), [255, 255, 255], 'Color names (transparent)' ); - assert.strictEqual( $.colorUtil.getRGB( 'mediaWiki' ), undefined, 'Inexisting color name' ); -}); - -QUnit.test( 'rgbToHsl', 1, function ( assert ) { - var hsl = $.colorUtil.rgbToHsl( 144, 238, 144 ); - - // Cross-browser differences in decimals... - // Round to two decimals so they can be more reliably checked. - var dualDecimals = function(a,b){ - return Math.round(a*100)/100; - }; - // Re-create the rgbToHsl return array items, limited to two decimals. - var ret = [dualDecimals(hsl[0]), dualDecimals(hsl[1]), dualDecimals(hsl[2])]; - - assert.deepEqual( ret, [0.33, 0.73, 0.75], 'rgb(144, 238, 144): hsl(0.33, 0.73, 0.75)' ); -}); - -QUnit.test( 'hslToRgb', 1, function ( assert ) { - var rgb = $.colorUtil.hslToRgb( 0.3, 0.7, 0.8 ); - - // Cross-browser differences in decimals... - // Re-create the hslToRgb return array items, rounded to whole numbers. - var ret = [Math.round(rgb[0]), Math.round(rgb[1]), Math.round(rgb[2])]; - - assert.deepEqual( ret ,[183, 240, 168], 'hsl(0.3, 0.7, 0.8): rgb(183, 240, 168)' ); -}); - -QUnit.test( 'getColorBrightness', 2, function ( assert ) { - var a = $.colorUtil.getColorBrightness( 'red', +0.1 ); - assert.equal( a, 'rgb(255,50,50)', 'Start with named color "red", brighten 10%' ); - - var b = $.colorUtil.getColorBrightness( 'rgb(200,50,50)', -0.2 ); - assert.equal( b, 'rgb(118,29,29)', 'Start with rgb string "rgb(200,50,50)", darken 20%' ); -}); diff --git a/tests/qunit/suites/resources/jquery/jquery.delayedBind.test.js b/tests/qunit/suites/resources/jquery/jquery.delayedBind.test.js deleted file mode 100644 index a3079835..00000000 --- a/tests/qunit/suites/resources/jquery/jquery.delayedBind.test.js +++ /dev/null @@ -1,35 +0,0 @@ -QUnit.asyncTest('jquery.delayedBind with data option', 2, function ( assert ) { - var $fixture = $('
').appendTo('#qunit-fixture'), - data = { magic: "beeswax" }, - delay = 50; - - $fixture.delayedBind(delay, 'testevent', data, function ( e ) { - QUnit.start(); // continue! - assert.ok( true, 'testevent fired'); - assert.ok( e.data === data, 'data is passed through delayedBind'); - }); - - // We'll trigger it thrice, but it should only happen once. - $fixture.trigger( 'testevent', {} ); - $fixture.trigger( 'testevent', {} ); - $fixture.trigger( 'testevent', {} ); - $fixture.trigger( 'testevent', {} ); -}); - -QUnit.asyncTest('jquery.delayedBind without data option', 1, function ( assert ) { - var $fixture = $('
').appendTo('#qunit-fixture'), - data = { magic: "beeswax" }, - delay = 50; - - $fixture.delayedBind(delay, 'testevent', function ( e ) { - QUnit.start(); // continue! - assert.ok(true, 'testevent fired'); - }); - - // We'll trigger it thrice, but it should only happen once. - $fixture.trigger( 'testevent', {} ); - $fixture.trigger( 'testevent', {} ); - $fixture.trigger( 'testevent', {} ); - $fixture.trigger( 'testevent', {} ); -}); - diff --git a/tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js b/tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js deleted file mode 100644 index 6eef1abb..00000000 --- a/tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js +++ /dev/null @@ -1,11 +0,0 @@ -QUnit.module( 'jquery.getAttrs', QUnit.newMwEnvironment() ); - -QUnit.test( 'Check', 1, function ( assert ) { - var attrs = { - foo: 'bar', - 'class': 'lorem' - }, - $el = jQuery( '
', attrs ); - - assert.deepEqual( $el.getAttrs(), attrs, 'getAttrs() return object should match the attributes set, no more, no less' ); -} ); diff --git a/tests/qunit/suites/resources/jquery/jquery.highlightText.test.js b/tests/qunit/suites/resources/jquery/jquery.highlightText.test.js deleted file mode 100644 index a94dca31..00000000 --- a/tests/qunit/suites/resources/jquery/jquery.highlightText.test.js +++ /dev/null @@ -1,232 +0,0 @@ -QUnit.module( 'jquery.highlightText', QUnit.newMwEnvironment() ); - -QUnit.test( 'Check', function ( assert ) { - var $fixture, cases = [ - { - desc: 'Test 001', - text: 'Blue Öyster Cult', - highlight: 'Blue', - expected: 'Blue Öyster Cult' - }, - { - desc: 'Test 002', - text: 'Blue Öyster Cult', - highlight: 'Blue ', - expected: 'Blue Öyster Cult' - }, - { - desc: 'Test 003', - text: 'Blue Öyster Cult', - highlight: 'Blue Ö', - expected: 'Blue Öyster Cult' - }, - { - desc: 'Test 004', - text: 'Blue Öyster Cult', - highlight: 'Blue Öy', - expected: 'Blue Öyster Cult' - }, - { - desc: 'Test 005', - text: 'Blue Öyster Cult', - highlight: ' Blue', - expected: 'Blue Öyster Cult' - }, - { - desc: 'Test 006', - text: 'Blue Öyster Cult', - highlight: ' Blue ', - expected: 'Blue Öyster Cult' - }, - { - desc: 'Test 007', - text: 'Blue Öyster Cult', - highlight: ' Blue Ö', - expected: 'Blue Öyster Cult' - }, - { - desc: 'Test 008', - text: 'Blue Öyster Cult', - highlight: ' Blue Öy', - expected: 'Blue Öyster Cult' - }, - { - desc: 'Test 009: Highlighter broken on starting Umlaut?', - text: 'Österreich', - highlight: 'Österreich', - expected: 'Österreich' - }, - { - desc: 'Test 010: Highlighter broken on starting Umlaut?', - text: 'Österreich', - highlight: 'Ö', - expected: 'Österreich' - }, - { - desc: 'Test 011: Highlighter broken on starting Umlaut?', - text: 'Österreich', - highlight: 'Öst', - expected: 'Österreich' - }, - { - desc: 'Test 012: Highlighter broken on starting Umlaut?', - text: 'Österreich', - highlight: 'Oe', - expected: 'Österreich' - }, - { - desc: 'Test 013: Highlighter broken on punctuation mark?', - text: 'So good. To be there', - highlight: 'good', - expected: 'So good. To be there' - }, - { - desc: 'Test 014: Highlighter broken on space?', - text: 'So good. To be there', - highlight: 'be', - expected: 'So good. To be there' - }, - { - desc: 'Test 015: Highlighter broken on space?', - text: 'So good. To be there', - highlight: ' be', - expected: 'So good. To be there' - }, - { - desc: 'Test 016: Highlighter broken on space?', - text: 'So good. To be there', - highlight: 'be ', - expected: 'So good. To be there' - }, - { - desc: 'Test 017: Highlighter broken on space?', - text: 'So good. To be there', - highlight: ' be ', - expected: 'So good. To be there' - }, - { - desc: 'Test 018: en de Highlighter broken on special character at the end?', - text: 'So good. xbß', - highlight: 'xbß', - expected: 'So good. xbß' - }, - { - desc: 'Test 019: en de Highlighter broken on special character at the end?', - text: 'So good. xbß.', - highlight: 'xbß.', - expected: 'So good. xbß.' - }, - { - desc: 'Test 020: RTL he Hebrew', - text: 'חסיד אומות העולם', - highlight: 'חסיד אומות העולם', - expected: 'חסיד אומות העולם' - }, - { - desc: 'Test 021: RTL he Hebrew', - text: 'חסיד אומות העולם', - highlight: 'חסי', - expected: 'חסיד אומות העולם' - }, - { - desc: 'Test 022: ja Japanese', - text: '諸国民の中の正義の人', - highlight: '諸国民の中の正義の人', - expected: '諸国民の中の正義の人' - }, - { - desc: 'Test 023: ja Japanese', - text: '諸国民の中の正義の人', - highlight: '諸国', - expected: '諸国民の中の正義の人' - }, - { - desc: 'Test 024: fr French text and « french quotes » (guillemets)', - text: "« L'oiseau est sur l’île »", - highlight: "« L'oiseau est sur l’île »", - expected: '« L\'oiseau est sur l’île »' - }, - { - desc: 'Test 025: fr French text and « french quotes » (guillemets)', - text: "« L'oiseau est sur l’île »", - highlight: "« L'oise", - expected: '« L\'oiseau est sur l’île »' - }, - { - desc: 'Test 025a: fr French text and « french quotes » (guillemets) - does it match the single strings "«" and "L" separately?', - text: "« L'oiseau est sur l’île »", - highlight: "« L", - expected: '« L\'oiseau est sur l’île »' - }, - { - desc: 'Test 026: ru Russian', - text: 'Праведники мира', - highlight: 'Праведники мира', - expected: 'Праведники мира' - }, - { - desc: 'Test 027: ru Russian', - text: 'Праведники мира', - highlight: 'Праве', - expected: 'Праведники мира' - }, - { - desc: 'Test 028 ka Georgian', - text: 'მთავარი გვერდი', - highlight: 'მთავარი გვერდი', - expected: 'მთავარი გვერდი' - }, - { - desc: 'Test 029 ka Georgian', - text: 'მთავარი გვერდი', - highlight: 'მთა', - expected: 'მთავარი გვერდი' - }, - { - desc: 'Test 030 hy Armenian', - text: 'Նոնա Գափրինդաշվիլի', - highlight: 'Նոնա Գափրինդաշվիլի', - expected: 'Նոնա Գափրինդաշվիլի' - }, - { - desc: 'Test 031 hy Armenian', - text: 'Նոնա Գափրինդաշվիլի', - highlight: 'Նոն', - expected: 'Նոնա Գափրինդաշվիլի' - }, - { - desc: 'Test 032: th Thai', - text: 'พอล แอร์ดิช', - highlight: 'พอล แอร์ดิช', - expected: 'พอล แอร์ดิช' - }, - { - desc: 'Test 033: th Thai', - text: 'พอล แอร์ดิช', - highlight: 'พอ', - expected: 'พอล แอร์ดิช' - }, - { - desc: 'Test 034: RTL ar Arabic', - text: 'بول إيردوس', - highlight: 'بول إيردوس', - expected: 'بول إيردوس' - }, - { - desc: 'Test 035: RTL ar Arabic', - text: 'بول إيردوس', - highlight: 'بو', - expected: 'بول إيردوس' - } - ]; - QUnit.expect( cases.length ); - - $.each( cases, function ( i, item ) { - $fixture = $( '

' ).text( item.text ).highlightText( item.highlight ); - assert.equal( - $fixture.html(), - $( '

' ).html( item.expected ).html(), // re-parse to normalize! - item.desc || undefined - ); - } ); -} ); diff --git a/tests/qunit/suites/resources/jquery/jquery.localize.test.js b/tests/qunit/suites/resources/jquery/jquery.localize.test.js deleted file mode 100644 index c8e1d9f9..00000000 --- a/tests/qunit/suites/resources/jquery/jquery.localize.test.js +++ /dev/null @@ -1,133 +0,0 @@ -QUnit.module( 'jquery.localize', QUnit.newMwEnvironment() ); - -QUnit.test( 'Handle basic replacements', 4, function ( assert ) { - var html, $lc; - mw.messages.set( 'basic', 'Basic stuff' ); - - // Tag: html:msg - html = '

'; - $lc = $( html ).localize().find( 'span' ); - - assert.strictEqual( $lc.text(), 'Basic stuff', 'Tag: html:msg' ); - - // Attribute: title-msg - html = '
'; - $lc = $( html ).localize().find( 'span' ); - - assert.strictEqual( $lc.attr( 'title' ), 'Basic stuff', 'Attribute: title-msg' ); - - // Attribute: alt-msg - html = '
'; - $lc = $( html ).localize().find( 'span' ); - - assert.strictEqual( $lc.attr( 'alt' ), 'Basic stuff', 'Attribute: alt-msg' ); - - // Attribute: placeholder-msg - html = '
'; - $lc = $( html ).localize().find( 'input' ); - - assert.strictEqual( $lc.attr( 'placeholder' ), 'Basic stuff', 'Attribute: placeholder-msg' ); -} ); - -QUnit.test( 'Proper escaping', 2, function ( assert ) { - var html, $lc; - mw.messages.set( 'properfoo', '' ); - - // This is handled by jQuery inside $.fn.localize, just a simple sanity checked - // making sure it is actually using text() and attr() (or something with the same effect) - - // Text escaping - html = '
'; - $lc = $( html ).localize().find( 'span' ); - - assert.strictEqual( $lc.text(), mw.msg( 'properfoo' ), 'Content is inserted as text, not as html.' ); - - // Attribute escaping - html = '
'; - $lc = $( html ).localize().find( 'span' ); - - assert.strictEqual( $lc.attr( 'title' ), mw.msg( 'properfoo' ), 'Attributes are not inserted raw.' ); -} ); - -QUnit.test( 'Options', 7, function ( assert ) { - mw.messages.set( { - 'foo-lorem': 'Lorem', - 'foo-ipsum': 'Ipsum', - 'foo-bar-title': 'Read more about bars', - 'foo-bar-label': 'The Bars', - 'foo-bazz-title': 'Read more about bazz at $1 (last modified: $2)', - 'foo-bazz-label': 'The Bazz ($1)', - 'foo-welcome': 'Welcome to $1! (last visit: $2)' - } ); - var html, $lc, attrs, x, sitename = 'Wikipedia'; - - // Message key prefix - html = '
'; - $lc = $( html ).localize( { - prefix: 'foo-' - } ).find( 'span' ); - - assert.strictEqual( $lc.attr( 'title' ), 'Lorem', 'Message key prefix - attr' ); - assert.strictEqual( $lc.text(), 'Ipsum', 'Message key prefix - text' ); - - // Variable keys mapping - x = 'bar'; - html = '
'; - $lc = $( html ).localize( { - keys: { - 'title': 'foo-' + x + '-title', - 'label': 'foo-' + x + '-label' - } - } ).find( 'span' ); - - assert.strictEqual( $lc.attr( 'title' ), 'Read more about bars', 'Variable keys mapping - attr' ); - assert.strictEqual( $lc.text(), 'The Bars', 'Variable keys mapping - text' ); - - // Passing parameteters to mw.msg - html = '
'; - $lc = $( html ).localize( { - params: { - 'foo-welcome': [sitename, 'yesterday'] - } - } ).find( 'span' ); - - assert.strictEqual( $lc.text(), 'Welcome to Wikipedia! (last visit: yesterday)', 'Passing parameteters to mw.msg' ); - - // Combination of options prefix, params and keys - x = 'bazz'; - html = '
'; - $lc = $( html ).localize( { - prefix: 'foo-', - keys: { - 'title': x + '-title', - 'label': x + '-label' - }, - params: { - 'title': [sitename, '3 minutes ago'], - 'label': [sitename, '3 minutes ago'] - - } - } ).find( 'span' ); - - assert.strictEqual( $lc.text(), 'The Bazz (Wikipedia)', 'Combination of options prefix, params and keys - text' ); - assert.strictEqual( $lc.attr( 'title' ), 'Read more about bazz at Wikipedia (last modified: 3 minutes ago)', 'Combination of options prefix, params and keys - attr' ); -} ); - -QUnit.test( 'Handle data text', 2, function ( assert ) { - var html, $lc; - mw.messages.set( 'option-one', 'Item 1' ); - mw.messages.set( 'option-two', 'Item 2' ); - html = ''; - $lc = $( html ).localize().find( 'option' ); - assert.strictEqual( $lc.eq( 0 ).text(), mw.msg( 'option-one' ), 'data-msg-text becomes text of options' ); - assert.strictEqual( $lc.eq( 1 ).text(), mw.msg( 'option-two' ), 'data-msg-text becomes text of options' ); -} ); - -QUnit.test( 'Handle data html', 2, function ( assert ) { - var html, $lc; - mw.messages.set( 'html', 'behold... there is a link here!!' ); - html = '
'; - $lc = $( html ).localize().find( 'a' ); - assert.strictEqual( $lc.length, 1, 'link is created' ); - assert.strictEqual( $lc.text(), 'link', 'the link text got added' ); -} ); diff --git a/tests/qunit/suites/resources/jquery/jquery.mwExtension.test.js b/tests/qunit/suites/resources/jquery/jquery.mwExtension.test.js deleted file mode 100644 index 5b566ae0..00000000 --- a/tests/qunit/suites/resources/jquery/jquery.mwExtension.test.js +++ /dev/null @@ -1,58 +0,0 @@ -QUnit.module( 'jquery.mwExtension', QUnit.newMwEnvironment() ); - -QUnit.test( 'String functions', function ( assert ) { - - assert.equal( $.trimLeft( ' foo bar ' ), 'foo bar ', 'trimLeft' ); - assert.equal( $.trimRight( ' foo bar ' ), ' foo bar', 'trimRight' ); - assert.equal( $.ucFirst( 'foo' ), 'Foo', 'ucFirst' ); - - assert.equal( $.escapeRE( '