http://www.mediawiki.org/wiki/Special:Code/MediaWiki/90595
Revision: 90595
Author: brion
Date: 2011-06-22 19:30:31 +0000 (Wed, 22 Jun 2011)
Log Message:
-----------
Add initial QUnit JS test cases for jquery.tablesorter -- NOTE THERE ARE IN
FACT REGRESSIONS FROM 1.17 VISIBLE HERE!
The numeric sorting doesn't work correctly, and the alphabetic sorting
sometimes returns wrong results.
Modified Paths:
--------------
trunk/phase3/tests/qunit/index.html
Added Paths:
-----------
trunk/phase3/tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
Modified: trunk/phase3/tests/qunit/index.html
===================================================================
--- trunk/phase3/tests/qunit/index.html 2011-06-22 18:37:05 UTC (rev 90594)
+++ trunk/phase3/tests/qunit/index.html 2011-06-22 19:30:31 UTC (rev 90595)
@@ -25,6 +25,7 @@
<script
src="../../resources/jquery/jquery.makeCollapsible.js"></script>
<script
src="../../resources/jquery/jquery.mwPrototypes.js"></script>
<script
src="../../resources/jquery/jquery.placeholder.js"></script>
+ <script
src="../../resources/jquery/jquery.tablesorter.js"></script>
<script src="../../resources/mediawiki/mediawiki.util.js"></script>
<!-- MW: user.options -->
@@ -53,6 +54,7 @@
<script src="suites/resources/jquery/jquery.autoEllipsis.js"></script>
<script src="suites/resources/jquery/jquery.colorUtil.js"></script>
<script src="suites/resources/jquery/jquery.tabIndex.js"></script>
+ <script
src="suites/resources/jquery/jquery.tablesorter.test.js"></script>
<script src="suites/resources/mediawiki/mediawiki.Title.js"></script>
<!-- TestSwarm: If a test swarm is running this,
Added:
trunk/phase3/tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
===================================================================
--- trunk/phase3/tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
(rev 0)
+++ trunk/phase3/tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
2011-06-22 19:30:31 UTC (rev 90595)
@@ -0,0 +1,166 @@
+(function() {
+
+module( 'jquery.tablesorter.test.js' );
+
+// setup hack
+mw.config.set('wgMonthNames', ['', 'January', 'February', 'March', 'April',
'May', 'June', 'July', 'August', 'September', 'October', 'November',
'December']);
+mw.config.set('wgMonthNamesShort', ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May',
'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']);
+
+test( '-- Initial check', function() {
+ expect(1);
+ ok( $.tablesorter, '$.tablesorter defined' );
+});
+
+/**
+ * Create an HTML table from an array of row arrays containing text strings.
+ * First row will be header row. No fancy rowspan/colspan stuff.
+ *
+ * @param {String[]} header
+ * @param {String[][]} data
+ * @return jQuery
+ */
+var tableCreate = function( header, data ) {
+ var $table = $('<table
class="sortable"><thead></thead><tbody></tbody></table>'),
+ $thead = $table.find('thead'),
+ $tbody = $table.find('tbody');
+ var $tr = $('<tr>');
+ $.each(header, function(i, str) {
+ var $th = $('<th>');
+ $th.text(str).appendTo($tr);
+ })
+ $tr.appendTo($thead);
+
+ for (var i = 0; i < data.length; i++) {
+ $tr = $('<tr>');
+ $.each(data[i], function(j, str) {
+ var $td = $('<td>');
+ $td.text(str).appendTo($tr);
+ })
+ $tr.appendTo($tbody);
+ }
+ return $table;
+};
+
+/**
+ * Extract text from table.
+ *
+ * @param {jQuery} $table
+ * @return String[][]
+ */
+var tableExtract = function( $table ) {
+ var data = [];
+ $table.find('tbody').find('tr').each(function(i, tr) {
+ var row = [];
+ $(tr).find('td,th').each(function(i, td) {
+ row.push($(td).text());
+ })
+ data.push(row);
+ });
+ return data;
+};
+
+/**
+ * Run a table test by building a table with the given data,
+ * running some callback on it, then checking the results.
+ *
+ * @param {String} msg text to pass on to qunit for the comparison
+ * @param {String[]} header cols to make the table
+ * @param {String[][]} data rows/cols to make the table
+ * @param {String[][]} expected rows/cols to compare against at end
+ * @param {function($table)} callback something to do with the table before we
compare
+ */
+var tableTest = function( msg, header, data, expected, callback ) {
+ test( msg, function() {
+ expect(1);
+
+ var $table = tableCreate( header, data );
+ //$('body').append($table);
+
+ // Give caller a chance to set up sorting and manipulate the
table.
+ callback( $table );
+
+ // Table sorting is done asynchronously in the event loop by
running
+ // it through a setTimeout({},0); we need to do the same so we
can
+ // check our results after.
+ stop( 1000 ); // timeout in 1s
+ setTimeout(function() {
+ start(); // continue the async tests...
+
+ var extracted = tableExtract( $table );
+ deepEqual( extracted, expected, msg )
+ }, 150);
+ });
+};
+
+var reversed = function(arr) {
+ var arr2 = arr.slice(0);
+ arr2.reverse();
+ return arr2;
+}
+
+// Sample data set: some planets!
+var header = ['Planet', 'Radius (km)'],
+ mercury = ['Mercury', '2439.7'],
+ venus = ['Venus', '6051.8'],
+ earth = ['Earth', '6371.0'],
+ mars = ['Mars', '3390.0'],
+ jupiter = ['Jupiter', '69911'],
+ saturn = ['Saturn', '58232'];
+
+// Initial data set
+var planets = [mercury, venus, earth, mars, jupiter, saturn];
+var ascendingName = [earth, jupiter, mars, mercury, saturn, venus];
+var ascendingRadius = [mercury, mars, venus, earth, saturn, jupiter];
+
+tableTest(
+ 'Basic planet table: ascending by name',
+ header,
+ planets,
+ ascendingName,
+ function( $table ) {
+ $table.tablesorter();
+ $table.find('.headerSort:eq(0)').click();
+ }
+);
+tableTest(
+ 'Basic planet table: ascending by name a second time',
+ header,
+ planets,
+ ascendingName,
+ function( $table ) {
+ $table.tablesorter();
+ $table.find('.headerSort:eq(0)').click();
+ }
+);
+tableTest(
+ 'Basic planet table: descending by name',
+ header,
+ planets,
+ reversed(ascendingName),
+ function( $table ) {
+ $table.tablesorter();
+ $table.find('.headerSort:eq(0)').click().click();
+ }
+);
+tableTest(
+ 'Basic planet table: ascending radius',
+ header,
+ planets,
+ ascendingRadius,
+ function( $table ) {
+ $table.tablesorter();
+ $table.find('.headerSort:eq(1)').click();
+ }
+);
+tableTest(
+ 'Basic planet table: descending radius',
+ header,
+ planets,
+ reversed(ascendingRadius),
+ function( $table ) {
+ $table.tablesorter();
+ $table.find('.headerSort:eq(1)').click().click();
+ }
+);
+
+})();
\ No newline at end of file
Property changes on:
trunk/phase3/tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
___________________________________________________________________
Added: svn:eol-style
+ native
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs