From dbc8046e6b7c4e917560c594a2ce8e728aaec342 Mon Sep 17 00:00:00 2001 From: Allan Jardine Date: Fri, 22 Apr 2011 19:51:06 +0100 Subject: [PATCH] New: Creation of TR/TD elements when using an Ajax or JS source for the table can be defered until draw time, when the rows are actually needed now - 4739. This is enabled by setting bDeferRender to true at initialisation time. It provides major benefits for speed in IE when dealing with large tables. However do note that if you are using fnGetNodes() with this enabled, then you will only get nodes which have been rendered. New: Unit tests for delayed rendering. Now up to 2500+ unit tests :-) --- media/js/jquery.dataTables.js | 280 ++++++------ .../tests_onhold/2_js/aoColumns.fnRender.js | 31 +- .../tests_onhold/3_ajax/aoColumns.fnRender.js | 31 +- .../4_server-side/aoColumns.fnRender.js | 32 +- .../5_ajax_objects/aoColumns.fnRender.js | 34 +- .../6_delayed_rendering/_zero_config.js | 403 ++++++++++++++++++ .../6_delayed_rendering/aaSorting.js | 212 +++++++++ .../6_delayed_rendering/aaSortingFixed.js | 70 +++ .../aoColumns.bSearchable.js | 79 ++++ .../aoColumns.bSortable.js | 112 +++++ .../aoColumns.bUseRendered.js | 151 +++++++ .../6_delayed_rendering/aoColumns.bVisible.js | 127 ++++++ .../6_delayed_rendering/aoColumns.fnRender.js | 189 ++++++++ .../aoColumns.iDataSort.js | 92 ++++ .../6_delayed_rendering/aoColumns.sClass.js | 118 +++++ .../6_delayed_rendering/aoColumns.sName.js | 29 ++ .../6_delayed_rendering/aoColumns.sTitle.js | 85 ++++ .../6_delayed_rendering/aoColumns.sWidth.js | 90 ++++ .../6_delayed_rendering/aoSearchCols.js | 125 ++++++ .../6_delayed_rendering/asStripClasses.js | 109 +++++ .../6_delayed_rendering/bAutoWidth.js | 145 +++++++ .../6_delayed_rendering/bFilter.js | 47 ++ .../tests_onhold/6_delayed_rendering/bInfo.js | 47 ++ .../6_delayed_rendering/bLengthChange.js | 78 ++++ .../6_delayed_rendering/bPaginate.js | 62 +++ .../6_delayed_rendering/bProcessing.js | 106 +++++ .../6_delayed_rendering/bServerSide.js | 21 + .../tests_onhold/6_delayed_rendering/bSort.js | 102 +++++ .../6_delayed_rendering/bSortClasses.js | 135 ++++++ .../6_delayed_rendering/fnDrawCallback.js | 102 +++++ .../6_delayed_rendering/fnHeaderCallback.js | 200 +++++++++ .../6_delayed_rendering/fnInitComplete.js | 105 +++++ .../6_delayed_rendering/fnRowCallback.js | 118 +++++ .../6_delayed_rendering/fnServerData.js | 68 +++ .../6_delayed_rendering/iDisplayLength.js | 85 ++++ .../oLanguage.oPaginate.js | 86 ++++ .../6_delayed_rendering/oLanguage.sInfo.js | 124 ++++++ .../oLanguage.sInfoEmpty.js | 82 ++++ .../oLanguage.sInfoPostFix.js | 82 ++++ .../oLanguage.sLengthMenu.js | 110 +++++ .../oLanguage.sProcessing.js | 51 +++ .../6_delayed_rendering/oLanguage.sSearch.js | 68 +++ .../6_delayed_rendering/oLanguage.sUrl.js | 64 +++ .../oLanguage.sZeroRecords.js | 50 +++ .../6_delayed_rendering/oSearch.js | 114 +++++ .../6_delayed_rendering/sAjaxDataProp.js | 140 ++++++ .../6_delayed_rendering/sAjaxDataProp2.js | 140 ++++++ .../6_delayed_rendering/sAjaxSource.js | 23 + .../tests_onhold/6_delayed_rendering/sDom.js | 269 ++++++++++++ .../6_delayed_rendering/sPaginationType.js | 136 ++++++ 50 files changed, 5117 insertions(+), 242 deletions(-) create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/_zero_config.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/aaSorting.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/aaSortingFixed.js create mode 100755 media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSearchable.js create mode 100755 media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSortable.js create mode 100755 media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bUseRendered.js create mode 100755 media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bVisible.js create mode 100755 media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.fnRender.js create mode 100755 media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.iDataSort.js create mode 100755 media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sClass.js create mode 100755 media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sName.js create mode 100755 media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sTitle.js create mode 100755 media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sWidth.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/aoSearchCols.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/asStripClasses.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/bAutoWidth.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/bFilter.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/bInfo.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/bLengthChange.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/bPaginate.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/bProcessing.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/bServerSide.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/bSort.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/bSortClasses.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/fnDrawCallback.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/fnHeaderCallback.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/fnInitComplete.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/fnRowCallback.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/fnServerData.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/iDisplayLength.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.oPaginate.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfo.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoEmpty.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoPostFix.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sLengthMenu.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sProcessing.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sSearch.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sUrl.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sZeroRecords.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/oSearch.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp2.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxSource.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/sDom.js create mode 100644 media/unit_testing/tests_onhold/6_delayed_rendering/sPaginationType.js diff --git a/media/js/jquery.dataTables.js b/media/js/jquery.dataTables.js index bcc123db..d98b7031 100644 --- a/media/js/jquery.dataTables.js +++ b/media/js/jquery.dataTables.js @@ -914,7 +914,8 @@ "bProcessing": false, "bSortClasses": true, "bStateSave": false, - "bServerSide": false + "bServerSide": false, + "bDeferRender": false }; /* @@ -2026,8 +2027,11 @@ { for ( i=0, iLen=oSettings.aoData.length ; itd:eq('+iBefore+')', - oSettings.aoData[i].nTr)[0] ); + if ( oSettings.aoData[i].nTr !== null ) + { + nTd = oSettings.aoData[i]._anHidden[iCol]; + oSettings.aoData[i].nTr.insertBefore( nTd, $('>td:eq('+iBefore+')', + oSettings.aoData[i].nTr)[0] ); + } } } } @@ -2058,9 +2065,12 @@ anTds = _fnGetTdNodes( oSettings ); for ( i=0, iLen=oSettings.aoData.length ; i= iColumns ) + if ( oSettings.oFeatures.bDeferRender ) + { + $(nTds).removeClass(sClass+'1 '+sClass+'2 '+sClass+'3'); + } + else if ( nTds.length >= iColumns ) { for ( i=0 ; i iMax ) - { - iMax = n.offsetWidth; - iMaxIndex = i; - } + var n = document.createElement('td'); + n.appendChild( document.createTextNode( + _fnGetCellData( oSettings, iMaxIndex, iCol, '' ) ) + ); + return n; } - document.body.removeChild( n ); - - if ( iMaxIndex >= 0 ) - { - var iVis = _fnColumnIndexToVisible( oSettings, iCol); - var nRet = oSettings.aoData[iMaxIndex].nTr.getElementsByTagName('td')[iVis]; - if ( nRet ) - { - return nRet; - } - } - return null; + return oSettings.aoData[iMaxIndex].nTr.getElementsByTagName('td')[iVis]; } /* @@ -5724,54 +5742,61 @@ function _fnGetTrNodes ( oSettings ) { var aNodes = []; - var iLen = oSettings.aoData.length; - for ( var i=0 ; ia0 && a3>a1 && a3>a2 && a3>a4 ) + return true; + else + return false; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/aoSearchCols.js b/media/unit_testing/tests_onhold/6_delayed_rendering/aoSearchCols.js new file mode 100644 index 00000000..aa61f90c --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/aoSearchCols.js @@ -0,0 +1,125 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoSearchCols" ); + +/* We could be here forever testing this one, so we test a limited subset on a couple of colums */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default should be to have a empty colums array", + null, + function () { + var bReturn = + oSettings.aoPreSearchCols[0].sSearch == 0 && !oSettings.aoPreSearchCols[0].bRegex && + oSettings.aoPreSearchCols[1].sSearch == 0 && !oSettings.aoPreSearchCols[1].bRegex && + oSettings.aoPreSearchCols[2].sSearch == 0 && !oSettings.aoPreSearchCols[2].bRegex && + oSettings.aoPreSearchCols[3].sSearch == 0 && !oSettings.aoPreSearchCols[3].bRegex && + oSettings.aoPreSearchCols[4].sSearch == 0 && !oSettings.aoPreSearchCols[4].bRegex; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Search on a single column - no regex statement given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoSearchCols": [ + null, + { "sSearch": "Mozilla" }, + null, + { "sSearch": "1" }, + null + ] + } ); + }, + function () { return $('#example_info').html() == "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Search on two columns - no regex statement given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoSearchCols": [ + null, + { "sSearch": "Mozilla" }, + null, + { "sSearch": "1.5" }, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "1.5"; } + ); + + oTest.fnWaitTest( + "Search on single column - escape regex false", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + null, + null, + null, + null + ] + } ); + }, + function () { return $('#example_info').html() == "Showing 1 to 3 of 3 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Search on two columns - escape regex false on first, true on second", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + { "sSearch": "3.3", "bEscapeRegex": true }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Konqureror 3.3"; } + ); + + oTest.fnWaitTest( + "Search on two columns (no records) - escape regex false on first, true on second", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + { "sSearch": "Allan", "bEscapeRegex": true }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/asStripClasses.js b/media/unit_testing/tests_onhold/6_delayed_rendering/asStripClasses.js new file mode 100644 index 00000000..f4be1962 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/asStripClasses.js @@ -0,0 +1,109 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "asStripClasses" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + + oTest.fnWaitTest( + "Default row striping is applied", + null, + function () { + return $('#example tbody tr:eq(0)').hasClass('odd') && + $('#example tbody tr:eq(1)').hasClass('even') && + $('#example tbody tr:eq(2)').hasClass('odd') && + $('#example tbody tr:eq(3)').hasClass('even'); + } + ); + + oTest.fnWaitTest( + "Row striping on the second page", + function () { $('#example_next').click(); }, + function () { + return $('#example tbody tr:eq(0)').hasClass('odd') && + $('#example tbody tr:eq(1)').hasClass('even') && + $('#example tbody tr:eq(2)').hasClass('odd') && + $('#example tbody tr:eq(3)').hasClass('even'); + } + ); + + /* No striping */ + oTest.fnWaitTest( + "No row striping", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "asStripClasses": [] + } ); + }, + function () { + if ( typeof $('#example tbody tr:eq(1)')[0] == 'undefined' ) + { + /* Use the 'wait for' to allow this to become true */ + return false; + } + return $('#example tbody tr:eq(0)')[0].className == "" && + $('#example tbody tr:eq(1)')[0].className == "" && + $('#example tbody tr:eq(2)')[0].className == "" && + $('#example tbody tr:eq(3)')[0].className == ""; + } + ); + + /* Custom striping */ + oTest.fnWaitTest( + "Custom striping [2]", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "asStripClasses": [ 'test1', 'test2' ] + } ); + }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test1') && + $('#example tbody tr:eq(3)').hasClass('test2'); + } + ); + + + /* long array of striping */ + oTest.fnWaitTest( + "Custom striping [4]", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "asStripClasses": [ 'test1', 'test2', 'test3', 'test4' ] + } ); + }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test3') && + $('#example tbody tr:eq(3)').hasClass('test4'); + } + ); + + oTest.fnWaitTest( + "Custom striping is restarted on second page [2]", + function () { $('#example_next').click(); }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test3') && + $('#example tbody tr:eq(3)').hasClass('test4'); + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/bAutoWidth.js b/media/unit_testing/tests_onhold/6_delayed_rendering/bAutoWidth.js new file mode 100644 index 00000000..45b5a003 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/bAutoWidth.js @@ -0,0 +1,145 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bAutoWidth" ); + +/* It's actually a little tricky to test this. We can't test absolute numbers because + * different browsers and different platforms will render the width of the columns slightly + * differently. However, we certainly can test the principle of what should happen (column + * width doesn't change over pages) + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Auto width is enabled by default", + null, + function () { return oSettings.oFeatures.bAutoWidth; } + ); + + oTest.fnWaitTest( + "First column has a width assigned to it", + null, + function () { return $('#example thead th:eq(0)').attr('style').match(/width/i); } + ); + + /* + This would seem like a better test - but there appear to be difficulties with tables + which are bigger (calculated) than there is actually room for. I suspect this is actually + a bug in datatables + oTest.fnWaitTest( + "Check column widths on first page match second page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + console.log( a0, b0, a1, b1, a2, b2, a3, b3 ); + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return true; + else + return false; + } + ); + + oTest.fnWaitTest( + "Check column widths on second page match thid page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return true; + else + return false; + } + ); + */ + + /* Check can disable */ + oTest.fnWaitTest( + "Auto width can be disabled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bAutoWidth": false + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bAutoWidth == false; } + ); + + oTest.fnWaitTest( + "First column does not have a width assigned to it", + null, + function () { return $('#example thead th:eq(0)').attr('style') == null; } + ); + + /* + oTest.fnWaitTest( + "Check column widths on first page do not match second page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return false; + else + return true; + } + ); + */ + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Auto width enabled override", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bAutoWidth": true + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bAutoWidth; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/bFilter.js b/media/unit_testing/tests_onhold/6_delayed_rendering/bFilter.js new file mode 100644 index 00000000..f40d7ae0 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/bFilter.js @@ -0,0 +1,47 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bFilter" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + + oTest.fnWaitTest( + "Filtering div exists by default", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Fltering can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bFilter": false + } ); + }, + function () { return document.getElementById('example_filter') == null; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Filtering enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bFilter": true + } ); + }, + function () { return document.getElementById('example_filter') != null; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/bInfo.js b/media/unit_testing/tests_onhold/6_delayed_rendering/bInfo.js new file mode 100644 index 00000000..4cdd5e1e --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/bInfo.js @@ -0,0 +1,47 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bInfo" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + + oTest.fnWaitTest( + "Info div exists by default", + null, + function () { return document.getElementById('example_info') != null; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Info can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bInfo": false + } ); + }, + function () { return document.getElementById('example_info') == null; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Info enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bInfo": true + } ); + }, + function () { return document.getElementById('example_info') != null; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/bLengthChange.js b/media/unit_testing/tests_onhold/6_delayed_rendering/bLengthChange.js new file mode 100644 index 00000000..2ca7c0d5 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/bLengthChange.js @@ -0,0 +1,78 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bLengthChange" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + + oTest.fnWaitTest( + "Length div exists by default", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnWaitTest( + "Four default options", + null, + function () { return $("select[name=example_length] option").length == 4; } + ); + + oTest.fnWaitTest( + "Default options", + null, + function () { + var opts = $("select[name='example_length'] option"); + return opts[0].getAttribute('value') == 10 && opts[1].getAttribute('value') == 25 && + opts[2].getAttribute('value') == 50 && opts[3].getAttribute('value') == 100; + } + ); + + oTest.fnWaitTest( + "Info takes length into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Change length can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bLengthChange": false + } ); + }, + function () { return document.getElementById('example_length') == null; } + ); + + oTest.fnWaitTest( + "Information takes length disabled into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Length change enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bLengthChange": true + } ); + }, + function () { return document.getElementById('example_length') != null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/bPaginate.js b/media/unit_testing/tests_onhold/6_delayed_rendering/bPaginate.js new file mode 100644 index 00000000..ed63fa83 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/bPaginate.js @@ -0,0 +1,62 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bPaginate" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + + oTest.fnWaitTest( + "Pagiantion div exists by default", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnWaitTest( + "Information div takes paging into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Pagiantion can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bPaginate": false + } ); + }, + function () { return document.getElementById('example_paginate') == null; } + ); + + oTest.fnWaitTest( + "Information div takes paging disabled into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 57 of 57 entries"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Pagiantion enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bPaginate": true + } ); + }, + function () { return document.getElementById('example_paginate') != null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/bProcessing.js b/media/unit_testing/tests_onhold/6_delayed_rendering/bProcessing.js new file mode 100644 index 00000000..4193c701 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/bProcessing.js @@ -0,0 +1,106 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bProcessing" ); + +/* It's actually a bit hard to set this one due to the fact that it will only be shown + * when DataTables is doing some kind of processing. The server-side processing is a bit + * better to test this than here - so we just the interal functions to enable it and check + * that it is available + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Processing is off by default", + null, + function () { return oSettings.oFeatures.bProcessing == false; } + ); + + oTest.fnWaitTest( + "Processing div is not in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "Processing div cannot be shown", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "Processing div cannot be hidden", + function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + + /* Check can disable */ + oTest.fnWaitTest( + "Processing can be enabled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bProcessing": true + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bProcessing == true; } + ); + + oTest.fnWaitTest( + "Processing div is in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing'); } + ); + + oTest.fnWaitTest( + "Processing div is hidden by default", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing').style.visibility = "hidden"; } + ); + + oTest.fnWaitTest( + "Processing div can be shown", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing').style.visibility = "visible"; } + ); + + oTest.fnWaitTest( + "Processing div can be hidden", + function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); }, + function () { return document.getElementById('example_processing').style.visibility = "hidden"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Processing disabled override", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bProcessing": false + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bProcessing == false; } + ); + + oTest.fnWaitTest( + "Processing div is not in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/bServerSide.js b/media/unit_testing/tests_onhold/6_delayed_rendering/bServerSide.js new file mode 100644 index 00000000..da58fac0 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/bServerSide.js @@ -0,0 +1,21 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bServerSide" ); + +/* Not interested in server-side processing here other than to check that it is off */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Server side is off by default", + null, + function () { return oSettings.oFeatures.bServerSide == false; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/bSort.js b/media/unit_testing/tests_onhold/6_delayed_rendering/bSort.js new file mode 100644 index 00000000..2a252d95 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/bSort.js @@ -0,0 +1,102 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bSort" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + + oTest.fnWaitTest( + "Sorting is on by default", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnWaitTest( + "Sorting Asc by default class applied", + null, + function () { return $('#example thead th:eq(0)').hasClass("sorting_asc"); } + ); + + oTest.fnWaitTest( + "Click on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Sorting class removed from first column", + null, + function () { return $('#example thead th:eq(0)').hasClass("sorting_asc") != true; } + ); + + oTest.fnWaitTest( + "Sorting asc class applied to second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc"); } + ); + + oTest.fnWaitTest( + "Reverse on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnWaitTest( + "Sorting acs class removed from second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") != true; } + ); + + oTest.fnWaitTest( + "Sorting desc class applied to second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_desc"); } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Pagiantion can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bSort": false + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + oTest.fnWaitTest( + "Click on second column has no effect", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + oTest.fnWaitTest( + "Reverse on second column has no effect", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Sorting enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bSort": true + } ); + }, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/bSortClasses.js b/media/unit_testing/tests_onhold/6_delayed_rendering/bSortClasses.js new file mode 100644 index 00000000..33cd0a28 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/bSortClasses.js @@ -0,0 +1,135 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bSortClasses" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + + oTest.fnWaitTest( + "Sorting classes are applied by default", + null, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); } + ); + + oTest.fnWaitTest( + "Sorting classes are applied to all required cells", + null, + function () { return $('#example tbody tr:eq(7) td:eq(0)').hasClass('sorting_1'); } + ); + + oTest.fnWaitTest( + "Sorting classes are not applied to non-sorting columns", + null, + function () { return $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_1') == false; } + ); + + oTest.fnWaitTest( + "Sorting multi-column - add column 1", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2'); + } + ); + + oTest.fnWaitTest( + "Sorting multi-column - add column 2", + function () { + oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3'); + } + ); + + oTest.fnWaitTest( + "Sorting multi-column - add column 3", + function () { + oDispacher.click( $('#example thead th:eq(3)')[0], { 'shift': true } ); + }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') && + $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3'); + } + ); + + oTest.fnWaitTest( + "Remove sorting classes on single column sort", + function () { + $('#example thead th:eq(4)').click(); + }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false && + $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3') == false; + } + ); + + oTest.fnWaitTest( + "Sorting class 1 was added", + null, + function () { return $('#example tbody tr:eq(1) td:eq(4)').hasClass('sorting_1'); } + ); + + + /* Check can disable */ + oTest.fnWaitTest( + "Sorting classes can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bSortClasses": false + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false; } + ); + + oTest.fnWaitTest( + "Sorting classes disabled - add column 1 - no effect", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false; + } + ); + + oTest.fnWaitTest( + "Sorting classes disabled - add column 2 - no effect", + function () { + oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false; + } + ); + + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Sorting classes enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bSortClasses": true + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/fnDrawCallback.js b/media/unit_testing/tests_onhold/6_delayed_rendering/fnDrawCallback.js new file mode 100644 index 00000000..8d06e246 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/fnDrawCallback.js @@ -0,0 +1,102 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnDrawCallback" ); + +/* Fairly boring function compared to the others! */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + var mPass, bInit; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnDrawCallback == null; } + ); + + + oTest.fnWaitTest( + "One argument passed", + function () { + oSession.fnRestore(); + + mPass = -1; + bInit = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnDrawCallback": function ( ) { + mPass = arguments.length; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return mPass == 1 && bInit; } + ); + + + oTest.fnWaitTest( + "That one argument is the settings object", + function () { + oSession.fnRestore(); + + bInit = false; + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnDrawCallback": function ( oSettings ) { + mPass = oSettings; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return oTable.fnSettings() == mPass && bInit; } + ); + + + /* The draw callback is called once for the init and then when the data is added */ + oTest.fnWaitTest( + "fnRowCallback called once on first draw", + function () { + oSession.fnRestore(); + + mPass = 0; + bInit = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnDrawCallback": function ( ) { + mPass++; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return mPass == 2 && bInit; } + ); + + oTest.fnWaitTest( + "fnRowCallback called once on each draw there after as well", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return mPass == 5; } + ); + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/fnHeaderCallback.js b/media/unit_testing/tests_onhold/6_delayed_rendering/fnHeaderCallback.js new file mode 100644 index 00000000..2e2d52f6 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/fnHeaderCallback.js @@ -0,0 +1,200 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnHeaderCallback" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + var mPass, bInit; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnHeaderCallback == null; } + ); + + + oTest.fnWaitTest( + "Five arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + bInit = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnHeaderCallback": function ( ) { + mPass = arguments.length; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return mPass == 5 && bInit; } + ); + + + /* The header callback is called once for the init and then when the data is added */ + oTest.fnWaitTest( + "fnHeaderCallback called once per draw", + function () { + oSession.fnRestore(); + + mPass = 0; + bInit = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + mPass++; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return mPass == 2 && bInit; } + ); + + oTest.fnWaitTest( + "fnRowCallback called on paging (i.e. another draw)", + function () { $('#example_next').click(); }, + function () { return mPass == 3; } + ); + + + oTest.fnWaitTest( + "fnRowCallback allows us to alter row information", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records"; + } + } ); + }, + function () { return $('#example thead th:eq(0)').html() == "Displaying 10 records"; } + ); + + + oTest.fnWaitTest( + "iStart correct on first page", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart != 0 ) + { + mPass = false; + } + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnWaitTest( + "iStart correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart == 10 ) + { + mPass = true; + } + }, + "fnInitComplete": function () { + $('#example_next').click(); + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnWaitTest( + "iEnd correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iEnd == 20 ) + { + mPass = true; + } + }, + "fnInitComplete": function () { + $('#example_next').click(); + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnWaitTest( + "aiDisplay length is full data when not filtered", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 57 ) + { + mPass = true; + } + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnWaitTest( + "aiDisplay length is 9 when filtering on 'Mozilla'", + function () { + oSession.fnRestore(); + + mPass = false; + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 9 ) + { + mPass = true; + } + } + } ); + oTable.fnFilter( "Mozilla" ); + }, + function () { return mPass; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/fnInitComplete.js b/media/unit_testing/tests_onhold/6_delayed_rendering/fnInitComplete.js new file mode 100644 index 00000000..f49b7216 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/fnInitComplete.js @@ -0,0 +1,105 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnInitComplete" ); + +/* Fairly boring function compared to the others! */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnInitComplete == null; } + ); + + + oTest.fnWaitTest( + "Two arguments passed (for Ajax!)", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnInitComplete": function ( ) { + mPass = arguments.length; + } + } ); + }, + function () { return mPass == 2; } + ); + + + oTest.fnWaitTest( + "That one argument is the settings object", + function () { + oSession.fnRestore(); + + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnInitComplete": function ( oSettings ) { + mPass = oSettings; + } + } ); + }, + function () { return oTable.fnSettings() == mPass; } + ); + + + oTest.fnWaitTest( + "fnInitComplete called once on first draw", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnInitComplete": function ( ) { + mPass++; + } + } ); + }, + function () { return mPass == 1; } + ); + + oTest.fnWaitTest( + "fnInitComplete never called there after", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return mPass == 1; } + ); + + + oTest.fnWaitTest( + "10 rows in the table on complete", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnInitComplete": function ( ) { + mPass = $('#example tbody tr').length; + } + } ); + }, + function () { return mPass == 10; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/fnRowCallback.js b/media/unit_testing/tests_onhold/6_delayed_rendering/fnRowCallback.js new file mode 100644 index 00000000..41c7c9b3 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/fnRowCallback.js @@ -0,0 +1,118 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnRowCallback" ); + +/* Note - fnRowCallback MUST return the first arguments (modified or not) */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnRowCallback == null; } + ); + + + oTest.fnWaitTest( + "Four arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnRowCallback": function ( nTr ) { + mPass = arguments.length; + return nTr; + } + } ); + }, + function () { return mPass == 4; } + ); + + + oTest.fnWaitTest( + "fnRowCallback called once for each drawn row", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + mPass++; + return nTr; + } + } ); + }, + function () { return mPass == 10; } + ); + + oTest.fnWaitTest( + "fnRowCallback allows us to alter row information", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + $(nTr).addClass('unit_test'); + return nTr; + } + } ); + }, + function () { return $('#example tbody tr:eq(1)').hasClass('unit_test'); } + ); + + oTest.fnWaitTest( + "Data array has length matching columns", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + if ( asData.length != 5 ) + mPass = false; + return nTr; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnWaitTest( + "Data array has length matching columns", + function () { + oSession.fnRestore(); + + mPass = true; + var iCount = 0; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + if ( iCount != iDrawIndex ) + mPass = false; + iCount++; + return nTr; + } + } ); + }, + function () { return mPass; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/fnServerData.js b/media/unit_testing/tests_onhold/6_delayed_rendering/fnServerData.js new file mode 100644 index 00000000..cd116d67 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/fnServerData.js @@ -0,0 +1,68 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnServerData for Ajax sourced data" ); + +$(document).ready( function () { + var mPass; + + oTest.fnTest( + "Argument length", + function () { + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnServerData": function () { + mPass = arguments.length; + } + } ); + }, + function () { return mPass == 3; } + ); + + oTest.fnTest( + "Url", + function () { + $('#example').dataTable( { + "bDestroy": true, + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnServerData": function (sUrl, aoData, fnCallback) { + mPass = sUrl == "../../../examples/ajax/sources/arrays.txt"; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Data array", + function () { + $('#example').dataTable( { + "bDestroy": true, + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnServerData": function (sUrl, aoData, fnCallback) { + mPass = aoData.length==0; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Callback function", + function () { + $('#example').dataTable( { + "bDestroy": true, + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnServerData": function (sUrl, aoData, fnCallback) { + mPass = typeof fnCallback == 'function'; + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/iDisplayLength.js b/media/unit_testing/tests_onhold/6_delayed_rendering/iDisplayLength.js new file mode 100644 index 00000000..5aa7ff30 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/iDisplayLength.js @@ -0,0 +1,85 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "iDisplayLength" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + + oTest.fnWaitTest( + "Default length is ten", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnWaitTest( + "Select menu shows 10", + null, + function () { return $('#example_length select').val() == 10; } + ); + + + oTest.fnWaitTest( + "Set initial length to 25", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "iDisplayLength": 25 + } ); + }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnWaitTest( + "Select menu shows 25", + null, + function () { return $('#example_length select').val() == 25; } + ); + + + oTest.fnWaitTest( + "Set initial length to 100", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "iDisplayLength": 100 + } ); + }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnWaitTest( + "Select menu shows 25", + null, + function () { return $('#example_length select').val() == 100; } + ); + + + oTest.fnWaitTest( + "Set initial length to 23 (unknown select menu length)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "iDisplayLength": 23 + } ); + }, + function () { return $('#example tbody tr').length == 23; } + ); + + oTest.fnWaitTest( + "Select menu shows 10 (since 23 is unknow)", + null, + function () { return $('#example_length select').val() == 10; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.oPaginate.js b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.oPaginate.js new file mode 100644 index 00000000..908136e1 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.oPaginate.js @@ -0,0 +1,86 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.oPaginate" ); + +/* Note that the paging language information only has relevence in full numbers */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "sPaginationType": "full_numbers" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "oLanguage.oPaginate defaults", + null, + function () { + var bReturn = + oSettings.oLanguage.oPaginate.sFirst == "First" && + oSettings.oLanguage.oPaginate.sPrevious == "Previous" && + oSettings.oLanguage.oPaginate.sNext == "Next" && + oSettings.oLanguage.oPaginate.sLast == "Last"; + return bReturn; + } + ); + + oTest.fnTest( + "oLanguage.oPaginate defaults are in the DOM", + null, + function () { + var bReturn = + $('#example_paginate .first').html() == "First" && + $('#example_paginate .previous').html() == "Previous" && + $('#example_paginate .next').html() == "Next" && + $('#example_paginate .last').html() == "Last"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "oLanguage.oPaginate can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "sPaginationType": "full_numbers", + "oLanguage": { + "oPaginate": { + "sFirst": "unit1", + "sPrevious": "test2", + "sNext": "unit3", + "sLast": "test4" + } + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var bReturn = + oSettings.oLanguage.oPaginate.sFirst == "unit1" && + oSettings.oLanguage.oPaginate.sPrevious == "test2" && + oSettings.oLanguage.oPaginate.sNext == "unit3" && + oSettings.oLanguage.oPaginate.sLast == "test4"; + return bReturn; + } + ); + + oTest.fnTest( + "oLanguage.oPaginate definitions are in the DOM", + null, + function () { + var bReturn = + $('#example_paginate .first').html() == "unit1" && + $('#example_paginate .previous').html() == "test2" && + $('#example_paginate .next').html() == "unit3" && + $('#example_paginate .last').html() == "test4"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfo.js b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfo.js new file mode 100644 index 00000000..9849dc7d --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfo.js @@ -0,0 +1,124 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sInfo" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Info language is 'Showing _START_ to _END_ of _TOTAL_ entries' by default", + null, + function () { return oSettings.oLanguage.sInfo == "Showing _START_ to _END_ of _TOTAL_ entries"; } + ); + + oTest.fnTest( + "Info language default is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; } + ); + + + oTest.fnWaitTest( + "Info language can be defined - without any macros", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfo": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sInfo == "unit test"; } + ); + + oTest.fnTest( + "Info language definition is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "unit test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macro _START_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfo": "unit _START_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macro _END_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfo": "unit _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 10 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macro _TOTAL_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfo": "unit _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 57 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macros _START_ and _END_", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfo": "unit _START_ _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 10 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macros _START_, _END_ and _TOTAL_", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfo": "unit _START_ _END_ _TOTAL_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 10 57 test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoEmpty.js b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoEmpty.js new file mode 100644 index 00000000..31d70738 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoEmpty.js @@ -0,0 +1,82 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sInfoEmpty" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Info empty language is 'Showing 0 to 0 of 0 entries' by default", + function () { oTable.fnFilter("nothinghere"); }, + function () { return oSettings.oLanguage.sInfoEmpty == "Showing 0 to 0 of 0 entries"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "Showing 0 to 0 of 0 entries"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Info empty language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfoEmpty": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + oTable.fnFilter("nothinghere"); + }, + function () { return oSettings.oLanguage.sInfoEmpty == "unit test"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "unit test"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Macro's not replaced", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfoEmpty": "unit _START_ _END_ _TOTAL_ test" + } + } ); + oTable.fnFilter("nothinghere"); + }, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "unit _START_ _END_ _TOTAL_ test"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoPostFix.js b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoPostFix.js new file mode 100644 index 00000000..deced0fd --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoPostFix.js @@ -0,0 +1,82 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sInfoPostFix" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Info post fix language is '' (blank) by default", + null, + function () { return oSettings.oLanguage.sInfoPostFix == ""; } + ); + + oTest.fnTest( + "Width no post fix, the basic info shows", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; } + ); + + + oTest.fnWaitTest( + "Info post fix language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfoPostFix": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sInfoPostFix == "unit test"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit test"; } + ); + + + oTest.fnWaitTest( + "Macros have no effect in the post fix", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfoPostFix": "unit _START_ _END_ _TOTAL_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit _START_ _END_ _TOTAL_ test"; } + ); + + + oTest.fnWaitTest( + "Post fix is applied after fintering info", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfoPostFix": "unit test" + } + } ); + oTable.fnFilter("nothinghere"); + }, + function () { return document.getElementById('example_info').innerHTML = "Showing 0 to 0 of 0 entries unit (filtered from 57 total entries) test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sLengthMenu.js b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sLengthMenu.js new file mode 100644 index 00000000..a814b263 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sLengthMenu.js @@ -0,0 +1,110 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sLengthMenu" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Menu language is 'Show _MENU_ entries' by default", + null, + function () { return oSettings.oLanguage.sLengthMenu == "Show _MENU_ entries"; } + ); + + oTest.fnTest( + "_MENU_ macro is replaced by select menu in DOM", + null, + function () { return $('select', oSettings.aanFeatures.l[0]).length == 1 } + ); + + oTest.fnTest( + "Default is put into DOM", + null, + function () { + var anChildren = oSettings.aanFeatures.l[0].childNodes; + var bReturn = + anChildren[0].nodeValue == "Show " && + anChildren[2].nodeValue == " entries"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Menu length language can be defined - no _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sLengthMenu": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sLengthMenu == "unit test"; } + ); + + oTest.fnTest( + "Menu length language definition is in the DOM", + null, + function () { + var anChildren = oSettings.aanFeatures.l[0].childNodes; + return anChildren[0].nodeValue == "unit test"; + } + ); + + + oTest.fnWaitTest( + "Menu length language can be defined - with _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sLengthMenu": "unit _MENU_ test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var anChildren = oSettings.aanFeatures.l[0].childNodes; + var bReturn = + anChildren[0].nodeValue == "unit " && + anChildren[2].nodeValue == " test"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Only the _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sLengthMenu": "_MENU_" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var anChildren = oSettings.aanFeatures.l[0].childNodes; + var bReturn = + anChildren.length == 1 && + $('select', oSettings.aanFeatures.l[0]).length == 1; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sProcessing.js b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sProcessing.js new file mode 100644 index 00000000..65f2e6d0 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sProcessing.js @@ -0,0 +1,51 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sProcessing" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bProcessing": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Processing language is 'Processing...' by default", + null, + function () { return oSettings.oLanguage.sProcessing == "Processing..."; } + ); + + oTest.fnTest( + "Processing language default is in the DOM", + null, + function () { return document.getElementById('example_processing').innerHTML = "Processing..."; } + ); + + + oTest.fnWaitTest( + "Processing language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bProcessing": true, + "oLanguage": { + "sProcessing": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sProcessing == "unit test"; } + ); + + oTest.fnTest( + "Processing language definition is in the DOM", + null, + function () { return document.getElementById('example_processing').innerHTML = "unit test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sSearch.js b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sSearch.js new file mode 100644 index 00000000..d67bcfaa --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sSearch.js @@ -0,0 +1,68 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sSearch" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Search language is 'Search:' by default", + null, + function () { return oSettings.oLanguage.sSearch == "Search:"; } + ); + + oTest.fnTest( + "Search language default is in the DOM", + null, + function () { return document.getElementById('example_filter').childNodes[0].nodeValue + == "Search: "; } + ); + + + oTest.fnWaitTest( + "Search language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sSearch": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sSearch == "unit test"; } + ); + + oTest.fnTest( + "Info language definition is in the DOM", + null, + function () { return document.getElementById('example_filter').childNodes[0].nodeValue + == "unit test "; } + ); + + + oTest.fnWaitTest( + "Blank search has a no space (separator) inserted", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sSearch": "" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return document.getElementById('example_filter').childNodes.length == 1; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sUrl.js b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sUrl.js new file mode 100644 index 00000000..03001855 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sUrl.js @@ -0,0 +1,64 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sUrl" ); + +/* Note that we only test the internal storage of language information pulled form a file here + * as the other language tests will check it goes into the DOM correctly + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "sUrl is blank by default", + null, + function () { return oSettings.oLanguage.sUrl == ""; } + ); + + + oTest.fnWaitTest( + "Loading of German file loads language information", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sUrl": "../../../examples/examples_support/de_DE.txt" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var bReturn = + oSettings.oLanguage.sProcessing == "Bitte warten..." && + oSettings.oLanguage.sLengthMenu == "_MENU_ Einträge anzeigen" && + oSettings.oLanguage.sZeroRecords == "Keine Einträge vorhanden." && + oSettings.oLanguage.sInfo == "_START_ bis _END_ von _TOTAL_ Einträgen" && + oSettings.oLanguage.sInfoEmpty == "0 bis 0 von 0 Einträgen" && + oSettings.oLanguage.sInfoFiltered == "(gefiltert von _MAX_ Einträgen)" && + oSettings.oLanguage.sInfoPostFix == "" && + oSettings.oLanguage.sSearch == "Suchen" && + oSettings.oLanguage.oPaginate.sFirst == "Erster" && + oSettings.oLanguage.oPaginate.sPrevious == "Zurück" && + oSettings.oLanguage.oPaginate.sNext == "Nächster" && + oSettings.oLanguage.oPaginate.sLast == "Letzter"; + + return bReturn; + } + ); + + /* One DOM check just to ensure that they go into the DOM */ + oTest.fnTest( + "Loaded language goes into the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "1 bis 10 von 57 Einträgen"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sZeroRecords.js b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sZeroRecords.js new file mode 100644 index 00000000..b1a17a24 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sZeroRecords.js @@ -0,0 +1,50 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sZeroRecords" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Zero records language is 'No matching records found' by default", + null, + function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; } + ); + + oTest.fnWaitTest( + "Text is shown when empty table (after filtering)", + function () { oTable.fnFilter('nothinghere'); }, + function () { return $('#example tbody tr td')[0].innerHTML == "No matching records found" } + ); + + + + oTest.fnWaitTest( + "Zero records language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sZeroRecords": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sZeroRecords == "unit test"; } + ); + + oTest.fnWaitTest( + "Text is shown when empty table (after filtering)", + function () { oTable.fnFilter('nothinghere2'); }, + function () { return $('#example tbody tr td')[0].innerHTML == "unit test" } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/oSearch.js b/media/unit_testing/tests_onhold/6_delayed_rendering/oSearch.js new file mode 100644 index 00000000..1bc693ab --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/oSearch.js @@ -0,0 +1,114 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oSearch" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default values should be blank", + null, + function () { + var bReturn = oSettings.oPreviousSearch.sSearch == "" && + !oSettings.oPreviousSearch.bRegex; + return bReturn; + } + ); + + /* This test might be considered iffy since the full object isn't given, but it's reasonable to + * expect DataTables to cope with this. It should just assumine regex false + */ + oTest.fnWaitTest( + "Search term only in object", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oSearch": { + "sSearch": "Mozilla" + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnWaitTest( + "New search will kill old one", + function () { + oTable.fnFilter("Opera"); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; } + ); + + oTest.fnWaitTest( + "Search plain text term and escape regex true", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oSearch": { + "sSearch": "DS", + "bRegex": false + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Nintendo DS browser"; } + ); + + oTest.fnWaitTest( + "Search plain text term and escape regex false", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oSearch": { + "sSearch": "Opera", + "bRegex": true + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; } + ); + + oTest.fnWaitTest( + "Search regex text term and escape regex true", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oSearch": { + "sSearch": "1.*", + "bRegex": false + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnWaitTest( + "Search regex text term and escape regex false", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oSearch": { + "sSearch": "1.*", + "bRegex": true + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp.js b/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp.js new file mode 100644 index 00000000..110b6a80 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp.js @@ -0,0 +1,140 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "Custom data source property - property given" ); + + +$(document).ready( function () { + var oInit = { + "sAjaxSource": "../../../examples/ajax/sources/custom_prop.txt", + "bDeferRender": true, + "sAjaxDataProp": "test" + }; + $('#example').dataTable( oInit ); + + oTest.fnWaitTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp2.js b/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp2.js new file mode 100644 index 00000000..bd0c3466 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp2.js @@ -0,0 +1,140 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "Custom data source property - array only" ); + + +$(document).ready( function () { + var oInit = { + "sAjaxSource": "../../../examples/ajax/sources/array_only.txt", + "bDeferRender": true, + "sAjaxDataProp": "" + }; + $('#example').dataTable( oInit ); + + oTest.fnWaitTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxSource.js b/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxSource.js new file mode 100644 index 00000000..0672ed72 --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxSource.js @@ -0,0 +1,23 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "sAjaxSource" ); + +/* Sanitfy check really - all the other tests blast this */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Server side is off by default", + null, + function () { + return oSettings.sAjaxSource == "../../../examples/ajax/sources/arrays.txt"; + } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/media/unit_testing/tests_onhold/6_delayed_rendering/sDom.js b/media/unit_testing/tests_onhold/6_delayed_rendering/sDom.js new file mode 100644 index 00000000..243f5b3a --- /dev/null +++ b/media/unit_testing/tests_onhold/6_delayed_rendering/sDom.js @@ -0,0 +1,269 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "sDom" ); + +/* This is going to be brutal on the browser! There is a lot that can be tested here... */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default DOM varaible", + null, + function () { return oSettings.sDom == "lfrtip"; } + ); + + oTest.fnWaitTest( + "Default DOM in document", + null, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + nNodes[4] == nInfo && + nNodes[5] == nPaging; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check example 1 in code propagates", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "sDom": '<"wrapper"flipt>' + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.sDom == '<"wrapper"flipt>'; } + ); + + oTest.fnWaitTest( + "Check example 1 in DOM", + null, + function () { + var jqNodes = $('#demo div, #demo table'); + var nNodes = []; + + /* Strip the paging nodes */ + for ( var i=0, iLen=jqNodes.length ; iip>' + } ); + }, + function () { + var jqNodes = $('#demo div, #demo table'); + var nNodes = []; + var nCustomWrappers = [] + + /* Strip the paging nodes */ + for ( var i=0, iLen=jqNodes.length ; i