summaryrefslogtreecommitdiff
path: root/tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js')
-rw-r--r--tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js413
1 files changed, 231 insertions, 182 deletions
diff --git a/tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js b/tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
index f63aa27a..d4d0ce1e 100644
--- a/tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
+++ b/tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
@@ -1,5 +1,19 @@
( function ( $, mw ) {
- var header,
+ var header = [ 'Planet', 'Radius (km)' ],
+
+ // Data set "planets"
+ mercury = [ 'Mercury', '2439.7' ],
+ venus = [ 'Venus', '6051.8' ],
+ earth = [ 'Earth', '6371.0' ],
+ mars = [ 'Mars', '3390.0' ],
+ jupiter = [ 'Jupiter', '69911' ],
+ saturn = [ 'Saturn', '58232' ],
+ planets = [ mercury, venus, earth, mars, jupiter, saturn ],
+ planetsAscName = [ earth, jupiter, mars, mercury, saturn, venus ],
+ planetsAscRadius = [ mercury, mars, venus, earth, saturn, jupiter ],
+ planetsRowspan,
+ planetsRowspanII,
+ planetsAscNameLegacy,
// Data set "simple"
a1 = [ 'A', '1' ],
@@ -8,11 +22,12 @@
b1 = [ 'B', '1' ],
b2 = [ 'B', '2' ],
b3 = [ 'B', '3' ],
- simple = [a2, b3, a1, a3, b2, b1],
- simpleAsc = [a1, a2, a3, b1, b2, b3],
- simpleDescasc = [b1, b2, b3, a1, a2, a3],
+ simple = [ a2, b3, a1, a3, b2, b1 ],
+ simpleAsc = [ a1, a2, a3, b1, b2, b3 ],
+ simpleDescasc = [ b1, b2, b3, a1, a2, a3 ],
// Data set "colspan"
+ header4 = [ 'column1a', 'column1b', 'column1c', 'column2' ],
aaa1 = [ 'A', 'A', 'A', '1' ],
aab5 = [ 'A', 'A', 'B', '5' ],
abc3 = [ 'A', 'B', 'C', '3' ],
@@ -20,159 +35,145 @@
caa4 = [ 'C', 'A', 'A', '4' ],
colspanInitial = [ aab5, aaa1, abc3, bbc2, caa4 ],
- // Data set "planets"
- mercury = [ 'Mercury', '2439.7' ],
- venus = [ 'Venus', '6051.8' ],
- earth = [ 'Earth', '6371.0' ],
- mars = [ 'Mars', '3390.0' ],
- jupiter = [ 'Jupiter', '69911' ],
- saturn = [ 'Saturn', '58232' ],
- planets = [mercury, venus, earth, mars, jupiter, saturn],
- planetsAscName = [earth, jupiter, mars, mercury, saturn, venus],
- planetsAscRadius = [mercury, mars, venus, earth, saturn, jupiter],
- planetsRowspan,
- planetsRowspanII,
- planetsAscNameLegacy,
-
// Data set "ipv4"
ipv4 = [
// Some randomly generated fake IPs
- ['45.238.27.109'],
- ['44.172.9.22'],
- ['247.240.82.209'],
- ['204.204.132.158'],
- ['170.38.91.162'],
- ['197.219.164.9'],
- ['45.68.154.72'],
- ['182.195.149.80']
+ [ '45.238.27.109' ],
+ [ '44.172.9.22' ],
+ [ '247.240.82.209' ],
+ [ '204.204.132.158' ],
+ [ '170.38.91.162' ],
+ [ '197.219.164.9' ],
+ [ '45.68.154.72' ],
+ [ '182.195.149.80' ]
],
ipv4Sorted = [
// Sort order should go octet by octet
- ['44.172.9.22'],
- ['45.68.154.72'],
- ['45.238.27.109'],
- ['170.38.91.162'],
- ['182.195.149.80'],
- ['197.219.164.9'],
- ['204.204.132.158'],
- ['247.240.82.209']
+ [ '44.172.9.22' ],
+ [ '45.68.154.72' ],
+ [ '45.238.27.109' ],
+ [ '170.38.91.162' ],
+ [ '182.195.149.80' ],
+ [ '197.219.164.9' ],
+ [ '204.204.132.158' ],
+ [ '247.240.82.209' ]
],
// Data set "umlaut"
umlautWords = [
- ['Günther'],
- ['Peter'],
- ['Björn'],
- ['Bjorn'],
- ['Apfel'],
- ['Äpfel'],
- ['Strasse'],
- ['Sträßschen']
+ [ 'Günther' ],
+ [ 'Peter' ],
+ [ 'Björn' ],
+ [ 'Bjorn' ],
+ [ 'Apfel' ],
+ [ 'Äpfel' ],
+ [ 'Strasse' ],
+ [ 'Sträßschen' ]
],
umlautWordsSorted = [
- ['Äpfel'],
- ['Apfel'],
- ['Björn'],
- ['Bjorn'],
- ['Günther'],
- ['Peter'],
- ['Sträßschen'],
- ['Strasse']
+ [ 'Äpfel' ],
+ [ 'Apfel' ],
+ [ 'Björn' ],
+ [ 'Bjorn' ],
+ [ 'Günther' ],
+ [ 'Peter' ],
+ [ 'Sträßschen' ],
+ [ 'Strasse' ]
],
complexMDYDates = [
- ['January, 19 2010'],
- ['April 21 1991'],
- ['04 22 1991'],
- ['5.12.1990'],
- ['December 12 \'10']
+ [ 'January, 19 2010' ],
+ [ 'April 21 1991' ],
+ [ '04 22 1991' ],
+ [ '5.12.1990' ],
+ [ 'December 12 \'10' ]
],
complexMDYSorted = [
- ['5.12.1990'],
- ['April 21 1991'],
- ['04 22 1991'],
- ['January, 19 2010'],
- ['December 12 \'10']
+ [ '5.12.1990' ],
+ [ 'April 21 1991' ],
+ [ '04 22 1991' ],
+ [ 'January, 19 2010' ],
+ [ 'December 12 \'10' ]
],
currencyUnsorted = [
- ['1.02 $'],
- ['$ 3.00'],
- ['€ 2,99'],
- ['$ 1.00'],
- ['$3.50'],
- ['$ 1.50'],
- ['€ 0.99']
+ [ '1.02 $' ],
+ [ '$ 3.00' ],
+ [ '€ 2,99' ],
+ [ '$ 1.00' ],
+ [ '$3.50' ],
+ [ '$ 1.50' ],
+ [ '€ 0.99' ]
],
currencySorted = [
- ['€ 0.99'],
- ['$ 1.00'],
- ['1.02 $'],
- ['$ 1.50'],
- ['$ 3.00'],
- ['$3.50'],
+ [ '€ 0.99' ],
+ [ '$ 1.00' ],
+ [ '1.02 $' ],
+ [ '$ 1.50' ],
+ [ '$ 3.00' ],
+ [ '$3.50' ],
// Comma's sort after dots
// Not intentional but test to detect changes
- ['€ 2,99']
+ [ '€ 2,99' ]
],
numbers = [
- [ '12' ],
- [ '7' ],
- [ '13,000'],
- [ '9' ],
- [ '14' ],
- [ '8.0' ]
+ [ '12' ],
+ [ '7' ],
+ [ '13,000' ],
+ [ '9' ],
+ [ '14' ],
+ [ '8.0' ]
],
numbersAsc = [
- [ '7' ],
- [ '8.0' ],
- [ '9' ],
- [ '12' ],
- [ '14' ],
- [ '13,000']
+ [ '7' ],
+ [ '8.0' ],
+ [ '9' ],
+ [ '12' ],
+ [ '14' ],
+ [ '13,000' ]
],
correctDateSorting1 = [
- ['01 January 2010'],
- ['05 February 2010'],
- ['16 January 2010']
+ [ '01 January 2010' ],
+ [ '05 February 2010' ],
+ [ '16 January 2010' ]
],
correctDateSortingSorted1 = [
- ['01 January 2010'],
- ['16 January 2010'],
- ['05 February 2010']
+ [ '01 January 2010' ],
+ [ '16 January 2010' ],
+ [ '05 February 2010' ]
],
correctDateSorting2 = [
- ['January 01 2010'],
- ['February 05 2010'],
- ['January 16 2010']
+ [ 'January 01 2010' ],
+ [ 'February 05 2010' ],
+ [ 'January 16 2010' ]
],
correctDateSortingSorted2 = [
- ['January 01 2010'],
- ['January 16 2010'],
- ['February 05 2010']
+ [ 'January 01 2010' ],
+ [ 'January 16 2010' ],
+ [ 'February 05 2010' ]
];
QUnit.module( 'jquery.tablesorter', QUnit.newMwEnvironment( {
setup: function () {
this.liveMonths = mw.language.months;
mw.language.months = {
- 'keys': {
- 'names': ['january', 'february', 'march', 'april', 'may_long', 'june',
- 'july', 'august', 'september', 'october', 'november', 'december'],
- 'genitive': ['january-gen', 'february-gen', 'march-gen', 'april-gen', 'may-gen', 'june-gen',
- 'july-gen', 'august-gen', 'september-gen', 'october-gen', 'november-gen', 'december-gen'],
- 'abbrev': ['jan', 'feb', 'mar', 'apr', 'may', 'jun',
- 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
+ keys: {
+ names: [ 'january', 'february', 'march', 'april', 'may_long', 'june',
+ 'july', 'august', 'september', 'october', 'november', 'december' ],
+ genitive: [ 'january-gen', 'february-gen', 'march-gen', 'april-gen', 'may-gen', 'june-gen',
+ 'july-gen', 'august-gen', 'september-gen', 'october-gen', 'november-gen', 'december-gen' ],
+ abbrev: [ 'jan', 'feb', 'mar', 'apr', 'may', 'jun',
+ 'jul', 'aug', 'sep', 'oct', 'nov', 'dec' ]
},
- 'names': ['January', 'February', 'March', 'April', 'May', 'June',
- 'July', 'August', 'September', 'October', 'November', 'December'],
- 'genitive': ['January', 'February', 'March', 'April', 'May', 'June',
- 'July', 'August', 'September', 'October', 'November', 'December'],
- 'abbrev': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
- 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+ names: [ 'January', 'February', 'March', 'April', 'May', 'June',
+ 'July', 'August', 'September', 'October', 'November', 'December' ],
+ genitive: [ 'January', 'February', 'March', 'April', 'May', 'June',
+ 'July', 'August', 'September', 'October', 'November', 'December' ],
+ abbrev: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]
};
},
teardown: function () {
@@ -180,9 +181,9 @@
},
config: {
wgDefaultDateFormat: 'dmy',
- wgSeparatorTransformTable: ['', ''],
- wgDigitTransformTable: ['', ''],
- wgContentLanguage: 'en'
+ wgSeparatorTransformTable: [ '', '' ],
+ wgDigitTransformTable: [ '', '' ],
+ wgPageContentLanguage: 'en'
}
} ) );
@@ -192,7 +193,7 @@
*
* @param {String[]} header
* @param {String[][]} data
- * @return jQuery
+ * @return {jQuery}
*/
function tableCreate( header, data ) {
var i,
@@ -210,7 +211,7 @@
for ( i = 0; i < data.length; i++ ) {
/*jshint loopfunc: true */
$tr = $( '<tr>' );
- $.each( data[i], function ( j, str ) {
+ $.each( data[ i ], function ( j, str ) {
var $td = $( '<td>' );
$td.text( str ).appendTo( $tr );
} );
@@ -223,7 +224,7 @@
* Extract text from table.
*
* @param {jQuery} $table
- * @return String[][]
+ * @return {String[][]}
*/
function tableExtract( $table ) {
var data = [];
@@ -302,7 +303,6 @@
}
// Sample data set using planets named and their radius
- header = [ 'Planet', 'Radius (km)'];
tableTest(
'Basic planet table: sorting initially - ascending by name',
@@ -388,9 +388,6 @@
$table.find( '.headerSort:eq(1)' ).click().click();
}
);
-
- header = [ 'column1', 'column2' ];
-
tableTest(
'Sorting multiple columns by passing sort list',
header,
@@ -466,7 +463,7 @@
// Pretend to click while pressing the multi-sort key
var event = $.Event( 'click' );
- event[$table.data( 'tablesorter' ).config.sortMultiSortKey] = true;
+ event[ $table.data( 'tablesorter' ).config.sortMultiSortKey ] = true;
$table.find( '.headerSort:eq(1)' ).trigger( event );
}
);
@@ -500,10 +497,9 @@
} );
// Sorting with colspans
- header = [ 'column1a', 'column1b', 'column1c', 'column2' ];
tableTest( 'Sorting with colspanned headers: spanned column',
- header,
+ header4,
colspanInitial,
[ aaa1, aab5, abc3, bbc2, caa4 ],
function ( $table ) {
@@ -516,7 +512,7 @@
}
);
tableTest( 'Sorting with colspanned headers: sort spanned column twice',
- header,
+ header4,
colspanInitial,
[ caa4, bbc2, abc3, aab5, aaa1 ],
function ( $table ) {
@@ -530,7 +526,7 @@
}
);
tableTest( 'Sorting with colspanned headers: subsequent column',
- header,
+ header4,
colspanInitial,
[ aaa1, bbc2, abc3, caa4, aab5 ],
function ( $table ) {
@@ -543,7 +539,7 @@
}
);
tableTest( 'Sorting with colspanned headers: sort subsequent column twice',
- header,
+ header4,
colspanInitial,
[ aab5, caa4, abc3, bbc2, aaa1 ],
function ( $table ) {
@@ -557,42 +553,60 @@
}
);
- tableTest(
- 'Basic planet table: one unsortable column',
- header,
- planets,
- planets,
- function ( $table ) {
- $table.find( 'tr:eq(0) > th:eq(0)' ).addClass( 'unsortable' );
+ QUnit.test( 'Basic planet table: one unsortable column', 3, function ( assert ) {
+ var $table = tableCreate( header, planets ),
+ $cell;
+ $table.find( 'tr:eq(0) > th:eq(0)' ).addClass( 'unsortable' );
- $table.tablesorter();
- $table.find( 'tr:eq(0) > th:eq(0)' ).click();
- }
- );
+ $table.tablesorter();
+ $table.find( 'tr:eq(0) > th:eq(0)' ).click();
+
+ assert.deepEqual(
+ tableExtract( $table ),
+ planets,
+ 'table not sorted'
+ );
+
+ $cell = $table.find( 'tr:eq(0) > th:eq(0)' );
+ $table.find( 'tr:eq(0) > th:eq(1)' ).click();
+
+ assert.equal(
+ $cell.hasClass( 'headerSortUp' ) || $cell.hasClass( 'headerSortDown' ),
+ false,
+ 'after sort: no class headerSortUp or headerSortDown'
+ );
+
+ assert.equal(
+ $cell.attr( 'title' ),
+ undefined,
+ 'after sort: no title tag added'
+ );
+
+ } );
// Regression tests!
tableTest(
'Bug 28775: German-style (dmy) short numeric dates',
- ['Date'],
+ [ 'Date' ],
[
// German-style dates are day-month-year
- ['11.11.2011'],
- ['01.11.2011'],
- ['02.10.2011'],
- ['03.08.2011'],
- ['09.11.2011']
+ [ '11.11.2011' ],
+ [ '01.11.2011' ],
+ [ '02.10.2011' ],
+ [ '03.08.2011' ],
+ [ '09.11.2011' ]
],
[
// Sorted by ascending date
- ['03.08.2011'],
- ['02.10.2011'],
- ['01.11.2011'],
- ['09.11.2011'],
- ['11.11.2011']
+ [ '03.08.2011' ],
+ [ '02.10.2011' ],
+ [ '01.11.2011' ],
+ [ '09.11.2011' ],
+ [ '11.11.2011' ]
],
function ( $table ) {
mw.config.set( 'wgDefaultDateFormat', 'dmy' );
- mw.config.set( 'wgContentLanguage', 'de' );
+ mw.config.set( 'wgPageContentLanguage', 'de' );
$table.tablesorter();
$table.find( '.headerSort:eq(0)' ).click();
@@ -601,22 +615,22 @@
tableTest(
'Bug 28775: American-style (mdy) short numeric dates',
- ['Date'],
+ [ 'Date' ],
[
// American-style dates are month-day-year
- ['11.11.2011'],
- ['01.11.2011'],
- ['02.10.2011'],
- ['03.08.2011'],
- ['09.11.2011']
+ [ '11.11.2011' ],
+ [ '01.11.2011' ],
+ [ '02.10.2011' ],
+ [ '03.08.2011' ],
+ [ '09.11.2011' ]
],
[
// Sorted by ascending date
- ['01.11.2011'],
- ['02.10.2011'],
- ['03.08.2011'],
- ['09.11.2011'],
- ['11.11.2011']
+ [ '01.11.2011' ],
+ [ '02.10.2011' ],
+ [ '03.08.2011' ],
+ [ '09.11.2011' ],
+ [ '11.11.2011' ]
],
function ( $table ) {
mw.config.set( 'wgDefaultDateFormat', 'mdy' );
@@ -628,7 +642,7 @@
tableTest(
'Bug 17141: IPv4 address sorting',
- ['IP'],
+ [ 'IP' ],
ipv4,
ipv4Sorted,
function ( $table ) {
@@ -638,7 +652,7 @@
);
tableTest(
'Bug 17141: IPv4 address sorting (reverse)',
- ['IP'],
+ [ 'IP' ],
ipv4,
reversed( ipv4Sorted ),
function ( $table ) {
@@ -649,15 +663,15 @@
tableTest(
'Accented Characters with custom collation',
- ['Name'],
+ [ 'Name' ],
umlautWords,
umlautWordsSorted,
function ( $table ) {
mw.config.set( 'tableSorterCollation', {
- 'ä': 'ae',
- 'ö': 'oe',
- 'ß': 'ss',
- 'ü': 'ue'
+ ä: 'ae',
+ ö: 'oe',
+ ß: 'ss',
+ ü: 'ue'
} );
$table.tablesorter();
@@ -749,7 +763,7 @@
tableTest(
'Complex date parsing I',
- ['date'],
+ [ 'date' ],
complexMDYDates,
complexMDYSorted,
function ( $table ) {
@@ -762,7 +776,7 @@
tableTest(
'Currency parsing I',
- ['currency'],
+ [ 'currency' ],
currencyUnsorted,
currencySorted,
function ( $table ) {
@@ -772,7 +786,7 @@
);
planetsAscNameLegacy = planetsAscName.slice( 0 );
- planetsAscNameLegacy[4] = planetsAscNameLegacy[5];
+ planetsAscNameLegacy[ 4 ] = planetsAscNameLegacy[ 5 ];
planetsAscNameLegacy.pop();
tableTest(
@@ -801,7 +815,7 @@
$table.find( '.headerSort:eq(0)' ).click();
assert.equal(
- $table.data( 'tablesorter' ).config.parsers[0].id,
+ $table.data( 'tablesorter' ).config.parsers[ 0 ].id,
'number',
'Correctly detected column content skipping sortbottom'
);
@@ -989,7 +1003,7 @@
} );
tableTest( 'bug 8115: sort numbers with commas (ascending)',
- ['Numbers'], numbers, numbersAsc,
+ [ 'Numbers' ], numbers, numbersAsc,
function ( $table ) {
$table.tablesorter();
$table.find( '.headerSort:eq(0)' ).click();
@@ -997,7 +1011,7 @@
);
tableTest( 'bug 8115: sort numbers with commas (descending)',
- ['Numbers'], numbers, reversed( numbersAsc ),
+ [ 'Numbers' ], numbers, reversed( numbersAsc ),
function ( $table ) {
$table.tablesorter();
$table.find( '.headerSort:eq(0)' ).click().click();
@@ -1032,7 +1046,7 @@
tableTest(
'Correct date sorting I',
- ['date'],
+ [ 'date' ],
correctDateSorting1,
correctDateSortingSorted1,
function ( $table ) {
@@ -1045,7 +1059,7 @@
tableTest(
'Correct date sorting II',
- ['date'],
+ [ 'date' ],
correctDateSorting2,
correctDateSortingSorted2,
function ( $table ) {
@@ -1238,7 +1252,7 @@
'</tbody></table>' );
$table.tablesorter();
- assert.equal( $table.find( 'tr:eq(1) th:eq(1)').data('headerIndex'),
+ assert.equal( $table.find( 'tr:eq(1) th:eq(1)' ).data( 'headerIndex' ),
2,
'Incorrect index of sort header'
);
@@ -1262,14 +1276,14 @@
tableTestHTML(
'Rowspan exploding with colspanned cells (2)',
'<table class="sortable">' +
- '<thead><tr><th id="sortme">n</th><th>foo</th><th>bar</th><th>baz</th><th>quux</th></tr></thead>' +
+ '<thead><tr><th>n</th><th>foo</th><th>bar</th><th>baz</th><th id="sortme">n2</th></tr></thead>' +
'<tbody>' +
- '<tr><td>1</td><td>foo</td><td>bar</td><td rowspan="2">baz</td><td>quux</td></tr>' +
- '<tr><td>2</td><td colspan="2">foobar</td><td>quux</td></tr>' +
+ '<tr><td>1</td><td>foo</td><td>bar</td><td rowspan="2">baz</td><td>2</td></tr>' +
+ '<tr><td>2</td><td colspan="2">foobar</td><td>1</td></tr>' +
'</tbody></table>',
[
- [ '1', 'foo', 'bar', 'baz', 'quux' ],
- [ '2', 'foobar', 'baz', 'quux' ]
+ [ '2', 'foobar', 'baz', '1' ],
+ [ '1', 'foo', 'bar', 'baz', '2' ]
]
);
@@ -1345,4 +1359,39 @@
]
);
+ QUnit.test( 'bug 105731 - incomplete rows in table body', 3, function ( assert ) {
+ var $table, parsers;
+ $table = $(
+ '<table class="sortable">' +
+ '<tr><th>A</th><th>B</th></tr>' +
+ '<tr><td>3</td></tr>' +
+ '<tr><td>1</td><td>2</td></tr>' +
+ '</table>'
+ );
+ $table.tablesorter();
+ $table.find( '.headerSort:eq(0)' ).click();
+ // now the first row have 2 columns
+ $table.find( '.headerSort:eq(1)' ).click();
+
+ parsers = $table.data( 'tablesorter' ).config.parsers;
+
+ assert.equal(
+ parsers.length,
+ 2,
+ 'detectParserForColumn() detect 2 parsers'
+ );
+
+ assert.equal(
+ parsers[ 1 ].id,
+ 'number',
+ 'detectParserForColumn() detect parser.id "number" for second column'
+ );
+
+ assert.equal(
+ parsers[ 1 ].format( $table.find( 'tbody > tr > td:eq(1)' ).text() ),
+ 0,
+ 'empty cell is sorted as number 0'
+ );
+
+ } );
}( jQuery, mediaWiki ) );