From 3bc322fd375e5f26c39d9620a64e0788f18acef5 Mon Sep 17 00:00:00 2001 From: Keith Wood Date: Fri, 11 Jul 2008 11:02:45 +0000 Subject: [PATCH] Added tests for datepicker structure and callbacks Enhanced tests for destroy, enable/disable, ranges, and status Added tests for gotoCurrent, highlihgtWeek, yearRange, navigationAsDateFormat, rangeSeparator settings Added tests for day-of-year in format and parse --- tests/datepicker.html | 3 +- tests/datepicker.js | 813 +++++++++++++++++++++++++++++++++--------- 2 files changed, 655 insertions(+), 161 deletions(-) diff --git a/tests/datepicker.html b/tests/datepicker.html index 365afd9f4..d90394de5 100644 --- a/tests/datepicker.html +++ b/tests/datepicker.html @@ -9,6 +9,7 @@ + @@ -28,7 +29,7 @@
    -

    +

    diff --git a/tests/datepicker.js b/tests/datepicker.js index f2254bce5..153b37e6e 100644 --- a/tests/datepicker.js +++ b/tests/datepicker.js @@ -1,4 +1,4 @@ -/* +/* * datepicker unit tests */ (function($) { @@ -30,7 +30,7 @@ function equalsDateArray(a1, a2, message) { function init(id, options) { $.datepicker.setDefaults($.datepicker.regional['']); var inp = $(id); - inp.datepicker($.extend({speed: ''}, options || {})); + inp.datepicker($.extend({duration: ''}, options || {})); return inp; } @@ -52,21 +52,48 @@ test('setDefaults', function() { equals($.datepicker._defaults.showOn, 'focus', 'Restore showOn'); }); -test('remove', function() { - var rem = init('#rem'); - ok(rem.is('.hasDatepicker'), 'Marker class set'); - ok($.data(rem[0], PROP_NAME), 'Datepicker instance present'); - rem.datepicker('destroy'); - rem = $('#rem'); - ok(!rem.is('.hasDatepicker'), 'Marker class cleared'); - ok(!$.data(rem[0], PROP_NAME), 'Datepicker instance absent'); - rem.datepicker({showOn: 'both', buttonImage: 'img/calendar.gif'}); - ok(rem.is('.hasDatepicker'), 'Marker class set'); - ok($.data(rem[0], PROP_NAME), 'Datepicker instance present'); - rem.datepicker('destroy'); - rem = $('#rem'); - ok(!rem.is('.hasDatepicker'), 'Marker class cleared'); - ok(!$.data(rem[0], PROP_NAME), 'Datepicker instance absent'); +test('destroy', function() { + var inp = init('#inp'); + ok(inp.is('.hasDatepicker'), 'Default - marker class set'); + ok($.data(inp[0], PROP_NAME), 'Default - instance present'); + ok(inp.next().is('#alt'), 'Default - button absent'); + inp.datepicker('destroy'); + inp = $('#inp'); + ok(!inp.is('.hasDatepicker'), 'Default - marker class cleared'); + ok(!$.data(inp[0], PROP_NAME), 'Default - instance absent'); + ok(inp.next().is('#alt'), 'Default - button absent'); + // With button + inp= init('#inp', {showOn: 'both'}); + ok(inp.is('.hasDatepicker'), 'Button - marker class set'); + ok($.data(inp[0], PROP_NAME), 'Button - instance present'); + ok(inp.next().text() == '...', 'Button - button added'); + inp.datepicker('destroy'); + inp = $('#inp'); + ok(!inp.is('.hasDatepicker'), 'Button - marker class cleared'); + ok(!$.data(inp[0], PROP_NAME), 'Button - instance absent'); + ok(inp.next().is('#alt'), 'Button - button removed'); + // With append text + inp = init('#inp', {appendText: 'Testing'}); + ok(inp.is('.hasDatepicker'), 'Append - marker class set'); + ok($.data(inp[0], PROP_NAME), 'Append - instance present'); + ok(inp.next().text() == 'Testing', 'Append - append text added'); + inp.datepicker('destroy'); + inp = $('#inp'); + ok(!inp.is('.hasDatepicker'), 'Append - marker class cleared'); + ok(!$.data(inp[0], PROP_NAME), 'Append - instance absent'); + ok(inp.next().is('#alt'), 'Append - append text removed'); + // With both + inp= init('#inp', {showOn: 'both', buttonImageOnly: true, + buttonImage: 'img/calendar.gif', appendText: 'Testing'}); + ok(inp.is('.hasDatepicker'), 'Both - marker class set'); + ok($.data(inp[0], PROP_NAME), 'Both - instance present'); + ok(inp.next()[0].nodeName.toLowerCase() == 'img', 'Both - button added'); + ok(inp.next().next().text() == 'Testing', 'Both - append text added'); + inp.datepicker('destroy'); + inp = $('#inp'); + ok(!inp.is('.hasDatepicker'), 'Both - marker class cleared'); + ok(!$.data(inp[0], PROP_NAME), 'Both - instance absent'); + ok(inp.next().is('#alt'), 'Both - button and append text absent'); }); test('change', function() { @@ -108,8 +135,7 @@ test('invocation', function() { ok(!dp.is(':visible'), 'Focus - hidden on external click'); inp.datepicker('hide').datepicker('destroy'); // On button - inp = $('#inp'); - inp.datepicker({speed: '', showOn: 'button', buttonText: 'Popup'}); + inp = init('#inp', {showOn: 'button', buttonText: 'Popup'}); ok(!dp.is(':visible'), 'Button - initially hidden'); button = inp.siblings('button'); image = inp.siblings('img'); @@ -124,14 +150,14 @@ test('invocation', function() { ok(!dp.is(':visible'), 'Button - hidden on second button click'); inp.datepicker('hide').datepicker('destroy'); // On image button - inp = $('#inp'); - inp.datepicker({speed: '', showOn: 'button', buttonImageOnly: true, + inp = init('#inp', {showOn: 'button', buttonImageOnly: true, buttonImage: 'img/calendar.gif', buttonText: 'Cal'}); ok(!dp.is(':visible'), 'Image button - initially hidden'); button = inp.siblings('button'); ok(button.length == 0, 'Image button - button absent'); image = inp.siblings('img'); ok(image.length == 1, 'Image button - image present'); + equals(image.attr('src'), 'img/calendar.gif', 'Image button - image source'); equals(image.attr('title'), 'Cal', 'Image button - image text'); inp.focus(); ok(!dp.is(':visible'), 'Image button - not rendered on focus'); @@ -141,8 +167,7 @@ test('invocation', function() { ok(!dp.is(':visible'), 'Image button - hidden on second image click'); inp.datepicker('hide').datepicker('destroy'); // On both - inp = $('#inp'); - inp.datepicker({speed: '', showOn: 'both', buttonImage: 'img/calendar.gif'}); + inp = init('#inp', {showOn: 'both', buttonImage: 'img/calendar.gif'}); ok(!dp.is(':visible'), 'Both - initially hidden'); button = inp.siblings('button'); ok(button.length == 1, 'Both - button present'); @@ -158,18 +183,236 @@ test('invocation', function() { ok(dp.is(':visible'), 'Both - rendered on button click'); button.click(); ok(!dp.is(':visible'), 'Both - hidden on second button click'); + inp.datepicker('hide').datepicker('destroy'); +}); + +test('baseStructure', function() { + var dp = $('#ui-datepicker-div'); + var inp = init('#inp'); + inp.focus(); + var iframe = ($.browser.msie && parseInt($.browser.version) < 7); + ok(dp.is(':visible'), 'Structure - datepicker visible'); + ok(!dp.is('.ui-datepicker-rtl'), 'Structure - not right-to-left'); + ok(!dp.is('.ui-datepicker-multi'), 'Structure - not multi-month'); + equals(dp.children().length, 4 + (iframe ? 1 : 0), 'Structure - child count'); + var control = dp.children(':first'); + ok(control.is('div.ui-datepicker-control'), 'Structure - control division'); + equals(control.children().length, 2, 'Structure - control child count'); + ok(control.children(':first').is('div.ui-datepicker-clear'), + 'Structure - clear division'); + ok(control.children(':last').is('div.ui-datepicker-close'), + 'Structure - close division'); + var links = dp.children(':eq(1)'); + ok(links.is('div.ui-datepicker-links'), 'Structure - links division'); + equals(links.children().length, 3, 'Structure - links child count'); + ok(links.children(':first').is('div.ui-datepicker-prev') && + links.children(':first').html() != '', + 'Structure - prev division'); + ok(links.children(':eq(1)').is('div.ui-datepicker-current') && + links.children(':eq(1)').html() != '', + 'Structure - current division'); + ok(links.children(':last').is('div.ui-datepicker-next') && + links.children(':last').html() != '', + 'Structure - next division'); + var month = dp.children(':eq(2)'); + ok(month.is('div.ui-datepicker-one-month') && month.is('div.ui-datepicker-new-row'), + 'Structure - month division'); + var header = month.children(':first'); + ok(header.is('div.ui-datepicker-header'), 'Structure - month header division'); + equals(header.children().length, 2, 'Structure - month header child count'); + ok(header.children(':first').is('select.ui-datepicker-new-month'), + 'Structure - new month select'); + ok(header.children(':last').is('select.ui-datepicker-new-year'), + 'Structure - new year select'); + var table = month.children(':eq(1)'); + ok(table.is('table.ui-datepicker'), 'Structure - month table'); + ok(table.children(':first').is('thead'), 'Structure - month table thead'); + var titles = table.children(':first').children(':first'); + ok(titles.is('tr.ui-datepicker-title-row'), 'Structure - month table title row'); + equals(titles.find('a').length, 7, 'Structure - month table title links'); + ok(table.children(':eq(1)').is('tbody'), 'Structure - month table body'); + ok(table.children(':eq(1)').children('tr').length >= 4, + 'Structure - month table week count'); + var week = table.children(':eq(1)').children(':first'); + ok(week.is('tr.ui-datepicker-days-row'), 'Structure - month table week row'); + equals(week.children().length, 7, 'Structure - week child count'); + ok(week.children(':first').is('td.ui-datepicker-days-cell') && + week.children(':first').is('.ui-datepicker-week-end-cell') && + !week.children(':first').is('.ui-datepicker-week-col'), + 'Structure - month table first day cell'); + ok(week.children(':eq(1)').is('td.ui-datepicker-days-cell') && + !week.children(':eq(1)').is('.ui-datepicker-week-end-cell'), + 'Structure - month table second day cell'); + ok(dp.children('.ui-datepicker-status').length == 0, 'Structure - status'); + ok(dp.children('iframe').length == (iframe ? 1 : 0), 'Structure - iframe'); + inp.datepicker('hide').datepicker('destroy'); + // Multi-month 2 + inp = init('#inp', {numberOfMonths: 2}); + inp.focus(); + ok(dp.is('.ui-datepicker-multi'), 'Structure multi - multi-month'); + equals(dp.children().length, 5 + (iframe ? 1 : 0), 'Structure multi - child count'); + month = dp.children(':eq(2)'); + ok(month.is('div.ui-datepicker-one-month') && month.is('div.ui-datepicker-new-row'), + 'Structure multi - first month division'); + month = dp.children(':eq(3)'); + ok(month.is('div.ui-datepicker-one-month') && !month.is('div.ui-datepicker-new-row'), + 'Structure multi - second month division'); + inp.datepicker('hide').datepicker('destroy'); + // Multi-month [2, 2] + inp = init('#inp', {numberOfMonths: [2, 2]}); + inp.focus(); + ok(dp.is('.ui-datepicker-multi'), 'Structure multi - multi-month'); + equals(dp.children().length, 7 + (iframe ? 1 : 0), 'Structure multi - child count'); + month = dp.children(':eq(2)'); + ok(month.is('div.ui-datepicker-one-month') && month.is('div.ui-datepicker-new-row'), + 'Structure multi - first month division'); + month = dp.children(':eq(3)'); + ok(month.is('div.ui-datepicker-one-month') && !month.is('div.ui-datepicker-new-row'), + 'Structure multi - second month division'); + month = dp.children(':eq(4)'); + ok(month.is('div.ui-datepicker-one-month') && month.is('div.ui-datepicker-new-row'), + 'Structure multi - third month division'); + month = dp.children(':eq(5)'); + ok(month.is('div.ui-datepicker-one-month') && !month.is('div.ui-datepicker-new-row'), + 'Structure multi - fourth month division'); + inp.datepicker('hide').datepicker('destroy'); +}); + +test('customStructure', function() { + var dp = $('#ui-datepicker-div'); + // Check right-to-left localisation + var inp = init('#inp', $.datepicker.regional['he']); + inp.focus(); + var iframe = ($.browser.msie && parseInt($.browser.version) < 7); + ok(dp.is('.ui-datepicker-rtl'), 'Structure RTL - right-to-left'); + var links = dp.children(':eq(1)'); + ok(links.is('div.ui-datepicker-links'), 'Structure - links division'); + equals(links.children().length, 3, 'Structure - links child count'); + ok(links.children(':first').is('div.ui-datepicker-next'), + 'Structure - next division'); + ok(links.children(':eq(1)').is('div.ui-datepicker-current'), + 'Structure - current division'); + ok(links.children(':last').is('div.ui-datepicker-prev'), + 'Structure - prev division'); + inp.datepicker('hide').datepicker('destroy'); + // Close at bottom + inp = init('#inp', {closeAtTop: false}); + inp.focus(); + equals(dp.children().length, 4 + (iframe ? 1 : 0), + 'Structure close at bottom - child count'); + ok(dp.children(':first').is('div.ui-datepicker-links'), + 'Structure close at bottom - links division'); + ok(dp.children(':last').prev().is('div.ui-datepicker-control'), + 'Structure close at bottom - control division'); + inp.datepicker('hide').datepicker('destroy'); + // Mandatory + inp = init('#inp', {mandatory: true}); + inp.focus(); + var control = dp.children(':first'); + ok(control.is('div.ui-datepicker-control'), + 'Structure mandatory - control division'); + equals(control.children().length, 1, 'Structure mandatory - control child count'); + ok(control.children(':first').is('div.ui-datepicker-close'), + 'Structure mandatory - close division'); + inp.datepicker('hide').datepicker('destroy'); + // Hide prev/next + inp = init('#inp', {hideIfNoPrevNext: true, + minDate: new Date(2008, 2 - 1, 4), maxDate: new Date(2008, 2 - 1, 14)}); + inp.val('02/10/2008').focus(); + var links = dp.children(':eq(1)'); + ok(links.is('div.ui-datepicker-links'), + 'Structure hide prev/next - links division'); + equals(links.children().length, 2, 'Structure hide prev/next - links child count'); + ok(links.children(':first').is('div.ui-datepicker-prev') && + links.children(':first').html() == '', + 'Structure hide prev/next - prev division'); + ok(links.children(':last').is('div.ui-datepicker-next') && + links.children(':last').html() == '', + 'Structure hide prev/next - next division'); + inp.datepicker('hide').datepicker('destroy'); + // Can't change month + inp = init('#inp', {changeMonth: false}); + inp.focus(); + var header = dp.children(':eq(2)').children(':first'); + equals(header.children().length, 1, 'Structure change month - header child count'); + ok(header.children(':last').is('select.ui-datepicker-new-year'), + 'Structure change month - new year select'); + inp.datepicker('hide').datepicker('destroy'); + // Can't change year + inp = init('#inp', {changeYear: false}); + inp.focus(); + var header = dp.children(':eq(2)').children(':first'); + equals(header.children().length, 1, 'Structure change year - header child count'); + ok(header.children(':first').is('select.ui-datepicker-new-month'), + 'Structure change year - new month select'); + inp.datepicker('hide').datepicker('destroy'); + // Can't change first day of week + inp = init('#inp', {changeFirstDay: false}); + inp.focus(); + var titles = dp.find('.ui-datepicker-title-row'); + equals(titles.children().length, 7, 'Structure change first day - titles child count'); + equals(titles.find('a').length, 0, 'Structure change first day - titles links count'); + inp.datepicker('hide').datepicker('destroy'); + // Show weeks + inp = init('#inp', {showWeeks: true}); + inp.focus(); + titles = dp.find('.ui-datepicker-title-row'); + equals(titles.children().length, 8, 'Structure show weeks - titles child count'); + var week = dp.find('.ui-datepicker-days-row:first'); + equals(week.children().length, 8, 'Structure show weeks - week child count'); + ok(week.children(':first').is('td.ui-datepicker-week-col'), + 'Structure show weeks - week column'); + inp.datepicker('hide').datepicker('destroy'); + // Show status + inp = init('#inp', {showStatus: true}); + inp.focus(); + equals(dp.children().length, 6 + (iframe ? 1 : 0), + 'Structure show status - datepicker child count'); + ok(dp.children(':last').prev().is('div.ui-datepicker-status'), + 'Structure show status - status division'); + inp.datepicker('hide').datepicker('destroy'); }); test('enableDisable', function() { var inp = init('#inp'); - ok(!inp.datepicker('isDisabled'), 'Initially marked as enabled'); - ok(!inp[0].disabled, 'Field initially enabled'); + ok(!inp.datepicker('isDisabled'), 'Enable/disable - initially marked as enabled'); + ok(!inp[0].disabled, 'Enable/disable - field initially enabled'); inp.datepicker('disable'); - ok(inp.datepicker('isDisabled'), 'Now marked as disabled'); - ok(inp[0].disabled, 'Field now disabled'); + ok(inp.datepicker('isDisabled'), 'Enable/disable - now marked as disabled'); + ok(inp[0].disabled, 'Enable/disable - field now disabled'); inp.datepicker('enable'); - ok(!inp.datepicker('isDisabled'), 'Now marked as enabled'); - ok(!inp[0].disabled, 'Field now enabled'); + ok(!inp.datepicker('isDisabled'), 'Enable/disable - now marked as enabled'); + ok(!inp[0].disabled, 'Enable/disable - field now enabled'); + inp.datepicker('destroy'); + // With a button + inp = init('#inp', {showOn: 'button'}); + ok(!inp.datepicker('isDisabled'), 'Enable/disable button - initially marked as enabled'); + ok(!inp[0].disabled, 'Enable/disable button - field initially enabled'); + ok(!inp.next('button')[0].disabled, 'Enable/disable button - button initially enabled'); + inp.datepicker('disable'); + ok(inp.datepicker('isDisabled'), 'Enable/disable button - now marked as disabled'); + ok(inp[0].disabled, 'Enable/disable button - field now disabled'); + ok(inp.next('button')[0].disabled, 'Enable/disable button - button now disabled'); + inp.datepicker('enable'); + ok(!inp.datepicker('isDisabled'), 'Enable/disable button - now marked as enabled'); + ok(!inp[0].disabled, 'Enable/disable button - field now enabled'); + ok(!inp.next('button')[0].disabled, 'Enable/disable button - button now enabled'); + inp.datepicker('destroy'); + // With an image button + inp = init('#inp', {showOn: 'button', buttonImageOnly: true, + buttonImage: 'img/calendar.gif'}); + ok(!inp.datepicker('isDisabled'), 'Enable/disable image - initially marked as enabled'); + ok(!inp[0].disabled, 'Enable/disable image - field initially enabled'); + ok(inp.next('img').css('opacity') == 1, 'Enable/disable image - image initially enabled'); + inp.datepicker('disable'); + ok(inp.datepicker('isDisabled'), 'Enable/disable image - now marked as disabled'); + ok(inp[0].disabled, 'Enable/disable image - field now disabled'); + ok(inp.next('img').css('opacity') != 1, 'Enable/disable image - image now disabled'); + inp.datepicker('enable'); + ok(!inp.datepicker('isDisabled'), 'Enable/disable image - now marked as enabled'); + ok(!inp[0].disabled, 'Enable/disable image - field now enabled'); + ok(inp.next('img').css('opacity') == 1, 'Enable/disable image - image now enabled'); + inp.datepicker('destroy'); }); test('keystrokes', function() { @@ -180,7 +423,8 @@ test('keystrokes', function() { equalsDate(inp.datepicker('getDate'), date, 'Keystroke enter'); inp.val('02/04/2008').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), 'Keystroke enter - preset'); + equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), + 'Keystroke enter - preset'); inp.val('02/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_HOME}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); @@ -193,11 +437,13 @@ test('keystrokes', function() { ok(inp.datepicker('getDate') == null, 'Keystroke esc'); inp.val('02/04/2008').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_ESC}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), 'Keystroke esc - preset'); + equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), + 'Keystroke esc - preset'); inp.val('02/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ESC}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), 'Keystroke esc - abandoned'); + equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), + 'Keystroke esc - abandoned'); // Moving by day or week inp.val('').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_LEFT}). @@ -243,36 +489,52 @@ test('keystrokes', function() { inp.val('02/04/2008').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 1 - 1, 4), 'Keystroke pgup'); + equalsDate(inp.datepicker('getDate'), new Date(2008, 1 - 1, 4), + 'Keystroke pgup'); inp.val('02/04/2008').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 3 - 1, 4), 'Keystroke pgdn'); + equalsDate(inp.datepicker('getDate'), new Date(2008, 3 - 1, 4), + 'Keystroke pgdn'); inp.val('02/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2007, 2 - 1, 4), 'Keystroke ctrl+pgup'); + equalsDate(inp.datepicker('getDate'), new Date(2007, 2 - 1, 4), + 'Keystroke ctrl+pgup'); inp.val('02/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2009, 2 - 1, 4), 'Keystroke ctrl+pgdn'); + equalsDate(inp.datepicker('getDate'), new Date(2009, 2 - 1, 4), + 'Keystroke ctrl+pgdn'); // Check for moving to short months inp.val('03/31/2008').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 29), 'Keystroke pgup - Feb'); + equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 29), + 'Keystroke pgup - Feb'); inp.val('01/30/2008').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 29), 'Keystroke pgdn - Feb'); + equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 29), + 'Keystroke pgdn - Feb'); inp.val('02/29/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2007, 2 - 1, 28), 'Keystroke ctrl+pgup - Feb'); + equalsDate(inp.datepicker('getDate'), new Date(2007, 2 - 1, 28), + 'Keystroke ctrl+pgup - Feb'); inp.val('02/29/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2009, 2 - 1, 28), 'Keystroke ctrl+pgdn - Feb'); + equalsDate(inp.datepicker('getDate'), new Date(2009, 2 - 1, 28), + 'Keystroke ctrl+pgdn - Feb'); + // Goto current + inp.datepicker('change', {gotoCurrent: true}); + inp.datepicker('hide').val('02/04/2008').datepicker('show'); + inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}). + simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_HOME}). + simulate('keydown', {keyCode: $.simulate.VK_ENTER}); + equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), + 'Keystroke ctrl+home'); }); test('mouse', function() { @@ -285,7 +547,8 @@ test('mouse', function() { equalsDate(inp.datepicker('getDate'), date, 'Mouse click'); inp.val('02/04/2008').datepicker('show'); $('.ui-datepicker tbody a:contains(12)', dp).simulate('click', {}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 12), 'Mouse click - preset'); + equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 12), + 'Mouse click - preset'); inp.val('02/04/2008').datepicker('show'); $('.ui-datepicker-clear a', dp).simulate('click', {}); ok(inp.datepicker('getDate') == null, 'Mouse click - clear'); @@ -294,11 +557,13 @@ test('mouse', function() { ok(inp.datepicker('getDate') == null, 'Mouse click - close'); inp.val('02/04/2008').datepicker('show'); $('.ui-datepicker-close a', dp).simulate('click', {}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), 'Mouse click - close + preset'); + equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), + 'Mouse click - close + preset'); inp.val('02/04/2008').datepicker('show'); $('.ui-datepicker-prev a', dp).simulate('click', {}); $('.ui-datepicker-close a', dp).simulate('click', {}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), 'Mouse click - abandoned'); + equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), + 'Mouse click - abandoned'); // Current/previous/next inp.val('02/04/2008').datepicker('show'); $('.ui-datepicker-current a', dp).simulate('click', {}); @@ -308,26 +573,40 @@ test('mouse', function() { inp.val('02/04/2008').datepicker('show'); $('.ui-datepicker-prev a', dp).simulate('click', {}); $('.ui-datepicker tbody a:contains(16)', dp).simulate('click', {}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 1 - 1, 16), 'Mouse click - previous'); + equalsDate(inp.datepicker('getDate'), new Date(2008, 1 - 1, 16), + 'Mouse click - previous'); inp.val('02/04/2008').datepicker('show'); $('.ui-datepicker-next a', dp).simulate('click', {}); $('.ui-datepicker tbody a:contains(18)', dp).simulate('click', {}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 3 - 1, 18), 'Mouse click - next'); + equalsDate(inp.datepicker('getDate'), new Date(2008, 3 - 1, 18), + 'Mouse click - next'); // Previous/next with minimum/maximum - inp.datepicker('change', {minDate: new Date(2008, 2 - 1, 2), maxDate: new Date(2008, 2 - 1, 26)}). - val('02/04/2008').datepicker('show'); + inp.datepicker('change', {minDate: new Date(2008, 2 - 1, 2), + maxDate: new Date(2008, 2 - 1, 26)}).val('02/04/2008').datepicker('show'); $('.ui-datepicker-prev a', dp).simulate('click', {}); $('.ui-datepicker tbody a:contains(16)', dp).simulate('click', {}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 16), 'Mouse click - previous + min/max'); + equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 16), + 'Mouse click - previous + min/max'); inp.val('02/04/2008').datepicker('show'); $('.ui-datepicker-next a', dp).simulate('click', {}); $('.ui-datepicker tbody a:contains(18)', dp).simulate('click', {}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 18), 'Mouse click - next + min/max'); + equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 18), + 'Mouse click - next + min/max'); // Change day of week inp.val('02/04/2008').datepicker('show'); - equals($('.ui-datepicker-title-row td:first', dp).text(), 'Su', 'Mouse click - initial day of week'); + equals($('.ui-datepicker-title-row td:first', dp).text(), 'Su', + 'Mouse click - initial day of week'); $('.ui-datepicker-title-row td:last a', dp).simulate('click', {}); - equals($('.ui-datepicker-title-row td:first', dp).text(), 'Sa', 'Mouse click - day of week'); + equals($('.ui-datepicker-title-row td:first', dp).text(), 'Sa', + 'Mouse click - day of week'); + // Highlight week + inp.datepicker('change', {highlightWeek: true}). + datepicker('hide').val('02/04/2008').datepicker('show'); + ok(!$('.ui-datepicker tr:eq(2)', dp).is('.ui-datepicker-week-over'), + 'Mouse over - no week highlight'); + $('.ui-datepicker tr:eq(2) td:first', dp).simulate('mouseover', {}); + ok($('.ui-datepicker tr:eq(2)', dp).is('.ui-datepicker-week-over'), + 'Mouse over - week highlight'); }); test('defaultDate', function() { @@ -393,6 +672,56 @@ test('defaultDate', function() { equalsDate(inp.datepicker('getDate'), date, 'Default date 01/26/2007'); }); +test('miscellaneous', function() { + var dp = $('#ui-datepicker-div'); + var inp = init('#inp'); + // Year range + inp.val('02/04/2008').datepicker('show'); + equals(dp.find('.ui-datepicker-new-year').text(), + '199819992000200120022003200420052006200720082009201020112012201320142015201620172018', + 'Year range - default'); + inp.datepicker('hide').datepicker('change', {yearRange: '-6:+2'}).datepicker('show'); + equals(dp.find('.ui-datepicker-new-year').text(), + '200220032004200520062007200820092010', 'Year range - -6:+2'); + inp.datepicker('hide').datepicker('change', {yearRange: '2000:2010'}).datepicker('show'); + equals(dp.find('.ui-datepicker-new-year').text(), + '20002001200220032004200520062007200820092010', 'Year range - 2000:2010'); + // Navigation as date format + equals(dp.find('.ui-datepicker-prev').text(), + '', 'Navigation next - default'); + inp.datepicker('hide').datepicker('change', {navigationAsDateFormat: true, + prevText: '< M', currentText: 'MM', nextText: 'M >'}). + val('02/04/2008').datepicker('show'); + var longNames = $.datepicker.regional[''].monthNames; + var shortNames = $.datepicker.regional[''].monthNamesShort; + var date = new Date(); + equals(dp.find('.ui-datepicker-prev').text(), + '< ' + shortNames[0], 'Navigation prev - as date format'); + equals(dp.find('.ui-datepicker-current').text(), + longNames[date.getMonth()], 'Navigation current - as date format'); + equals(dp.find('.ui-datepicker-next').text(), + shortNames[2] + ' >', 'Navigation next - as date format'); + inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}); + equals(dp.find('.ui-datepicker-prev').text(), + '< ' + shortNames[1], 'Navigation prev - as date format + pgdn'); + equals(dp.find('.ui-datepicker-current').text(), + longNames[date.getMonth()], 'Navigation current - as date format + pgdn'); + equals(dp.find('.ui-datepicker-next').text(), + shortNames[3] + ' >', 'Navigation next - as date format + pgdn'); + inp.datepicker('hide').datepicker('change', {gotoCurrent: true}). + val('02/04/2008').datepicker('show'); + equals(dp.find('.ui-datepicker-prev').text(), + '< ' + shortNames[0], 'Navigation prev - as date format + goto current'); + equals(dp.find('.ui-datepicker-current').text(), + longNames[1], 'Navigation current - as date format + goto current'); + equals(dp.find('.ui-datepicker-next').text(), + shortNames[2] + ' >', 'Navigation next - as date format + goto current'); +}); + test('minMax', function() { var inp = init('#inp'); var lastYear = new Date(2007, 6 - 1, 4); @@ -402,35 +731,46 @@ test('minMax', function() { inp.val('06/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), lastYear, 'Min/max - null, null - ctrl+pgup'); + equalsDate(inp.datepicker('getDate'), lastYear, + 'Min/max - null, null - ctrl+pgup'); inp.val('06/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), nextYear, 'Min/max - null, null - ctrl+pgdn'); - inp.datepicker('change', {minDate: minDate}).datepicker('hide').val('06/04/2008').datepicker('show'); + equalsDate(inp.datepicker('getDate'), nextYear, + 'Min/max - null, null - ctrl+pgdn'); + inp.datepicker('change', {minDate: minDate}). + datepicker('hide').val('06/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), minDate, 'Min/max - 02/29/2008, null - ctrl+pgup'); + equalsDate(inp.datepicker('getDate'), minDate, + 'Min/max - 02/29/2008, null - ctrl+pgup'); inp.val('06/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), nextYear, 'Min/max - 02/29/2008, null - ctrl+pgdn'); - inp.datepicker('change', {maxDate: maxDate}).datepicker('hide').val('06/04/2008').datepicker('show'); + equalsDate(inp.datepicker('getDate'), nextYear, + 'Min/max - 02/29/2008, null - ctrl+pgdn'); + inp.datepicker('change', {maxDate: maxDate}). + datepicker('hide').val('06/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), minDate, 'Min/max - 02/29/2008, 12/07/2008 - ctrl+pgup'); + equalsDate(inp.datepicker('getDate'), minDate, + 'Min/max - 02/29/2008, 12/07/2008 - ctrl+pgup'); inp.val('06/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), maxDate, 'Min/max - 02/29/2008, 12/07/2008 - ctrl+pgdn'); - inp.datepicker('change', {minDate: null}).datepicker('hide').val('06/04/2008').datepicker('show'); + equalsDate(inp.datepicker('getDate'), maxDate, + 'Min/max - 02/29/2008, 12/07/2008 - ctrl+pgdn'); + inp.datepicker('change', {minDate: null}). + datepicker('hide').val('06/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), lastYear, 'Min/max - null, 12/07/2008 - ctrl+pgup'); + equalsDate(inp.datepicker('getDate'), lastYear, + 'Min/max - null, 12/07/2008 - ctrl+pgup'); inp.val('06/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), maxDate, 'Min/max - null, 12/07/2008 - ctrl+pgdn'); + equalsDate(inp.datepicker('getDate'), maxDate, + 'Min/max - null, 12/07/2008 - ctrl+pgdn'); // relative dates var date = new Date(); date.setDate(date.getDate() - 7); @@ -438,14 +778,16 @@ test('minMax', function() { datepicker('hide').val('').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), date, 'Min/max - -1w, +1 M +10 D - ctrl+pgup'); + equalsDate(inp.datepicker('getDate'), date, + 'Min/max - -1w, +1 M +10 D - ctrl+pgup'); date = new Date(); date.setMonth(date.getMonth() + 1); date.setDate(date.getDate() + 10); inp.val('').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), date, 'Min/max - -1w, +1 M +10 D - ctrl+pgdn'); + equalsDate(inp.datepicker('getDate'), date, + 'Min/max - -1w, +1 M +10 D - ctrl+pgdn'); }); test('setDate', function() { @@ -470,78 +812,124 @@ test('setDate', function() { date2 = new Date(2009, 7 - 1, 5); inp.datepicker('change', {rangeSelect: true}); inp.datepicker('setDate', date1, date2); - equalsDateArray(inp.datepicker('getDate'), [date1, date2], 'Set date range - 2008-06-04 - 2009-07-05'); + equalsDateArray(inp.datepicker('getDate'), [date1, date2], + 'Set date range - 2008-06-04 - 2009-07-05'); inp.datepicker('setDate', date1); - equalsDateArray(inp.datepicker('getDate'), [date1, date1], 'Set date range - 2008-06-04'); + equalsDateArray(inp.datepicker('getDate'), [date1, date1], + 'Set date range - 2008-06-04'); date1 = new Date(); date1.setDate(date1.getDate() - 10); date2 = new Date(); date2.setDate(date2.getDate() + 10); inp.datepicker('setDate', -10, +10); - equalsDateArray(inp.datepicker('getDate'), [date1, date2], 'Set date range - -10 - +10'); + equalsDateArray(inp.datepicker('getDate'), [date1, date2], + 'Set date range - -10 - +10'); inp.datepicker('setDate', -10); - equalsDateArray(inp.datepicker('getDate'), [date1, date1], 'Set date range - -10'); + equalsDateArray(inp.datepicker('getDate'), [date1, date1], + 'Set date range - -10'); date1 = new Date(); date1.setDate(date1.getDate() - 14); date2 = new Date(); date2.setFullYear(date2.getFullYear() + 1); inp.datepicker('setDate', '-2w', '+1Y'); - equalsDateArray(inp.datepicker('getDate'), [date1, date2], 'Set date range - -2w - +1Y'); + equalsDateArray(inp.datepicker('getDate'), [date1, date2], + 'Set date range - -2w - +1Y'); inp.datepicker('setDate', '-2w'); - equalsDateArray(inp.datepicker('getDate'), [date1, date1], 'Set date range - -2w'); + equalsDateArray(inp.datepicker('getDate'), [date1, date1], + 'Set date range - -2w'); inp.datepicker('setDate'); isObj(inp.datepicker('getDate'), [null, null], 'Set date range - null'); }); test('ranges', function() { var inp = init('#inp', {rangeSelect: true}); - var d1 = new Date(); - var d2 = new Date(); + var date1 = new Date(); + var date2 = new Date(); // Select today - today inp.val('').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDateArray(inp.datepicker('getDate'), [d1, d2], 'Range 1 month - enter/enter'); + equalsDateArray(inp.datepicker('getDate'), [date1, date1], + 'Range - enter/enter'); // Can't select prior to start date inp.val('').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_UP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDateArray(inp.datepicker('getDate'), [d1, d2], 'Range 1 month - enter/ctrl+up/enter'); + equalsDateArray(inp.datepicker('getDate'), [date1, date1], + 'Range - enter/ctrl+up/enter'); // Can select after start date inp.val('').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - d2.setDate(d2.getDate() + 7); - equalsDateArray(inp.datepicker('getDate'), [d1, d2], 'Range 1 month - enter/ctrl+down/enter'); + date2.setDate(date2.getDate() + 7); + equalsDateArray(inp.datepicker('getDate'), [date1, date2], + 'Range - enter/ctrl+down/enter'); + equals(inp.val(), $.datepicker.formatDate('mm/dd/yy', date1) + ' - ' + + $.datepicker.formatDate('mm/dd/yy', date2), 'Range - value'); // Select then cancel defaults to first date inp.val('').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). simulate('keydown', {keyCode: $.simulate.VK_ESC}); - equalsDateArray(inp.datepicker('getDate'), [d1, d1], 'Range 1 month - enter/ctrl+down/esc'); - // Callbacks - inp.datepicker('change', {onSelect: callback}).datepicker('hide'). - val('06/04/2008').datepicker('show'); + equalsDateArray(inp.datepicker('getDate'), [date1, date1], + 'Range - enter/ctrl+down/esc'); + // Separator + inp.datepicker('change', {rangeSeparator: ' to '}). + datepicker('hide').val('06/04/2008').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equals(selectedDate, '06/04/2008 - 06/11/2008', 'Range 1 month onSelect - enter/ctrl+down/enter'); - inp.datepicker('change', {onChangeMonthYear: callback, onSelect: null}).datepicker('hide'). - val('05/04/2008').datepicker('show'); + equalsDateArray(inp.datepicker('getDate'), + [new Date(2008, 6 - 1, 4), new Date(2008, 6 - 1, 11)], + 'Range separator - enter/ctrl+down/enter'); + equals(inp.val(), '06/04/2008 to 06/11/2008', + 'Range separator - value'); + // Callbacks + inp.datepicker('change', {onSelect: callback, rangeSeparator: ' - '}). + datepicker('hide').val('06/04/2008').datepicker('show'); + inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}). + simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). + simulate('keydown', {keyCode: $.simulate.VK_ENTER}); + equals(selectedDate, '06/04/2008 - 06/11/2008', + 'Range onSelect - enter/ctrl+down/enter'); + inp.datepicker('change', {onChangeMonthYear: callback, onSelect: null}). + datepicker('hide').val('05/04/2008').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(selectedDate, new Date(2008, 4 - 1, 1), 'Range 1 month onChangeMonthYear - enter/ctrl+down/enter'); - inp.datepicker('change', {onClose: callback, onChangeMonthYear: null}).datepicker('hide'). - val('03/04/2008').datepicker('show'); + equalsDate(selectedDate, new Date(2008, 4 - 1, 1), + 'Range onChangeMonthYear - enter/ctrl+down/enter'); + inp.datepicker('change', {onClose: callback, onChangeMonthYear: null}). + datepicker('hide').val('03/04/2008').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDateArray(selectedDate, [new Date(2008, 3 - 1, 4), new Date(2008, 3 - 1, 11)], - 'Range 1 month onClose - enter/ctrl+down/enter'); + equalsDateArray(selectedDate, [new Date(2008, 3 - 1, 4), + new Date(2008, 3 - 1, 11)], 'Range onClose - enter/ctrl+down/enter'); + // Minimum/maximum + date1 = new Date(2008, 5 - 1, 20); + date2 = new Date(2008, 7 - 1, 2); + inp.datepicker('change', {minDate: date1, maxDate: date2, onChangeMonthYear: null}). + datepicker('hide').val('06/04/2008').datepicker('show'); + inp.simulate('keydown', {keyCode: $.simulate.VK_PGUP}). + simulate('keydown', {keyCode: $.simulate.VK_ENTER}). + simulate('keydown', {keyCode: $.simulate.VK_PGDN}). + simulate('keydown', {keyCode: $.simulate.VK_PGDN}). + simulate('keydown', {keyCode: $.simulate.VK_ENTER}); + equalsDateArray(inp.datepicker('getDate'), [date1, date2], + 'Range min/max - pgup/enter/pgdn/pgdn/enter'); + inp.val('06/04/2008').datepicker('show'); + inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_UP}). + simulate('keydown', {keyCode: $.simulate.VK_ENTER}). + simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). + simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). + simulate('keydown', {keyCode: $.simulate.VK_ENTER}); + equalsDateArray(inp.datepicker('getDate'), + [new Date(2008, 5 - 1, 28), new Date(2008, 6 - 1, 11)], + 'Range min/max - ctrl+up/enter/ctrl+down/ctrl+down/enter'); }); test('altField', function() { @@ -602,16 +990,20 @@ test('altField', function() { inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}). simulate('keydown', {keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equals(inp.val(), '06/04/2008 - 07/04/2008', 'Alt field range - dp - enter/pgdn/enter'); - equals(alt.val(), '2008-06-04 - 2008-07-04', 'Alt field range - alt - enter/pgdn/enter'); + equals(inp.val(), '06/04/2008 - 07/04/2008', + 'Alt field range - dp - enter/pgdn/enter'); + equals(alt.val(), '2008-06-04 - 2008-07-04', + 'Alt field range - alt - enter/pgdn/enter'); // Range select escape alt.val(''); inp.val('06/04/2008 - 07/14/2008').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}). simulate('keydown', {keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ESC}); - equals(inp.val(), '06/04/2008 - 06/04/2008', 'Alt field range - dp - enter/pgdn/esc'); - equals(alt.val(), '2008-06-04 - 2008-06-04', 'Alt field range - alt - enter/pgdn/esc'); + equals(inp.val(), '06/04/2008 - 06/04/2008', + 'Alt field range - dp - enter/pgdn/esc'); + equals(alt.val(), '2008-06-04 - 2008-06-04', + 'Alt field range - alt - enter/pgdn/esc'); // Range select clear alt.val(''); inp.val('06/04/2008 - 07/14/2008').datepicker('show'); @@ -622,6 +1014,74 @@ test('altField', function() { equals(alt.val(), '', 'Alt field range - alt - enter/pgdn/ctrl+end'); }); +var beforeShowThis = null; +var beforeShowInput = null; +var beforeShowInst = null; + +function beforeAll(input, inst) { + beforeShowThis = this; + beforeShowInput = input; + beforeShowInst = inst; + return {currentText: 'Current'}; +} + +var beforeShowDayThis = null; +var beforeShowDayOK = true; + +function beforeDay(date) { + beforeShowDayThis = this; + beforeShowDayOK &= (date > new Date(2008, 1 - 1, 26) && + date < new Date(2008, 3 - 1, 6)); + return [(date.getDate() % 2 == 0), (date.getDate() % 10 == 0 ? 'day10' : ''), + (date.getDate() % 3 == 0 ? 'Divisble by 3' : '')]; +} + +function calcWeek(date) { + var doy = date.getDate() + 6; + for (var m = date.getMonth() - 1; m >= 0; m--) + doy += $.datepicker._getDaysInMonth(date.getFullYear(), m); + // Simple count from 01/01 starting at week 1 + return Math.floor(doy / 7); +} + +test('callbacks', function() { + // Before show + var inp = init('#inp', {beforeShow: beforeAll}); + var inst = $.data(inp[0], 'datepicker'); + equals($.datepicker._get(inst, 'currentText'), 'Today', 'Before show - initial'); + inp.val('02/04/2008').datepicker('show'); + equals($.datepicker._get(inst, 'currentText'), 'Current', 'Before show - changed'); + ok(beforeShowThis.id == inp[0].id, 'Before show - this OK'); + ok(beforeShowInput.id == inp[0].id, 'Before show - input OK'); + isObj(beforeShowInst, inst, 'Before show - inst OK'); + inp.datepicker('hide').datepicker('destroy'); + // Before show day + inp = init('#inp', {beforeShowDay: beforeDay}); + var dp = $('#ui-datepicker-div'); + inp.val('02/04/2008').datepicker('show'); + ok(beforeShowDayThis.id == inp[0].id, 'Before show day - this OK'); + ok(beforeShowDayOK, 'Before show day - dates OK'); + var day20 = dp.find('.ui-datepicker td:contains("20")'); + var day21 = dp.find('.ui-datepicker td:contains("21")'); + ok(!day20.is('.ui-datepicker-unselectable'), 'Before show day - unselectable 20'); + ok(day21.is('.ui-datepicker-unselectable'), 'Before show day - unselectable 21'); + ok(day20.is('.day10'), 'Before show day - CSS 20'); + ok(!day21.is('.day10'), 'Before show day - CSS 21'); + ok(day20.attr('title') == '', 'Before show day - title 20'); + ok(day21.attr('title') == 'Divisble by 3', 'Before show day - title 21'); + inp.datepicker('hide').datepicker('destroy'); + // Calculate week + inp = init('#inp', {showWeeks: true, calculateWeek: calcWeek}); + inp.val('02/04/2008').datepicker('show'); + equals($('.ui-datepicker-week-col:first').text(), 4, 'Calculate week'); + equals($('.ui-datepicker-week-col:last').text(), 8, 'Calculate week'); + // Make Tuesday first + $('.ui-datepicker-title-row a:contains("Tu")', dp).simulate('click', {}); + equals($('.ui-datepicker-week-col:first').text(), 5, 'Calculate week'); + equals($('.ui-datepicker-week-col:last').text(), 9, 'Calculate week'); + inp.datepicker('hide').datepicker('destroy'); +}); + var selectedThis = null; var selectedDate = null; var selectedInst = null; @@ -632,7 +1092,7 @@ function callback(date, inst) { selectedInst = inst; } -test('callbacks', function() { +test('events', function() { var inp = init('#inp', {onSelect: callback}); var date = new Date(); // onSelect @@ -640,15 +1100,18 @@ test('callbacks', function() { inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}); equals(selectedThis, inp[0], 'Callback selected this'); equals(selectedInst, $.data(inp[0], PROP_NAME), 'Callback selected inst'); - equals(selectedDate, $.datepicker.formatDate('mm/dd/yy', date), 'Callback selected date'); + equals(selectedDate, $.datepicker.formatDate('mm/dd/yy', date), + 'Callback selected date'); inp.val('').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date.setDate(date.getDate() + 7); - equals(selectedDate, $.datepicker.formatDate('mm/dd/yy', date), 'Callback selected date - ctrl+down'); + equals(selectedDate, $.datepicker.formatDate('mm/dd/yy', date), + 'Callback selected date - ctrl+down'); inp.val('').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_ESC}); - equals(selectedDate, $.datepicker.formatDate('mm/dd/yy', date), 'Callback selected date - esc'); + equals(selectedDate, $.datepicker.formatDate('mm/dd/yy', date), + 'Callback selected date - esc'); // onChangeMonthYear inp.datepicker('change', {onChangeMonthYear: callback, onSelect: null}). val('').datepicker('show'); @@ -672,7 +1135,8 @@ test('callbacks', function() { date.setFullYear(date.getFullYear() + 1); equalsDate(selectedDate, date, 'Callback change month/year date - ctrl+pgdn'); // onChangeMonthYear step by 2 - inp.datepicker('change', {stepMonths: 2}).datepicker('hide').val('').datepicker('show'); + inp.datepicker('change', {stepMonths: 2}). + datepicker('hide').val('').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_PGUP}); date.setMonth(date.getMonth() - 14); equalsDate(selectedDate, date, 'Callback change month/year by 2 date - pgup'); @@ -703,11 +1167,16 @@ test('callbacks', function() { ok(selectedDate == null, 'Callback close date - ctrl+end'); }); +function highlight20(date, inst) { + return (date.getDate() == 20 ? '*** 20 ***' : $.datepicker.dateStatus(date, inst)); +} + test('status', function() { - var inp = init('#inp', {showStatus: true}); - inp.val('').datepicker('show'); var dp = $('#ui-datepicker-div'); + var inp = init('#inp', {showStatus: true, statusForDate: highlight20, showWeeks: true}); + inp.val('').datepicker('show'); var status = $('.ui-datepicker-status', dp); + ok(status.length == 1, 'Status - present'); equals(status.text(), 'Select a date', 'Status - default'); $('.ui-datepicker-clear a', dp).simulate('mouseover'); equals(status.text(), 'Erase the current date', 'Status - clear'); @@ -723,6 +1192,8 @@ test('status', function() { equals(status.text(), 'Show a different month', 'Status - new month'); $('.ui-datepicker-new-year', dp).simulate('mouseover'); equals(status.text(), 'Show a different year', 'Status - new year'); + $('.ui-datepicker-title-row td:first', dp).simulate('mouseover'); + equals(status.text(), 'Week of the year', 'Status - week header'); var day = 0; $('.ui-datepicker-title-row a', dp).each(function() { $(this).simulate('mouseover'); @@ -730,6 +1201,8 @@ test('status', function() { ' as first week day', 'Status - day ' + day); day++; }); + $('.ui-datepicker-days-row:eq(1) td:first', dp).simulate('mouseover'); + equals(status.text(), 'Week of the year', 'Status - week column'); day = 0; var month = $.datepicker.regional[''].monthNamesShort[new Date().getMonth()]; $('.ui-datepicker-days-row:eq(1) a', dp).each(function() { @@ -738,11 +1211,16 @@ test('status', function() { ', ' + month + ' ' + $(this).text(), 'Status - dates'); day++; }); + $('.ui-datepicker-days-row a:contains("20")', dp).each(function() { + $(this).simulate('mouseover'); + equals(status.text(), '*** 20 ***', 'Status - dates'); + }); + inp.datepicker('hide').datepicker('destroy'); }); test('localisation', function() { var inp = init('#inp', $.datepicker.regional['fr']); - inp.datepicker('change', {dateFormat: 'DD, d MM yy', showStatus: true}). + inp.datepicker('change', {dateFormat: 'DD, d MM yy', showStatus: true, showWeeks: true}). val('').datepicker('show'); var dp = $('#ui-datepicker-div'); var status = $('.ui-datepicker-status', dp); @@ -750,7 +1228,7 @@ test('localisation', function() { equals($('.ui-datepicker-close', dp).text(), 'Fermer', 'Localisation - close'); $('.ui-datepicker-close a', dp).simulate('mouseover'); equals(status.text(), 'Fermer sans modifier', 'Localisation - status'); - equals($('.ui-datepicker-prev', dp).text(), '', 'Localisation - next'); equals($('.ui-datepicker-current', dp).text(), 'Courant', 'Localisation - current'); @@ -760,16 +1238,18 @@ test('localisation', function() { 'Localisation - month ' + month); month++; }); + equals($('.ui-datepicker-title-row td:first', dp).text(), + $.datepicker.regional['fr'].weekHeader, 'Localisation - week header'); var day = 0; - $('.ui-datepicker-title-row td', dp).each(function() { + $('.ui-datepicker-title-row a', dp).each(function() { equals($(this).text(), $.datepicker.regional['fr'].dayNamesMin[day], 'Localisation - day ' + day); day++; }); inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}); var date = new Date(); - equals(inp.val(), $.datepicker.regional['fr'].dayNames[date.getDay()] + - ', ' + date.getDate() + ' ' + $.datepicker.regional['fr'].monthNames[date.getMonth()] + + equals(inp.val(), $.datepicker.regional['fr'].dayNames[date.getDay()] + ', ' + + date.getDate() + ' ' + $.datepicker.regional['fr'].monthNames[date.getMonth()] + ' ' + date.getFullYear(), 'Localisation - formatting'); }); @@ -809,6 +1289,7 @@ test('iso8601Week', function() { }); test('parseDate', function() { + init('#inp'); ok($.datepicker.parseDate('d m y', '') == null, 'Parse date empty'); equalsDate($.datepicker.parseDate('d m y', '3 2 01'), new Date(2001, 2 - 1, 3), 'Parse date d m y'); @@ -818,14 +1299,21 @@ test('parseDate', function() { new Date(2001, 12 - 1, 13), 'Parse date d m y'); equalsDate($.datepicker.parseDate('dd mm yy', '13 12 2001'), new Date(2001, 12 - 1, 13), 'Parse date dd mm yy'); + equalsDate($.datepicker.parseDate('y-o', '2001-34'), + new Date(2001, 2 - 1, 3), 'Parse date y-o'); + equalsDate($.datepicker.parseDate('yy-oo', '2001-347'), + new Date(2001, 12 - 1, 13), 'Parse date yy oo'); + equalsDate($.datepicker.parseDate('oo yy', '348 2004'), + new Date(2004, 12 - 1, 13), 'Parse date oo-yy'); equalsDate($.datepicker.parseDate('D d M y', 'Sat 3 Feb 01'), new Date(2001, 2 - 1, 3), 'Parse date D d M y'); equalsDate($.datepicker.parseDate('d MM DD yy', '3 February Saturday 2001'), new Date(2001, 2 - 1, 3), 'Parse date dd MM DD yy'); equalsDate($.datepicker.parseDate('DD, MM d, yy', 'Saturday, February 3, 2001'), new Date(2001, 2 - 1, 3), 'Parse date DD, MM d, yy'); - equalsDate($.datepicker.parseDate('\'day\' d of MM (\'\'DD\'\'), yy', 'day 3 of February (\'Saturday\'), 2001'), - new Date(2001, 2 - 1, 3), 'Parse date \'day\' d of MM (\'\'DD\'\'), yy'); + equalsDate($.datepicker.parseDate('\'day\' d \'of\' MM (\'\'DD\'\'), yy', + 'day 3 of February (\'Saturday\'), 2001'), new Date(2001, 2 - 1, 3), + 'Parse date \'day\' d \'of\' MM (\'\'DD\'\'), yy'); equalsDate($.datepicker.parseDate('y-m-d', '01-02-03'), new Date(2001, 2 - 1, 3), 'Parse date y-m-d - default cutoff'); equalsDate($.datepicker.parseDate('y-m-d', '51-02-03'), @@ -834,25 +1322,22 @@ test('parseDate', function() { new Date(2051, 2 - 1, 3), 'Parse date y-m-d - cutoff 80'); equalsDate($.datepicker.parseDate('y-m-d', '51-02-03', {shortYearCutoff: '+60'}), new Date(2051, 2 - 1, 3), 'Parse date y-m-d - cutoff +60'); - var daysShort = ['D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7']; - var daysLong = ['Day1', 'Day2', 'Day3', 'Day4', 'Day5', 'Day6', 'Day7']; - var monthsShort = ['M1', 'M2', 'M3', 'M4', 'M5', 'M6', - 'M7', 'M8', 'M9', 'M10', 'M11', 'M12']; - var monthsLong = ['Mon1', 'Mon2', 'Mon3', 'Mon4', 'Mon5', 'Mon6', - 'Mon7', 'Mon8', 'Mon9', 'Mon10', 'Mon11', 'Mon12']; - var settings = {dayNamesShort: daysShort, dayNames: daysLong, - monthNamesShort: monthsShort, monthNames: monthsLong}; - equalsDate($.datepicker.parseDate('D d M y', 'D7 3 M2 01', settings), - new Date(2001, 2 - 1, 3), 'Parse date D M y with settings'); - equalsDate($.datepicker.parseDate('d MM DD yy', '3 Mon2 Day7 2001', settings), - new Date(2001, 2 - 1, 3), 'Parse date d MM DD yy with settings'); - equalsDate($.datepicker.parseDate('DD, MM d, yy', 'Day7, Mon2 3, 2001', settings), - new Date(2001, 2 - 1, 3), 'Parse date DD, MM d, yy with settings'); - equalsDate($.datepicker.parseDate('\'day\' d of MM (\'\'DD\'\'), yy', 'day 3 of Mon2 (\'Day7\'), 2001', settings), - new Date(2001, 2 - 1, 3), 'Parse date \'day\' d of MM (\'\'DD\'\'), yy with settings'); + var fr = $.datepicker.regional['fr']; + var settings = {dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames, + monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames}; + equalsDate($.datepicker.parseDate('D d M y', 'Lun 9 Avr 01', settings), + new Date(2001, 4 - 1, 9), 'Parse date D M y with settings'); + equalsDate($.datepicker.parseDate('d MM DD yy', '9 Avril Lundi 2001', settings), + new Date(2001, 4 - 1, 9), 'Parse date d MM DD yy with settings'); + equalsDate($.datepicker.parseDate('DD, MM d, yy', 'Lundi, Avril 9, 2001', settings), + new Date(2001, 4 - 1, 9), 'Parse date DD, MM d, yy with settings'); + equalsDate($.datepicker.parseDate('\'jour\' d \'de\' MM (\'\'DD\'\'), yy', + 'jour 9 de Avril (\'Lundi\'), 2001', settings), new Date(2001, 4 - 1, 9), + 'Parse date \'jour\' d \'de\' MM (\'\'DD\'\'), yy with settings'); }); test('parseDateErrors', function() { + init('#inp'); var expectError = function(expr, value, error) { try { expr(); @@ -867,36 +1352,43 @@ test('parseDateErrors', function() { expectError(function() { $.datepicker.parseDate('d m y', null); }, 'null', 'Invalid arguments'); expectError(function() { $.datepicker.parseDate('d m y', 'Sat 2 01'); }, - 'Sat 2 01', 'Missing number at position 0'); + 'Sat 2 01 - d m y', 'Missing number at position 0'); + expectError(function() { $.datepicker.parseDate('dd mm yy', 'Sat 2 01'); }, + 'Sat 2 01 - dd mm yy', 'Missing number at position 0'); expectError(function() { $.datepicker.parseDate('d m y', '3 Feb 01'); }, - '3 Feb 01', 'Missing number at position 2'); + '3 Feb 01 - d m y', 'Missing number at position 2'); + expectError(function() { $.datepicker.parseDate('dd mm yy', '3 Feb 01'); }, + '3 Feb 01 - dd mm yy', 'Missing number at position 2'); expectError(function() { $.datepicker.parseDate('d m y', '3 2 AD01'); }, - '3 2 AD01', 'Missing number at position 4'); + '3 2 AD01 - d m y', 'Missing number at position 4'); + expectError(function() { $.datepicker.parseDate('d m yy', '3 2 AD01'); }, + '3 2 AD01 - dd mm yy', 'Missing number at position 4'); + expectError(function() { $.datepicker.parseDate('y-o', '2001-D01'); }, + '2001-D01 - y-o', 'Missing number at position 5'); + expectError(function() { $.datepicker.parseDate('yy-oo', '2001-D01'); }, + '2001-D01 - yy-oo', 'Missing number at position 5'); expectError(function() { $.datepicker.parseDate('D d M y', 'D7 3 Feb 01'); }, - 'D7 3 Feb 01', 'Unknown name at position 0'); + 'D7 3 Feb 01 - D d M y', 'Unknown name at position 0'); expectError(function() { $.datepicker.parseDate('D d M y', 'Sat 3 M2 01'); }, - 'Sat 3 M2 01', 'Unknown name at position 6'); + 'Sat 3 M2 01 - D d M y', 'Unknown name at position 6'); expectError(function() { $.datepicker.parseDate('DD, MM d, yy', 'Saturday- Feb 3, 2001'); }, - 'Sat- Feb 3, 2001', 'Unexpected literal at position 8'); - expectError(function() { $.datepicker.parseDate('\'day\' d of MM (\'\'DD\'\'), yy', 'day 3 of February ("Saturday"), 2001'); }, + 'Saturday- Feb 3, 2001 - DD, MM d, yy', 'Unexpected literal at position 8'); + expectError(function() { $.datepicker.parseDate('\'day\' d \'of\' MM (\'\'DD\'\'), yy', + 'day 3 of February ("Saturday"), 2001'); }, 'day 3 of Mon2 ("Day7"), 2001', 'Unexpected literal at position 19'); expectError(function() { $.datepicker.parseDate('d m y', '29 2 01'); }, - '29 2 01', 'Invalid date'); - var daysShort = ['D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7']; - var daysLong = ['Day1', 'Day2', 'Day3', 'Day4', 'Day5', 'Day6', 'Day7']; - var monthsShort = ['M1', 'M2', 'M3', 'M4', 'M5', 'M6', - 'M7', 'M8', 'M9', 'M10', 'M11', 'M12']; - var monthsLong = ['Mon1', 'Mon2', 'Mon3', 'Mon4', 'Mon5', 'Mon6', - 'Mon7', 'Mon8', 'Mon9', 'Mon10', 'Mon11', 'Mon12']; - var settings = {dayNamesShort: daysShort, dayNames: daysLong, - monthNamesShort: monthsShort, monthNames: monthsLong}; - expectError(function() { $.datepicker.parseDate('D d M y', 'Sat 3 M2 01', settings); }, - 'Sat 3 M2 01', 'Unknown name at position 0'); - expectError(function() { $.datepicker.parseDate('D d M y', 'D7 3 Feb 01', settings); }, - 'D7 3 Feb 01', 'Unknown name at position 5'); + '29 2 01 - d m y', 'Invalid date'); + var fr = $.datepicker.regional['fr']; + var settings = {dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames, + monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames}; + expectError(function() { $.datepicker.parseDate('D d M y', 'Mon 9 Avr 01', settings); }, + 'Mon 9 Avr 01 - D d M y', 'Unknown name at position 0'); + expectError(function() { $.datepicker.parseDate('D d M y', 'Lun 9 Apr 01', settings); }, + 'Lun 9 Apr 01 - D d M y', 'Unknown name at position 6'); }); test('formatDate', function() { + init('#inp'); equals($.datepicker.formatDate('d m y', new Date(2001, 2 - 1, 3)), '3 2 01', 'Format date d m y'); equals($.datepicker.formatDate('dd mm yy', new Date(2001, 2 - 1, 3)), @@ -905,30 +1397,31 @@ test('formatDate', function() { '13 12 01', 'Format date d m y'); equals($.datepicker.formatDate('dd mm yy', new Date(2001, 12 - 1, 13)), '13 12 2001', 'Format date dd mm yy'); + equals($.datepicker.formatDate('yy-o', new Date(2001, 2 - 1, 3)), + '2001-34', 'Format date yy-o'); + equals($.datepicker.formatDate('yy-oo', new Date(2001, 2 - 1, 3)), + '2001-034', 'Format date yy-oo'); equals($.datepicker.formatDate('D M y', new Date(2001, 2 - 1, 3)), 'Sat Feb 01', 'Format date D M y'); equals($.datepicker.formatDate('DD MM yy', new Date(2001, 2 - 1, 3)), 'Saturday February 2001', 'Format date DD MM yy'); equals($.datepicker.formatDate('DD, MM d, yy', new Date(2001, 2 - 1, 3)), 'Saturday, February 3, 2001', 'Format date DD, MM d, yy'); - equals($.datepicker.formatDate('\'day\' d of MM (\'\'DD\'\'), yy', new Date(2001, 2 - 1, 3)), - 'day 3 of February (\'Saturday\'), 2001', 'Format date \'day\' d of MM (\'\'DD\'\'), yy'); - var daysShort = ['D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7']; - var daysLong = ['Day1', 'Day2', 'Day3', 'Day4', 'Day5', 'Day6', 'Day7']; - var monthsShort = ['M1', 'M2', 'M3', 'M4', 'M5', 'M6', - 'M7', 'M8', 'M9', 'M10', 'M11', 'M12']; - var monthsLong = ['Mon1', 'Mon2', 'Mon3', 'Mon4', 'Mon5', 'Mon6', - 'Mon7', 'Mon8', 'Mon9', 'Mon10', 'Mon11', 'Mon12']; - var settings = {dayNamesShort: daysShort, dayNames: daysLong, - monthNamesShort: monthsShort, monthNames: monthsLong}; - equals($.datepicker.formatDate('D M y', new Date(2001, 2 - 1, 3), settings), - 'D7 M2 01', 'Format date D M y with settings'); - equals($.datepicker.formatDate('DD MM yy', new Date(2001, 2 - 1, 3), settings), - 'Day7 Mon2 2001', 'Format date DD MM yy with settings'); - equals($.datepicker.formatDate('DD, MM d, yy', new Date(2001, 2 - 1, 3), settings), - 'Day7, Mon2 3, 2001', 'Format date DD, MM d, yy with settings'); - equals($.datepicker.formatDate('\'day\' d of MM (\'\'DD\'\'), yy', new Date(2001, 2 - 1, 3), settings), - 'day 3 of Mon2 (\'Day7\'), 2001', 'Format date \'day\' d of MM (\'\'DD\'\'), yy with settings'); + equals($.datepicker.formatDate('\'day\' d \'of\' MM (\'\'DD\'\'), yy', + new Date(2001, 2 - 1, 3)), 'day 3 of February (\'Saturday\'), 2001', + 'Format date \'day\' d \'of\' MM (\'\'DD\'\'), yy'); + var fr = $.datepicker.regional['fr']; + var settings = {dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames, + monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames}; + equals($.datepicker.formatDate('D M y', new Date(2001, 4 - 1, 9), settings), + 'Lun Avr 01', 'Format date D M y with settings'); + equals($.datepicker.formatDate('DD MM yy', new Date(2001, 4 - 1, 9), settings), + 'Lundi Avril 2001', 'Format date DD MM yy with settings'); + equals($.datepicker.formatDate('DD, MM d, yy', new Date(2001, 4 - 1, 9), settings), + 'Lundi, Avril 9, 2001', 'Format date DD, MM d, yy with settings'); + equals($.datepicker.formatDate('\'jour\' d \'de\' MM (\'\'DD\'\'), yy', + new Date(2001, 4 - 1, 9), settings), 'jour 9 de Avril (\'Lundi\'), 2001', + 'Format date \'jour\' d \'de\' MM (\'\'DD\'\'), yy with settings'); }); })(jQuery);