From 96f40f152aa6070ea98f41e194e9704194f917f8 Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Wed, 22 Feb 2017 10:46:19 -0800 Subject: [PATCH] qunit: Make eslint config pass on qunit test files Follows-up c0fb8a8836, I890e6e49b. * Disable 'qunit' env in general source code. And re-declare locally in the few src files that use it properly. * Create separate eslint config for tests/qunit with various rules disabled (e.g. valid-jsdoc and es3-keywords). Change-Id: I37ccec2019de55edfee92697eb80478df7cb6220 --- .eslintrc.json | 3 +- Gruntfile.js | 3 +- .../jquery/jquery.qunit.completenessTest.js | 1 + tests/qunit/.eslintrc.json | 14 + tests/qunit/data/generateJqueryMsgData.php | 1 + tests/qunit/data/mediawiki.jqueryMsg.data.js | 1 + tests/qunit/data/testrunner.js | 10 +- .../jquery/jquery.accessKeyLabel.test.js | 80 ++-- .../resources/jquery/jquery.getAttrs.test.js | 2 +- .../jquery/jquery.highlightText.test.js | 437 +++++++++--------- .../resources/jquery/jquery.localize.test.js | 2 +- .../jquery/jquery.makeCollapsible.test.js | 12 +- .../jquery/jquery.placeholder.test.js | 31 +- .../jquery/jquery.tablesorter.parsers.test.js | 6 +- .../jquery/jquery.tablesorter.test.js | 10 +- .../jquery/jquery.textSelection.test.js | 49 +- .../mediawiki.api/mediawiki.api.edit.test.js | 8 +- .../mediawiki.api.options.test.js | 54 +-- .../mediawiki.api/mediawiki.api.parse.test.js | 2 +- .../mediawiki.api/mediawiki.api.test.js | 40 +- .../dm.FiltersViewModel.test.js | 16 +- .../mediawiki/mediawiki.Title.test.js | 148 +++--- .../mediawiki/mediawiki.cldr.test.js | 7 +- .../mediawiki/mediawiki.errorLogger.test.js | 2 +- .../mediawiki/mediawiki.jqueryMsg.test.js | 22 +- .../mediawiki/mediawiki.language.test.js | 8 +- .../mediawiki/mediawiki.loader.test.js | 6 +- .../mediawiki/mediawiki.util.test.js | 20 +- tests/qunit/suites/resources/startup.test.js | 12 +- 29 files changed, 520 insertions(+), 487 deletions(-) create mode 100644 tests/qunit/.eslintrc.json diff --git a/.eslintrc.json b/.eslintrc.json index 98d0f10fa9..64b5ea7835 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -2,8 +2,7 @@ "extends": "wikimedia", "env": { "browser": true, - "jquery": true, - "qunit": true + "jquery": true }, "globals": { "require": false, diff --git a/Gruntfile.js b/Gruntfile.js index 191286ad7a..0e1c8cb2c2 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -24,12 +24,13 @@ module.exports = function ( grunt ) { all: [ '**/*.js', '!docs/**', - '!tests/**', '!node_modules/**', '!resources/lib/**', '!resources/src/jquery.tipsy/**', '!resources/src/jquery/jquery.farbtastic.js', '!resources/src/mediawiki.libs/**', + // Third-party code of PHPUnit coverage report + '!tests/coverage/**', '!vendor/**', // Explicitly say "**/*.js" here in case of symlinks '!extensions/**/*.js', diff --git a/resources/src/jquery/jquery.qunit.completenessTest.js b/resources/src/jquery/jquery.qunit.completenessTest.js index 4353dd7d1d..0aaa4ff39d 100644 --- a/resources/src/jquery/jquery.qunit.completenessTest.js +++ b/resources/src/jquery/jquery.qunit.completenessTest.js @@ -12,6 +12,7 @@ * * @author Timo Tijhof, 2011-2012 */ +/* eslint-env qunit */ ( function ( mw, $ ) { 'use strict'; diff --git a/tests/qunit/.eslintrc.json b/tests/qunit/.eslintrc.json new file mode 100644 index 0000000000..b3a46f466a --- /dev/null +++ b/tests/qunit/.eslintrc.json @@ -0,0 +1,14 @@ +{ + "extends": "../../.eslintrc.json", + "env": { + "qunit": true + }, + "globals": { + "sinon": false + }, + "rules": { + "operator-linebreak": 0, + "quote-props": [ "error", "as-needed" ], + "valid-jsdoc": 0 + } +} diff --git a/tests/qunit/data/generateJqueryMsgData.php b/tests/qunit/data/generateJqueryMsgData.php index d02d476b70..1c79f6d12e 100644 --- a/tests/qunit/data/generateJqueryMsgData.php +++ b/tests/qunit/data/generateJqueryMsgData.php @@ -133,6 +133,7 @@ class GenerateJqueryMsgData extends Maintenance { . "// languages, and parser modes. Intended for use by a unit test framework by looping\n" . "// through the object and comparing its parser return value with the 'result' property.\n" . '// Last generated with ' . basename( __FILE__ ) . ' at ' . gmdate( 'r' ) . "\n" + . "/* eslint-disable */\n" . "\n" . 'mediaWiki.libs.phpParserData = ' . FormatJson::encode( $phpParserData, true ) . ";\n"; diff --git a/tests/qunit/data/mediawiki.jqueryMsg.data.js b/tests/qunit/data/mediawiki.jqueryMsg.data.js index db723b6318..90dc1b28a6 100644 --- a/tests/qunit/data/mediawiki.jqueryMsg.data.js +++ b/tests/qunit/data/mediawiki.jqueryMsg.data.js @@ -2,6 +2,7 @@ // languages, and parser modes. Intended for use by a unit test framework by looping // through the object and comparing its parser return value with the 'result' property. // Last generated with generateJqueryMsgData.php at Fri, 10 Jul 2015 11:44:08 +0000 +/* eslint-disable */ mediaWiki.libs.phpParserData = { "messages": { diff --git a/tests/qunit/data/testrunner.js b/tests/qunit/data/testrunner.js index 683dc1d610..cef5c15e4f 100644 --- a/tests/qunit/data/testrunner.js +++ b/tests/qunit/data/testrunner.js @@ -1,8 +1,8 @@ -/*global CompletenessTest, sinon */ +/* global CompletenessTest, sinon */ ( function ( $, mw, QUnit ) { 'use strict'; - var mwTestIgnore, mwTester, addons; + var mwTestIgnore, addons; /** * Add bogus to url to prevent IE crazy caching @@ -26,6 +26,7 @@ QUnit.config.testTimeout = 60 * 1000; // Reduce default animation duration from 400ms to 0ms for unit tests + // eslint-disable-next-line no-underscore-dangle $.fx.speeds._default = 0; // Add a checkbox to QUnit header to toggle MediaWiki ResourceLoader debug mode. @@ -157,7 +158,8 @@ return false; }; - mwTester = new CompletenessTest( mw, mwTestIgnore ); + // eslint-disable-next-line no-new + new CompletenessTest( mw, mwTestIgnore ); } /** @@ -209,7 +211,7 @@ } function freshMessagesCopy( custom ) { - return $.extend( /*deep=*/true, {}, liveMessages.get(), custom ); + return $.extend( /* deep */true, {}, liveMessages.get(), custom ); } /** diff --git a/tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js b/tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js index 9af443dbd0..e4b615726b 100644 --- a/tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js +++ b/tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js @@ -1,4 +1,6 @@ ( function ( $ ) { + var getAccessKeyPrefixTestData, updateTooltipAccessKeysTestData; + QUnit.module( 'jquery.accessKeyLabel', QUnit.newMwEnvironment( { messages: { brackets: '[$1]', @@ -6,40 +8,40 @@ } } ) ); - var getAccessKeyPrefixTestData = [ - // ua string, platform string, expected prefix - // Internet Explorer - [ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 'Win32', 'alt-' ], - [ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)', 'Win32', 'alt-' ], - [ 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko', 'Win64', 'alt-' ], - [ 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136', 'Win64', 'alt-' ], - // Firefox - [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.19) Gecko/20110420 Firefox/3.5.19', 'MacIntel', 'ctrl-' ], - [ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.10 (maverick) Firefox/3.6.17', 'Linux i686', 'alt-shift-' ], - [ 'Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', 'Win32', 'alt-shift-' ], - [ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0', 'MacIntel', 'ctrl-option-' ], - [ 'Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20121202 Firefox/17.0 Iceweasel/17.0.1', 'Linux 1686', 'alt-shift-' ], - [ 'Mozilla/5.0 (Windows NT 5.2; U; de; rv:1.8.0) Gecko/20060728 Firefox/1.5.0', 'Win32', 'alt-' ], - // Safari / Konqueror - [ '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', 'MacIntel', 'ctrl-option-' ], - [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; de-de) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.28.3', 'MacIntel', 'ctrl-' ], - [ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; cs-CZ) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.29', 'Win32', 'alt-' ], - [ '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', 'Win32', 'alt-' ], - [ 'Mozilla/5.0 (X11; Linux i686) KHTML/4.9.1 (like Gecko) Konqueror/4.9', 'Linux i686', 'ctrl-' ], - // Opera - [ 'Opera/9.80 (Windows NT 5.1)', 'Win32', 'shift-esc-' ], - [ 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130', 'Win32', 'alt-shift-' ], - // Chrome - [ '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', 'MacIntel', 'ctrl-option-' ], - [ 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30', 'Linux i686', 'alt-shift-' ], - // Unknown! Note: These aren't necessarily *right*, this is just - // testing that we're getting the expected output based on the - // platform. - [ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.0.1) Gecko/20021111 Chimera/0.6', 'MacPPC', 'ctrl-' ], - [ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.3a) Gecko/20021207 Phoenix/0.5', 'Linux i686', 'alt-' ] - ], - // strings appended to title to make sure updateTooltipAccessKeys handles them correctly - updateTooltipAccessKeysTestData = [ '', ' [a]', ' [test-a]', ' [alt-b]' ]; + getAccessKeyPrefixTestData = [ + // ua string, platform string, expected prefix + // Internet Explorer + [ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 'Win32', 'alt-' ], + [ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)', 'Win32', 'alt-' ], + [ 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko', 'Win64', 'alt-' ], + [ 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136', 'Win64', 'alt-' ], + // Firefox + [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.19) Gecko/20110420 Firefox/3.5.19', 'MacIntel', 'ctrl-' ], + [ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.10 (maverick) Firefox/3.6.17', 'Linux i686', 'alt-shift-' ], + [ 'Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', 'Win32', 'alt-shift-' ], + [ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0', 'MacIntel', 'ctrl-option-' ], + [ 'Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20121202 Firefox/17.0 Iceweasel/17.0.1', 'Linux 1686', 'alt-shift-' ], + [ 'Mozilla/5.0 (Windows NT 5.2; U; de; rv:1.8.0) Gecko/20060728 Firefox/1.5.0', 'Win32', 'alt-' ], + // Safari / Konqueror + [ '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', 'MacIntel', 'ctrl-option-' ], + [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; de-de) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.28.3', 'MacIntel', 'ctrl-' ], + [ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; cs-CZ) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.29', 'Win32', 'alt-' ], + [ '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', 'Win32', 'alt-' ], + [ 'Mozilla/5.0 (X11; Linux i686) KHTML/4.9.1 (like Gecko) Konqueror/4.9', 'Linux i686', 'ctrl-' ], + // Opera + [ 'Opera/9.80 (Windows NT 5.1)', 'Win32', 'shift-esc-' ], + [ 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130', 'Win32', 'alt-shift-' ], + // Chrome + [ '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', 'MacIntel', 'ctrl-option-' ], + [ 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30', 'Linux i686', 'alt-shift-' ], + // Unknown! Note: These aren't necessarily *right*, this is just + // testing that we're getting the expected output based on the + // platform. + [ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.0.1) Gecko/20021111 Chimera/0.6', 'MacPPC', 'ctrl-' ], + [ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.3a) Gecko/20021207 Phoenix/0.5', 'Linux i686', 'alt-' ] + ]; + // strings appended to title to make sure updateTooltipAccessKeys handles them correctly + updateTooltipAccessKeysTestData = [ '', ' [a]', ' [test-a]', ' [alt-b]' ]; function makeInput( title, accessKey ) { // The properties aren't escaped, so make sure you don't call this function with values that need to be escaped! @@ -78,8 +80,8 @@ } ); QUnit.test( 'updateTooltipAccessKeys - with access key', function ( assert ) { - $.fn.updateTooltipAccessKeys.setTestMode( true ); var i, oldTitle, $input, newTitle; + $.fn.updateTooltipAccessKeys.setTestMode( true ); for ( i = 0; i < updateTooltipAccessKeysTestData.length; i++ ) { oldTitle = 'Title' + updateTooltipAccessKeysTestData[ i ]; $input = $( makeInput( oldTitle, 'a' ) ); @@ -91,9 +93,9 @@ } ); QUnit.test( 'updateTooltipAccessKeys with label element', function ( assert ) { + var html, $label, $input; $.fn.updateTooltipAccessKeys.setTestMode( true ); - var html = '', - $label, $input; + html = ''; $( '#qunit-fixture' ).html( html ); $label = $( '#qunit-fixture label' ); $input = $( '#qunit-fixture input' ); @@ -104,9 +106,9 @@ } ); QUnit.test( 'updateTooltipAccessKeys with label element as parent', function ( assert ) { + var html, $label, $input; $.fn.updateTooltipAccessKeys.setTestMode( true ); - var html = '', - $label, $input; + html = ''; $( '#qunit-fixture' ).html( html ); $label = $( '#qunit-fixture label' ); $input = $( '#qunit-fixture input' ); diff --git a/tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js b/tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js index 28789995d6..74d85090d6 100644 --- a/tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js +++ b/tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js @@ -4,7 +4,7 @@ QUnit.test( 'getAttrs()', function ( assert ) { var attrs = { foo: 'bar', - 'class': 'lorem', + class: 'lorem', 'data-foo': 'data value' }, $el = $( '
' ).attr( attrs ); diff --git a/tests/qunit/suites/resources/jquery/jquery.highlightText.test.js b/tests/qunit/suites/resources/jquery/jquery.highlightText.test.js index 9f8759622c..0dac22e9df 100644 --- a/tests/qunit/suites/resources/jquery/jquery.highlightText.test.js +++ b/tests/qunit/suites/resources/jquery/jquery.highlightText.test.js @@ -2,224 +2,225 @@ 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: 'بول إيردوس' - } - ]; + 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: 'بول إيردوس' + } + ]; $.each( cases, function ( i, item ) { $fixture = $( '

' ).text( item.text ).highlightText( item.highlight ); diff --git a/tests/qunit/suites/resources/jquery/jquery.localize.test.js b/tests/qunit/suites/resources/jquery/jquery.localize.test.js index 1b688097ca..a3e46abe1e 100644 --- a/tests/qunit/suites/resources/jquery/jquery.localize.test.js +++ b/tests/qunit/suites/resources/jquery/jquery.localize.test.js @@ -51,6 +51,7 @@ } ); QUnit.test( 'Options', function ( assert ) { + var html, $lc, x, sitename = 'Wikipedia'; mw.messages.set( { 'foo-lorem': 'Lorem', 'foo-ipsum': 'Ipsum', @@ -60,7 +61,6 @@ 'foo-bazz-label': 'The Bazz ($1)', 'foo-welcome': 'Welcome to $1! (last visit: $2)' } ); - var html, $lc, x, sitename = 'Wikipedia'; // Message key prefix html = '

'; diff --git a/tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js b/tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js index b80af4c634..4e77d72127 100644 --- a/tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js +++ b/tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js @@ -12,8 +12,7 @@ // This test is first because if it fails, then almost all of the latter tests are meaningless. QUnit.test( 'testing hooks/triggers', function ( assert ) { - var test = this, - $collapsible = prepareCollapsible( + var $collapsible = prepareCollapsible( '
' + loremIpsum + '
' ), $content = $collapsible.find( '.mw-collapsible-content' ), @@ -45,8 +44,7 @@ } ); QUnit.test( 'basic operation (
)', function ( assert ) { - var test = this, - $collapsible = prepareCollapsible( + var $collapsible = prepareCollapsible( '
' + loremIpsum + '
' ), $content = $collapsible.find( '.mw-collapsible-content' ), @@ -71,8 +69,7 @@ } ); QUnit.test( 'basic operation ()', function ( assert ) { - var test = this, - $collapsible = prepareCollapsible( + var $collapsible = prepareCollapsible( '
' + '' + '' + @@ -319,8 +316,7 @@ } ); QUnit.test( 'cloned collapsibles can be made collapsible again', function ( assert ) { - var test = this, - $collapsible = prepareCollapsible( + var $collapsible = prepareCollapsible( '
' + loremIpsum + '
' ), $clone = $collapsible.clone() // clone without data and events diff --git a/tests/qunit/suites/resources/jquery/jquery.placeholder.test.js b/tests/qunit/suites/resources/jquery/jquery.placeholder.test.js index 73e431339c..dd7666b651 100644 --- a/tests/qunit/suites/resources/jquery/jquery.placeholder.test.js +++ b/tests/qunit/suites/resources/jquery/jquery.placeholder.test.js @@ -1,4 +1,5 @@ ( function ( $ ) { + var html, testElement; QUnit.module( 'jquery.placeholder', QUnit.newMwEnvironment() ); @@ -11,17 +12,16 @@ return; } - var html = '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '', + html = '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + ''; testElement = function ( $el, assert ) { - var el = $el[ 0 ], placeholder = el.getAttribute( 'placeholder' ); @@ -93,12 +93,13 @@ } ); QUnit.test( 'emulates placeholder for ', function ( assert ) { + var $el, el, placeholder, selector = '#input-type-password'; + $( '
' ).html( html ).appendTo( $( '#qunit-fixture' ) ); - var selector = '#input-type-password', - $el = $( selector ), - el = $el[ 0 ], - placeholder = el.getAttribute( 'placeholder' ); + $el = $( selector ); + el = $el[ 0 ]; + placeholder = el.getAttribute( 'placeholder' ); assert.strictEqual( $el.placeholder(), $el, 'should be chainable' ); @@ -137,7 +138,7 @@ } ); - QUnit.test( 'emulates placeholder for ', function ( assert ) { + QUnit.test( 'emulates placeholder for
' + loremIpsum + '' + loremIpsum + '
' + loremIpsum + '' + loremIpsum + '