| [ Index ] |
PHP Cross Reference of Drupal 6 (gatewave) |
[Summary view] [Print] [Text view]
1 /* 2 * datepicker unit tests 3 */ 4 (function($) { 5 6 module('datepicker'); 7 8 function equalsDate(d1, d2, message) { 9 if (!d1 || !d2) { 10 ok(false, message + ' - missing date'); 11 return; 12 } 13 d1 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate()); 14 d2 = new Date(d2.getFullYear(), d2.getMonth(), d2.getDate()); 15 equals(d1.toString(), d2.toString(), message); 16 } 17 18 function equalsDateArray(a1, a2, message) { 19 if (!a1 || !a2) { 20 ok(false, message + ' - missing dates'); 21 return; 22 } 23 a1[0] = (a1[0] ? new Date(a1[0].getFullYear(), a1[0].getMonth(), a1[0].getDate()) : ''); 24 a1[1] = (a1[1] ? new Date(a1[1].getFullYear(), a1[1].getMonth(), a1[1].getDate()) : ''); 25 a2[0] = (a2[0] ? new Date(a2[0].getFullYear(), a2[0].getMonth(), a2[0].getDate()) : ''); 26 a2[1] = (a2[1] ? new Date(a2[1].getFullYear(), a2[1].getMonth(), a2[1].getDate()) : ''); 27 same(a1, a2, message); 28 } 29 30 function init(id, options) { 31 $.datepicker.setDefaults($.datepicker.regional['']); 32 var inp = $(id); 33 inp.datepicker($.extend({duration: ''}, options || {})); 34 return inp; 35 } 36 37 var PROP_NAME = 'datepicker'; 38 39 test('setDefaults', function() { 40 var inp = init('#inp'); 41 var dp = $('#ui-datepicker-div'); 42 ok(!dp.is(':visible'), 'Initially invisible'); 43 ok(inp.is('.hasDatepicker'), 'Marker class set'); 44 ok($($.datepicker.dpDiv).html() == '', 'Content empty'); 45 inp.datepicker('show'); 46 ok($($.datepicker.dpDiv).html() != '', 'Content present'); 47 inp.datepicker('hide'); 48 equals($.datepicker._defaults.showOn, 'focus', 'Initial showOn'); 49 $.datepicker.setDefaults({showOn: 'button'}); 50 equals($.datepicker._defaults.showOn, 'button', 'Change default showOn'); 51 $.datepicker.setDefaults({showOn: 'focus'}); 52 equals($.datepicker._defaults.showOn, 'focus', 'Restore showOn'); 53 }); 54 55 test('destroy', function() { 56 var inp = init('#inp'); 57 ok(inp.is('.hasDatepicker'), 'Default - marker class set'); 58 ok($.data(inp[0], PROP_NAME), 'Default - instance present'); 59 ok(inp.next().is('#alt'), 'Default - button absent'); 60 inp.datepicker('destroy'); 61 inp = $('#inp'); 62 ok(!inp.is('.hasDatepicker'), 'Default - marker class cleared'); 63 ok(!$.data(inp[0], PROP_NAME), 'Default - instance absent'); 64 ok(inp.next().is('#alt'), 'Default - button absent'); 65 // With button 66 inp= init('#inp', {showOn: 'both'}); 67 ok(inp.is('.hasDatepicker'), 'Button - marker class set'); 68 ok($.data(inp[0], PROP_NAME), 'Button - instance present'); 69 ok(inp.next().text() == '...', 'Button - button added'); 70 inp.datepicker('destroy'); 71 inp = $('#inp'); 72 ok(!inp.is('.hasDatepicker'), 'Button - marker class cleared'); 73 ok(!$.data(inp[0], PROP_NAME), 'Button - instance absent'); 74 ok(inp.next().is('#alt'), 'Button - button removed'); 75 // With append text 76 inp = init('#inp', {appendText: 'Testing'}); 77 ok(inp.is('.hasDatepicker'), 'Append - marker class set'); 78 ok($.data(inp[0], PROP_NAME), 'Append - instance present'); 79 ok(inp.next().text() == 'Testing', 'Append - append text added'); 80 inp.datepicker('destroy'); 81 inp = $('#inp'); 82 ok(!inp.is('.hasDatepicker'), 'Append - marker class cleared'); 83 ok(!$.data(inp[0], PROP_NAME), 'Append - instance absent'); 84 ok(inp.next().is('#alt'), 'Append - append text removed'); 85 // With both 86 inp= init('#inp', {showOn: 'both', buttonImageOnly: true, 87 buttonImage: 'img/calendar.gif', appendText: 'Testing'}); 88 ok(inp.is('.hasDatepicker'), 'Both - marker class set'); 89 ok($.data(inp[0], PROP_NAME), 'Both - instance present'); 90 ok(inp.next()[0].nodeName.toLowerCase() == 'img', 'Both - button added'); 91 ok(inp.next().next().text() == 'Testing', 'Both - append text added'); 92 inp.datepicker('destroy'); 93 inp = $('#inp'); 94 ok(!inp.is('.hasDatepicker'), 'Both - marker class cleared'); 95 ok(!$.data(inp[0], PROP_NAME), 'Both - instance absent'); 96 ok(inp.next().is('#alt'), 'Both - button and append text absent'); 97 // Inline 98 var inl = init('#inl'); 99 ok(inl.is('.hasDatepicker'), 'Inline - marker class set'); 100 ok(inl.html() != '', 'Inline - datepicker present'); 101 ok($.data(inl[0], PROP_NAME), 'Inline - instance present'); 102 ok(inl.next().length == 0 || inl.next().is('p'), 'Inline - button absent'); 103 inl.datepicker('destroy'); 104 inl = $('#inl'); 105 ok(!inl.is('.hasDatepicker'), 'Inline - marker class cleared'); 106 ok(inl.html() == '', 'Inline - datepicker absent'); 107 ok(!$.data(inl[0], PROP_NAME), 'Inline - instance absent'); 108 ok(inl.next().length == 0 || inl.next().is('p'), 'Inline - button absent'); 109 }); 110 111 test('option', function() { 112 var inp = init('#inp'); 113 var inst = $.data(inp[0], PROP_NAME); 114 equals(inst.settings.showOn, null, 'Initial setting showOn'); 115 equals($.datepicker._get(inst, 'showOn'), 'focus', 'Initial instance showOn'); 116 equals($.datepicker._defaults.showOn, 'focus', 'Initial default showOn'); 117 inp.datepicker('option', 'showOn', 'button'); 118 equals(inst.settings.showOn, 'button', 'Change setting showOn'); 119 equals($.datepicker._get(inst, 'showOn'), 'button', 'Change instance showOn'); 120 equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn'); 121 inp.datepicker('option', {showOn: 'both'}); 122 equals(inst.settings.showOn, 'both', 'Change setting showOn'); 123 equals($.datepicker._get(inst, 'showOn'), 'both', 'Change instance showOn'); 124 equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn'); 125 inp.datepicker('option', 'showOn', undefined); 126 equals(inst.settings.showOn, null, 'Clear setting showOn'); 127 equals($.datepicker._get(inst, 'showOn'), 'focus', 'Restore instance showOn'); 128 equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn'); 129 }); 130 131 test('change', function() { 132 var inp = init('#inp'); 133 var inst = $.data(inp[0], PROP_NAME); 134 equals(inst.settings.showOn, null, 'Initial setting showOn'); 135 equals($.datepicker._get(inst, 'showOn'), 'focus', 'Initial instance showOn'); 136 equals($.datepicker._defaults.showOn, 'focus', 'Initial default showOn'); 137 inp.datepicker('change', 'showOn', 'button'); 138 equals(inst.settings.showOn, 'button', 'Change setting showOn'); 139 equals($.datepicker._get(inst, 'showOn'), 'button', 'Change instance showOn'); 140 equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn'); 141 inp.datepicker('change', {showOn: 'both'}); 142 equals(inst.settings.showOn, 'both', 'Change setting showOn'); 143 equals($.datepicker._get(inst, 'showOn'), 'both', 'Change instance showOn'); 144 equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn'); 145 inp.datepicker('change', 'showOn', undefined); 146 equals(inst.settings.showOn, null, 'Clear setting showOn'); 147 equals($.datepicker._get(inst, 'showOn'), 'focus', 'Restore instance showOn'); 148 equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn'); 149 }); 150 151 test('invocation', function() { 152 var inp = init('#inp'); 153 var dp = $('#ui-datepicker-div'); 154 var body = $('body'); 155 // On focus 156 var button = inp.siblings('button'); 157 ok(button.length == 0, 'Focus - button absent'); 158 var image = inp.siblings('img'); 159 ok(image.length == 0, 'Focus - image absent'); 160 inp.focus(); 161 ok(dp.is(':visible'), 'Focus - rendered on focus'); 162 inp.simulate('keydown', {keyCode: $.simulate.VK_ESC}); 163 ok(!dp.is(':visible'), 'Focus - hidden on exit'); 164 inp.focus(); 165 ok(dp.is(':visible'), 'Focus - rendered on focus'); 166 body.simulate('mousedown', {}); 167 ok(!dp.is(':visible'), 'Focus - hidden on external click'); 168 inp.datepicker('hide').datepicker('destroy'); 169 // On button 170 inp = init('#inp', {showOn: 'button', buttonText: 'Popup'}); 171 ok(!dp.is(':visible'), 'Button - initially hidden'); 172 button = inp.siblings('button'); 173 image = inp.siblings('img'); 174 ok(button.length == 1, 'Button - button present'); 175 ok(image.length == 0, 'Button - image absent'); 176 equals(button.text(), 'Popup', 'Button - button text'); 177 inp.focus(); 178 ok(!dp.is(':visible'), 'Button - not rendered on focus'); 179 button.click(); 180 ok(dp.is(':visible'), 'Button - rendered on button click'); 181 button.click(); 182 ok(!dp.is(':visible'), 'Button - hidden on second button click'); 183 inp.datepicker('hide').datepicker('destroy'); 184 // On image button 185 inp = init('#inp', {showOn: 'button', buttonImageOnly: true, 186 buttonImage: 'img/calendar.gif', buttonText: 'Cal'}); 187 ok(!dp.is(':visible'), 'Image button - initially hidden'); 188 button = inp.siblings('button'); 189 ok(button.length == 0, 'Image button - button absent'); 190 image = inp.siblings('img'); 191 ok(image.length == 1, 'Image button - image present'); 192 equals(image.attr('src'), 'img/calendar.gif', 'Image button - image source'); 193 equals(image.attr('title'), 'Cal', 'Image button - image text'); 194 inp.focus(); 195 ok(!dp.is(':visible'), 'Image button - not rendered on focus'); 196 image.click(); 197 ok(dp.is(':visible'), 'Image button - rendered on image click'); 198 image.click(); 199 ok(!dp.is(':visible'), 'Image button - hidden on second image click'); 200 inp.datepicker('hide').datepicker('destroy'); 201 // On both 202 inp = init('#inp', {showOn: 'both', buttonImage: 'img/calendar.gif'}); 203 ok(!dp.is(':visible'), 'Both - initially hidden'); 204 button = inp.siblings('button'); 205 ok(button.length == 1, 'Both - button present'); 206 image = inp.siblings('img'); 207 ok(image.length == 0, 'Both - image absent'); 208 image = button.children('img'); 209 ok(image.length == 1, 'Both - button image present'); 210 inp.focus(); 211 ok(dp.is(':visible'), 'Both - rendered on focus'); 212 body.simulate('mousedown', {}); 213 ok(!dp.is(':visible'), 'Both - hidden on external click'); 214 button.click(); 215 ok(dp.is(':visible'), 'Both - rendered on button click'); 216 button.click(); 217 ok(!dp.is(':visible'), 'Both - hidden on second button click'); 218 inp.datepicker('hide').datepicker('destroy'); 219 }); 220 221 test('baseStructure', function() { 222 var dp = $('#ui-datepicker-div'); 223 var inp = init('#inp'); 224 inp.focus(); 225 var iframe = ($.browser.msie && parseInt($.browser.version) < 7); 226 ok(dp.is(':visible'), 'Structure - datepicker visible'); 227 ok(!dp.is('.ui-datepicker-rtl'), 'Structure - not right-to-left'); 228 ok(!dp.is('.ui-datepicker-multi'), 'Structure - not multi-month'); 229 equals(dp.children().length, 4 + (iframe ? 1 : 0), 'Structure - child count'); 230 var control = dp.children(':first'); 231 ok(control.is('div.ui-datepicker-control'), 'Structure - control division'); 232 equals(control.children().length, 2, 'Structure - control child count'); 233 ok(control.children(':first').is('div.ui-datepicker-clear'), 234 'Structure - clear division'); 235 ok(control.children(':last').is('div.ui-datepicker-close'), 236 'Structure - close division'); 237 var links = dp.children(':eq(1)'); 238 ok(links.is('div.ui-datepicker-links'), 'Structure - links division'); 239 equals(links.children().length, 3, 'Structure - links child count'); 240 ok(links.children(':first').is('div.ui-datepicker-prev') && 241 links.children(':first').html() != '', 242 'Structure - prev division'); 243 ok(links.children(':eq(1)').is('div.ui-datepicker-current') && 244 links.children(':eq(1)').html() != '', 245 'Structure - current division'); 246 ok(links.children(':last').is('div.ui-datepicker-next') && 247 links.children(':last').html() != '', 248 'Structure - next division'); 249 var month = dp.children(':eq(2)'); 250 ok(month.is('div.ui-datepicker-one-month') && month.is('div.ui-datepicker-new-row'), 251 'Structure - month division'); 252 var header = month.children(':first'); 253 ok(header.is('div.ui-datepicker-header'), 'Structure - month header division'); 254 equals(header.children().length, 2, 'Structure - month header child count'); 255 ok(header.children(':first').is('select.ui-datepicker-new-month'), 256 'Structure - new month select'); 257 ok(header.children(':last').is('select.ui-datepicker-new-year'), 258 'Structure - new year select'); 259 var table = month.children(':eq(1)'); 260 ok(table.is('table.ui-datepicker'), 'Structure - month table'); 261 ok(table.children(':first').is('thead'), 'Structure - month table thead'); 262 var titles = table.children(':first').children(':first'); 263 ok(titles.is('tr.ui-datepicker-title-row'), 'Structure - month table title row'); 264 equals(titles.find('a').length, 7, 'Structure - month table title links'); 265 ok(table.children(':eq(1)').is('tbody'), 'Structure - month table body'); 266 ok(table.children(':eq(1)').children('tr').length >= 4, 267 'Structure - month table week count'); 268 var week = table.children(':eq(1)').children(':first'); 269 ok(week.is('tr.ui-datepicker-days-row'), 'Structure - month table week row'); 270 equals(week.children().length, 7, 'Structure - week child count'); 271 ok(week.children(':first').is('td.ui-datepicker-days-cell') && 272 week.children(':first').is('.ui-datepicker-week-end-cell') && 273 !week.children(':first').is('.ui-datepicker-week-col'), 274 'Structure - month table first day cell'); 275 ok(week.children(':eq(1)').is('td.ui-datepicker-days-cell') && 276 !week.children(':eq(1)').is('.ui-datepicker-week-end-cell'), 277 'Structure - month table second day cell'); 278 ok(dp.children('.ui-datepicker-status').length == 0, 'Structure - status'); 279 ok(dp.children('iframe').length == (iframe ? 1 : 0), 'Structure - iframe'); 280 inp.datepicker('hide').datepicker('destroy'); 281 // Multi-month 2 282 inp = init('#inp', {numberOfMonths: 2}); 283 inp.focus(); 284 ok(dp.is('.ui-datepicker-multi'), 'Structure multi - multi-month'); 285 equals(dp.children().length, 5 + (iframe ? 1 : 0), 'Structure multi - child count'); 286 month = dp.children(':eq(2)'); 287 ok(month.is('div.ui-datepicker-one-month') && month.is('div.ui-datepicker-new-row'), 288 'Structure multi - first month division'); 289 month = dp.children(':eq(3)'); 290 ok(month.is('div.ui-datepicker-one-month') && !month.is('div.ui-datepicker-new-row'), 291 'Structure multi - second month division'); 292 inp.datepicker('hide').datepicker('destroy'); 293 // Multi-month [2, 2] 294 inp = init('#inp', {numberOfMonths: [2, 2]}); 295 inp.focus(); 296 ok(dp.is('.ui-datepicker-multi'), 'Structure multi - multi-month'); 297 equals(dp.children().length, 7 + (iframe ? 1 : 0), 'Structure multi - child count'); 298 month = dp.children(':eq(2)'); 299 ok(month.is('div.ui-datepicker-one-month') && month.is('div.ui-datepicker-new-row'), 300 'Structure multi - first month division'); 301 month = dp.children(':eq(3)'); 302 ok(month.is('div.ui-datepicker-one-month') && !month.is('div.ui-datepicker-new-row'), 303 'Structure multi - second month division'); 304 month = dp.children(':eq(4)'); 305 ok(month.is('div.ui-datepicker-one-month') && month.is('div.ui-datepicker-new-row'), 306 'Structure multi - third month division'); 307 month = dp.children(':eq(5)'); 308 ok(month.is('div.ui-datepicker-one-month') && !month.is('div.ui-datepicker-new-row'), 309 'Structure multi - fourth month division'); 310 inp.datepicker('hide').datepicker('destroy'); 311 // Inline 312 var inl = init('#inl'); 313 dp = inl.children(); 314 ok(dp.is('.ui-datepicker-inline'), 'Structure inline - main div'); 315 ok(!dp.is('.ui-datepicker-rtl'), 'Structure inline - not right-to-left'); 316 ok(!dp.is('.ui-datepicker-multi'), 'Structure inline - not multi-month'); 317 equals(dp.children().length, 3, 'Structure inline - child count'); 318 var links = dp.children(':first'); 319 ok(links.is('div.ui-datepicker-links'), 'Structure inline - links division'); 320 equals(links.children().length, 3, 'Structure inline - links child count'); 321 var month = dp.children(':eq(1)'); 322 ok(month.is('div.ui-datepicker-one-month') && month.is('div.ui-datepicker-new-row'), 323 'Structure inline - month division'); 324 var header = month.children(':first'); 325 ok(header.is('div.ui-datepicker-header'), 'Structure inline - month header division'); 326 equals(header.children().length, 2, 'Structure inline - month header child count'); 327 var table = month.children(':eq(1)'); 328 ok(table.is('table.ui-datepicker'), 'Structure inline - month table'); 329 ok(table.children(':first').is('thead'), 'Structure inline - month table thead'); 330 ok(table.children(':eq(1)').is('tbody'), 'Structure inline - month table body'); 331 ok(dp.children('.ui-datepicker-status').length == 0, 'Structure inline - status'); 332 inl.datepicker('destroy'); 333 // Inline multi-month 334 inl = init('#inl', {numberOfMonths: 2}); 335 dp = inl.children(); 336 ok(dp.is('.ui-datepicker-inline'), 'Structure inline multi - main div'); 337 ok(dp.is('.ui-datepicker-multi'), 'Structure inline multi - not multi-month'); 338 equals(dp.children().length, 4, 'Structure inline multi - child count'); 339 var links = dp.children(':first'); 340 ok(links.is('div.ui-datepicker-links'), 'Structure inline multi - links division'); 341 equals(links.children().length, 3, 'Structure inline multi - links child count'); 342 var month = dp.children(':eq(1)'); 343 ok(month.is('div.ui-datepicker-one-month') && month.is('div.ui-datepicker-new-row'), 344 'Structure inline multi - first month division'); 345 month = dp.children(':eq(2)'); 346 ok(month.is('div.ui-datepicker-one-month') && !month.is('div.ui-datepicker-new-row'), 347 'Structure inline multi - second month division'); 348 inl.datepicker('destroy'); 349 }); 350 351 test('customStructure', function() { 352 var dp = $('#ui-datepicker-div'); 353 // Check right-to-left localisation 354 var inp = init('#inp', $.datepicker.regional['he']); 355 inp.focus(); 356 var iframe = ($.browser.msie && parseInt($.browser.version) < 7); 357 ok(dp.is('.ui-datepicker-rtl'), 'Structure RTL - right-to-left'); 358 var links = dp.children(':eq(1)'); 359 ok(links.is('div.ui-datepicker-links'), 'Structure - links division'); 360 equals(links.children().length, 3, 'Structure - links child count'); 361 ok(links.children(':first').is('div.ui-datepicker-next'), 362 'Structure - next division'); 363 ok(links.children(':eq(1)').is('div.ui-datepicker-current'), 364 'Structure - current division'); 365 ok(links.children(':last').is('div.ui-datepicker-prev'), 366 'Structure - prev division'); 367 inp.datepicker('hide').datepicker('destroy'); 368 // Close at bottom 369 inp = init('#inp', {closeAtTop: false}); 370 inp.focus(); 371 equals(dp.children().length, 4 + (iframe ? 1 : 0), 372 'Structure close at bottom - child count'); 373 ok(dp.children(':first').is('div.ui-datepicker-links'), 374 'Structure close at bottom - links division'); 375 ok(dp.children(':last').prev().is('div.ui-datepicker-control'), 376 'Structure close at bottom - control division'); 377 inp.datepicker('hide').datepicker('destroy'); 378 // Mandatory 379 inp = init('#inp', {mandatory: true}); 380 inp.focus(); 381 var control = dp.children(':first'); 382 ok(control.is('div.ui-datepicker-control'), 383 'Structure mandatory - control division'); 384 equals(control.children().length, 1, 'Structure mandatory - control child count'); 385 ok(control.children(':first').is('div.ui-datepicker-close'), 386 'Structure mandatory - close division'); 387 inp.datepicker('hide').datepicker('destroy'); 388 // Hide prev/next 389 inp = init('#inp', {hideIfNoPrevNext: true, 390 minDate: new Date(2008, 2 - 1, 4), maxDate: new Date(2008, 2 - 1, 14)}); 391 inp.val('02/10/2008').focus(); 392 var links = dp.children(':eq(1)'); 393 ok(links.is('div.ui-datepicker-links'), 394 'Structure hide prev/next - links division'); 395 equals(links.children().length, 2, 'Structure hide prev/next - links child count'); 396 ok(links.children(':first').is('div.ui-datepicker-prev') && 397 links.children(':first').html() == '', 398 'Structure hide prev/next - prev division'); 399 ok(links.children(':last').is('div.ui-datepicker-next') && 400 links.children(':last').html() == '', 401 'Structure hide prev/next - next division'); 402 inp.datepicker('hide').datepicker('destroy'); 403 // Can't change month 404 inp = init('#inp', {changeMonth: false}); 405 inp.focus(); 406 var header = dp.children(':eq(2)').children(':first'); 407 equals(header.children().length, 1, 'Structure change month - header child count'); 408 ok(header.children(':last').is('select.ui-datepicker-new-year'), 409 'Structure change month - new year select'); 410 inp.datepicker('hide').datepicker('destroy'); 411 // Can't change year 412 inp = init('#inp', {changeYear: false}); 413 inp.focus(); 414 var header = dp.children(':eq(2)').children(':first'); 415 equals(header.children().length, 1, 'Structure change year - header child count'); 416 ok(header.children(':first').is('select.ui-datepicker-new-month'), 417 'Structure change year - new month select'); 418 inp.datepicker('hide').datepicker('destroy'); 419 // Can't change first day of week 420 inp = init('#inp', {changeFirstDay: false}); 421 inp.focus(); 422 var titles = dp.find('.ui-datepicker-title-row'); 423 equals(titles.children().length, 7, 'Structure change first day - titles child count'); 424 equals(titles.find('a').length, 0, 'Structure change first day - titles links count'); 425 inp.datepicker('hide').datepicker('destroy'); 426 // Show weeks 427 inp = init('#inp', {showWeeks: true}); 428 inp.focus(); 429 titles = dp.find('.ui-datepicker-title-row'); 430 equals(titles.children().length, 8, 'Structure show weeks - titles child count'); 431 var week = dp.find('.ui-datepicker-days-row:first'); 432 equals(week.children().length, 8, 'Structure show weeks - week child count'); 433 ok(week.children(':first').is('td.ui-datepicker-week-col'), 434 'Structure show weeks - week column'); 435 inp.datepicker('hide').datepicker('destroy'); 436 // Show status 437 inp = init('#inp', {showStatus: true}); 438 inp.focus(); 439 equals(dp.children().length, 6 + (iframe ? 1 : 0), 440 'Structure show status - datepicker child count'); 441 ok(dp.children(':last').prev().is('div.ui-datepicker-status'), 442 'Structure show status - status division'); 443 inp.datepicker('hide').datepicker('destroy'); 444 // Inline 445 var inl = init('#inl', {showStatus: true, hideIfNoPrevNext: true, 446 minDate: new Date(2008, 2 - 1, 4), maxDate: new Date(2008, 2 - 1, 14)}); 447 dp = inl.children(); 448 ok(dp.is('.ui-datepicker-inline'), 'Structure inline - main div'); 449 ok(!dp.is('.ui-datepicker-rtl'), 'Structure inline - not right-to-left'); 450 ok(!dp.is('.ui-datepicker-multi'), 'Structure inline - not multi-month'); 451 equals(dp.children().length, 5, 'Structure inline - child count'); 452 var links = dp.children(':first'); 453 ok(links.is('div.ui-datepicker-links'), 'Structure inline - links division'); 454 equals(links.children().children().length, 0, 'Structure inline - links child count'); 455 var month = dp.children(':eq(1)'); 456 ok(month.is('div.ui-datepicker-one-month') && month.is('div.ui-datepicker-new-row'), 457 'Structure inline - month division'); 458 ok(dp.children(':last').prev().is('div.ui-datepicker-status'), 459 'Structure inline - status'); 460 inl.datepicker('destroy'); 461 }); 462 463 test('enableDisable', function() { 464 var inp = init('#inp'); 465 ok(!inp.datepicker('isDisabled'), 'Enable/disable - initially marked as enabled'); 466 ok(!inp[0].disabled, 'Enable/disable - field initially enabled'); 467 inp.datepicker('disable'); 468 ok(inp.datepicker('isDisabled'), 'Enable/disable - now marked as disabled'); 469 ok(inp[0].disabled, 'Enable/disable - field now disabled'); 470 inp.datepicker('enable'); 471 ok(!inp.datepicker('isDisabled'), 'Enable/disable - now marked as enabled'); 472 ok(!inp[0].disabled, 'Enable/disable - field now enabled'); 473 inp.datepicker('destroy'); 474 // With a button 475 inp = init('#inp', {showOn: 'button'}); 476 ok(!inp.datepicker('isDisabled'), 'Enable/disable button - initially marked as enabled'); 477 ok(!inp[0].disabled, 'Enable/disable button - field initially enabled'); 478 ok(!inp.next('button')[0].disabled, 'Enable/disable button - button initially enabled'); 479 inp.datepicker('disable'); 480 ok(inp.datepicker('isDisabled'), 'Enable/disable button - now marked as disabled'); 481 ok(inp[0].disabled, 'Enable/disable button - field now disabled'); 482 ok(inp.next('button')[0].disabled, 'Enable/disable button - button now disabled'); 483 inp.datepicker('enable'); 484 ok(!inp.datepicker('isDisabled'), 'Enable/disable button - now marked as enabled'); 485 ok(!inp[0].disabled, 'Enable/disable button - field now enabled'); 486 ok(!inp.next('button')[0].disabled, 'Enable/disable button - button now enabled'); 487 inp.datepicker('destroy'); 488 // With an image button 489 inp = init('#inp', {showOn: 'button', buttonImageOnly: true, 490 buttonImage: 'img/calendar.gif'}); 491 ok(!inp.datepicker('isDisabled'), 'Enable/disable image - initially marked as enabled'); 492 ok(!inp[0].disabled, 'Enable/disable image - field initially enabled'); 493 ok(inp.next('img').css('opacity') == 1, 'Enable/disable image - image initially enabled'); 494 inp.datepicker('disable'); 495 ok(inp.datepicker('isDisabled'), 'Enable/disable image - now marked as disabled'); 496 ok(inp[0].disabled, 'Enable/disable image - field now disabled'); 497 ok(inp.next('img').css('opacity') != 1, 'Enable/disable image - image now disabled'); 498 inp.datepicker('enable'); 499 ok(!inp.datepicker('isDisabled'), 'Enable/disable image - now marked as enabled'); 500 ok(!inp[0].disabled, 'Enable/disable image - field now enabled'); 501 ok(inp.next('img').css('opacity') == 1, 'Enable/disable image - image now enabled'); 502 inp.datepicker('destroy'); 503 // Inline 504 var inl = init('#inl'); 505 ok(!inl.datepicker('isDisabled'), 'Enable/disable inline - initially marked as enabled'); 506 ok($('.ui-datepicker-disabled', inl).length == 0, 'Enable/disable inline - cover initially absent'); 507 inl.datepicker('disable'); 508 ok(inl.datepicker('isDisabled'), 'Enable/disable inline - now marked as disabled'); 509 var disabled = $('.ui-datepicker-disabled', inl); 510 var dp = $('.ui-datepicker-inline', inl); 511 ok(disabled.length == 1, 'Enable/disable inline - cover now present'); 512 ok(disabled.offset().top == dp.offset().top && disabled.offset().left == dp.offset().left, 513 'Enable/disable inline - cover positioning'); 514 ok(disabled.width() == dp.width() && disabled.height() == dp.height(), 515 'Enable/disable inline - cover sizing'); 516 inl.datepicker('enable'); 517 ok(!inl.datepicker('isDisabled'), 'Enable/disable inline - now marked as enabled'); 518 ok($('.ui-datepicker-disabled', inl).length == 0, 'Enable/disable inline - cover now absent'); 519 inl.datepicker('destroy'); 520 }); 521 522 test('keystrokes', function() { 523 var inp = init('#inp'); 524 var date = new Date(); 525 inp.val('').datepicker('show'). 526 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 527 equalsDate(inp.datepicker('getDate'), date, 'Keystroke enter'); 528 inp.val('02/04/2008').datepicker('show'). 529 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 530 equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), 531 'Keystroke enter - preset'); 532 inp.val('02/04/2008').datepicker('show'). 533 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_HOME}). 534 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 535 equalsDate(inp.datepicker('getDate'), date, 'Keystroke ctrl+home'); 536 inp.val('02/04/2008').datepicker('show'). 537 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_END}); 538 ok(inp.datepicker('getDate') == null, 'Keystroke ctrl+end'); 539 inp.val('').datepicker('show'). 540 simulate('keydown', {keyCode: $.simulate.VK_ESC}); 541 ok(inp.datepicker('getDate') == null, 'Keystroke esc'); 542 inp.val('02/04/2008').datepicker('show'). 543 simulate('keydown', {keyCode: $.simulate.VK_ESC}); 544 equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), 545 'Keystroke esc - preset'); 546 inp.val('02/04/2008').datepicker('show'). 547 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). 548 simulate('keydown', {keyCode: $.simulate.VK_ESC}); 549 equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), 550 'Keystroke esc - abandoned'); 551 // Moving by day or week 552 inp.val('').datepicker('show'). 553 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_LEFT}). 554 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 555 date.setDate(date.getDate() - 1); 556 equalsDate(inp.datepicker('getDate'), date, 'Keystroke ctrl+left'); 557 inp.val('').datepicker('show'). 558 simulate('keydown', {keyCode: $.simulate.VK_LEFT}). 559 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 560 date.setDate(date.getDate() + 1); 561 equalsDate(inp.datepicker('getDate'), date, 'Keystroke left'); 562 inp.val('').datepicker('show'). 563 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_RIGHT}). 564 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 565 date.setDate(date.getDate() + 1); 566 equalsDate(inp.datepicker('getDate'), date, 'Keystroke ctrl+right'); 567 inp.val('').datepicker('show'). 568 simulate('keydown', {keyCode: $.simulate.VK_RIGHT}). 569 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 570 date.setDate(date.getDate() - 1); 571 equalsDate(inp.datepicker('getDate'), date, 'Keystroke right'); 572 inp.val('').datepicker('show'). 573 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_UP}). 574 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 575 date.setDate(date.getDate() - 7); 576 equalsDate(inp.datepicker('getDate'), date, 'Keystroke ctrl+up'); 577 inp.val('').datepicker('show'). 578 simulate('keydown', {keyCode: $.simulate.VK_UP}). 579 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 580 date.setDate(date.getDate() + 7); 581 equalsDate(inp.datepicker('getDate'), date, 'Keystroke up'); 582 inp.val('').datepicker('show'). 583 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). 584 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 585 date.setDate(date.getDate() + 7); 586 equalsDate(inp.datepicker('getDate'), date, 'Keystroke ctrl+down'); 587 inp.val('').datepicker('show'). 588 simulate('keydown', {keyCode: $.simulate.VK_DOWN}). 589 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 590 date.setDate(date.getDate() - 7); 591 equalsDate(inp.datepicker('getDate'), date, 'Keystroke down'); 592 // Moving by month or year 593 inp.val('02/04/2008').datepicker('show'). 594 simulate('keydown', {keyCode: $.simulate.VK_PGUP}). 595 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 596 equalsDate(inp.datepicker('getDate'), new Date(2008, 1 - 1, 4), 597 'Keystroke pgup'); 598 inp.val('02/04/2008').datepicker('show'). 599 simulate('keydown', {keyCode: $.simulate.VK_PGDN}). 600 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 601 equalsDate(inp.datepicker('getDate'), new Date(2008, 3 - 1, 4), 602 'Keystroke pgdn'); 603 inp.val('02/04/2008').datepicker('show'). 604 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). 605 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 606 equalsDate(inp.datepicker('getDate'), new Date(2007, 2 - 1, 4), 607 'Keystroke ctrl+pgup'); 608 inp.val('02/04/2008').datepicker('show'). 609 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). 610 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 611 equalsDate(inp.datepicker('getDate'), new Date(2009, 2 - 1, 4), 612 'Keystroke ctrl+pgdn'); 613 // Check for moving to short months 614 inp.val('03/31/2008').datepicker('show'). 615 simulate('keydown', {keyCode: $.simulate.VK_PGUP}). 616 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 617 equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 29), 618 'Keystroke pgup - Feb'); 619 inp.val('01/30/2008').datepicker('show'). 620 simulate('keydown', {keyCode: $.simulate.VK_PGDN}). 621 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 622 equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 29), 623 'Keystroke pgdn - Feb'); 624 inp.val('02/29/2008').datepicker('show'). 625 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). 626 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 627 equalsDate(inp.datepicker('getDate'), new Date(2007, 2 - 1, 28), 628 'Keystroke ctrl+pgup - Feb'); 629 inp.val('02/29/2008').datepicker('show'). 630 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). 631 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 632 equalsDate(inp.datepicker('getDate'), new Date(2009, 2 - 1, 28), 633 'Keystroke ctrl+pgdn - Feb'); 634 // Goto current 635 inp.datepicker('option', {gotoCurrent: true}). 636 datepicker('hide').val('02/04/2008').datepicker('show'). 637 simulate('keydown', {keyCode: $.simulate.VK_PGDN}). 638 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_HOME}). 639 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 640 equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), 641 'Keystroke ctrl+home'); 642 // Change steps 643 inp.datepicker('option', {stepMonths: 2, stepBigMonths: 6, gotoCurrent: false}). 644 datepicker('hide').val('02/04/2008').datepicker('show'). 645 simulate('keydown', {keyCode: $.simulate.VK_PGUP}). 646 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 647 equalsDate(inp.datepicker('getDate'), new Date(2007, 12 - 1, 4), 648 'Keystroke pgup step 2'); 649 inp.val('02/04/2008').datepicker('show'). 650 simulate('keydown', {keyCode: $.simulate.VK_PGDN}). 651 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 652 equalsDate(inp.datepicker('getDate'), new Date(2008, 4 - 1, 4), 653 'Keystroke pgdn step 2'); 654 inp.val('02/04/2008').datepicker('show'). 655 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). 656 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 657 equalsDate(inp.datepicker('getDate'), new Date(2007, 8 - 1, 4), 658 'Keystroke ctrl+pgup step 6'); 659 inp.val('02/04/2008').datepicker('show'). 660 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). 661 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 662 equalsDate(inp.datepicker('getDate'), new Date(2008, 8 - 1, 4), 663 'Keystroke ctrl+pgdn step 6'); 664 }); 665 666 test('mouse', function() { 667 var inp = init('#inp'); 668 var dp = $('#ui-datepicker-div'); 669 var date = new Date(); 670 inp.val('').datepicker('show'); 671 $('.ui-datepicker tbody a:contains(10)', dp).simulate('click', {}); 672 date.setDate(10); 673 equalsDate(inp.datepicker('getDate'), date, 'Mouse click'); 674 inp.val('02/04/2008').datepicker('show'); 675 $('.ui-datepicker tbody a:contains(12)', dp).simulate('click', {}); 676 equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 12), 677 'Mouse click - preset'); 678 inp.val('02/04/2008').datepicker('show'); 679 $('.ui-datepicker-clear a', dp).simulate('click', {}); 680 ok(inp.datepicker('getDate') == null, 'Mouse click - clear'); 681 inp.val('').datepicker('show'); 682 $('.ui-datepicker-close a', dp).simulate('click', {}); 683 ok(inp.datepicker('getDate') == null, 'Mouse click - close'); 684 inp.val('02/04/2008').datepicker('show'); 685 $('.ui-datepicker-close a', dp).simulate('click', {}); 686 equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), 687 'Mouse click - close + preset'); 688 inp.val('02/04/2008').datepicker('show'); 689 $('.ui-datepicker-prev a', dp).simulate('click', {}); 690 $('.ui-datepicker-close a', dp).simulate('click', {}); 691 equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), 692 'Mouse click - abandoned'); 693 // Current/previous/next 694 inp.val('02/04/2008').datepicker('show'); 695 $('.ui-datepicker-current a', dp).simulate('click', {}); 696 $('.ui-datepicker tbody a:contains(14)', dp).simulate('click', {}); 697 date.setDate(14); 698 equalsDate(inp.datepicker('getDate'), date, 'Mouse click - current'); 699 inp.val('02/04/2008').datepicker('show'); 700 $('.ui-datepicker-prev a', dp).simulate('click', {}); 701 $('.ui-datepicker tbody a:contains(16)', dp).simulate('click', {}); 702 equalsDate(inp.datepicker('getDate'), new Date(2008, 1 - 1, 16), 703 'Mouse click - previous'); 704 inp.val('02/04/2008').datepicker('show'); 705 $('.ui-datepicker-next a', dp).simulate('click', {}); 706 $('.ui-datepicker tbody a:contains(18)', dp).simulate('click', {}); 707 equalsDate(inp.datepicker('getDate'), new Date(2008, 3 - 1, 18), 708 'Mouse click - next'); 709 // Previous/next with minimum/maximum 710 inp.datepicker('option', {minDate: new Date(2008, 2 - 1, 2), 711 maxDate: new Date(2008, 2 - 1, 26)}).val('02/04/2008').datepicker('show'); 712 $('.ui-datepicker-prev a', dp).simulate('click', {}); 713 $('.ui-datepicker tbody a:contains(16)', dp).simulate('click', {}); 714 equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 16), 715 'Mouse click - previous + min/max'); 716 inp.val('02/04/2008').datepicker('show'); 717 $('.ui-datepicker-next a', dp).simulate('click', {}); 718 $('.ui-datepicker tbody a:contains(18)', dp).simulate('click', {}); 719 equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 18), 720 'Mouse click - next + min/max'); 721 // Change day of week 722 inp.val('02/04/2008').datepicker('show'); 723 equals($('.ui-datepicker-title-row td:first', dp).text(), 'Su', 724 'Mouse click - initial day of week'); 725 $('.ui-datepicker-title-row td:last a', dp).simulate('click', {}); 726 equals($('.ui-datepicker-title-row td:first', dp).text(), 'Sa', 727 'Mouse click - day of week'); 728 // Highlight week 729 inp.datepicker('option', {highlightWeek: true}). 730 datepicker('hide').val('02/04/2008').datepicker('show'); 731 ok(!$('.ui-datepicker tr:eq(2)', dp).is('.ui-datepicker-week-over'), 732 'Mouse over - no week highlight'); 733 $('.ui-datepicker tr:eq(2) td:first', dp).simulate('mouseover', {}); 734 ok($('.ui-datepicker tr:eq(2)', dp).is('.ui-datepicker-week-over'), 735 'Mouse over - week highlight'); 736 // Inline 737 var inl = init('#inl'); 738 var dp = $('.ui-datepicker-inline', inl); 739 var date = new Date(); 740 inl.datepicker('setDate', date); 741 $('.ui-datepicker tbody a:contains(10)', dp).simulate('click', {}); 742 date.setDate(10); 743 equalsDate(inl.datepicker('getDate'), date, 'Mouse click inline'); 744 inl.datepicker('setDate', new Date(2008, 2 - 1, 4)); 745 $('.ui-datepicker tbody a:contains(12)', dp).simulate('click', {}); 746 equalsDate(inl.datepicker('getDate'), new Date(2008, 2 - 1, 12), 747 'Mouse click inline - preset'); 748 $('.ui-datepicker-current a', dp).simulate('click', {}); 749 $('.ui-datepicker tbody a:contains(14)', dp).simulate('click', {}); 750 date.setDate(14); 751 equalsDate(inl.datepicker('getDate'), date, 'Mouse click inline - current'); 752 inl.datepicker('setDate', new Date(2008, 2 - 1, 4)); 753 $('.ui-datepicker-prev a', dp).simulate('click', {}); 754 $('.ui-datepicker tbody a:contains(16)', dp).simulate('click', {}); 755 equalsDate(inl.datepicker('getDate'), new Date(2008, 1 - 1, 16), 756 'Mouse click inline - previous'); 757 inl.datepicker('setDate', new Date(2008, 2 - 1, 4)); 758 $('.ui-datepicker-next a', dp).simulate('click', {}); 759 $('.ui-datepicker tbody a:contains(18)', dp).simulate('click', {}); 760 equalsDate(inl.datepicker('getDate'), new Date(2008, 3 - 1, 18), 761 'Mouse click inline - next'); 762 }); 763 764 test('defaultDate', function() { 765 var inp = init('#inp'); 766 var date = new Date(); 767 inp.val('').datepicker('show'). 768 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 769 equalsDate(inp.datepicker('getDate'), date, 'Default date null'); 770 // numeric values 771 inp.datepicker('option', {defaultDate: -2}). 772 datepicker('hide').val('').datepicker('show'). 773 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 774 date.setDate(date.getDate() - 2); 775 equalsDate(inp.datepicker('getDate'), date, 'Default date -2'); 776 inp.datepicker('option', {defaultDate: 3}). 777 datepicker('hide').val('').datepicker('show'). 778 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 779 date.setDate(date.getDate() + 5); 780 equalsDate(inp.datepicker('getDate'), date, 'Default date 3'); 781 inp.datepicker('option', {defaultDate: 1 / 0}). 782 datepicker('hide').val('').datepicker('show'). 783 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 784 date.setDate(date.getDate() - 3); 785 equalsDate(inp.datepicker('getDate'), date, 'Default date Infinity'); 786 inp.datepicker('option', {defaultDate: 1 / 'a'}). 787 datepicker('hide').val('').datepicker('show'). 788 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 789 equalsDate(inp.datepicker('getDate'), date, 'Default date NaN'); 790 // string values 791 inp.datepicker('option', {defaultDate: '-1d'}). 792 datepicker('hide').val('').datepicker('show'). 793 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 794 date.setDate(date.getDate() - 1); 795 equalsDate(inp.datepicker('getDate'), date, 'Default date -1d'); 796 inp.datepicker('option', {defaultDate: '+3D'}). 797 datepicker('hide').val('').datepicker('show'). 798 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 799 date.setDate(date.getDate() + 4); 800 equalsDate(inp.datepicker('getDate'), date, 'Default date +3D'); 801 inp.datepicker('option', {defaultDate: ' -2 w '}). 802 datepicker('hide').val('').datepicker('show'). 803 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 804 date = new Date(); 805 date.setDate(date.getDate() - 14); 806 equalsDate(inp.datepicker('getDate'), date, 'Default date -2 w'); 807 inp.datepicker('option', {defaultDate: '+1 W'}). 808 datepicker('hide').val('').datepicker('show'). 809 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 810 date.setDate(date.getDate() + 21); 811 equalsDate(inp.datepicker('getDate'), date, 'Default date +1 W'); 812 inp.datepicker('option', {defaultDate: ' -1 m '}). 813 datepicker('hide').val('').datepicker('show'). 814 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 815 date = new Date(); 816 date.setMonth(date.getMonth() - 1); 817 equalsDate(inp.datepicker('getDate'), date, 'Default date -1 m'); 818 inp.datepicker('option', {defaultDate: '+2M'}). 819 datepicker('hide').val('').datepicker('show'). 820 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 821 date.setMonth(date.getMonth() + 3); 822 equalsDate(inp.datepicker('getDate'), date, 'Default date +2M'); 823 inp.datepicker('option', {defaultDate: '-2y'}). 824 datepicker('hide').val('').datepicker('show'). 825 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 826 date = new Date(); 827 date.setFullYear(date.getFullYear() - 2); 828 equalsDate(inp.datepicker('getDate'), date, 'Default date -2y'); 829 inp.datepicker('option', {defaultDate: '+1 Y '}). 830 datepicker('hide').val('').datepicker('show'). 831 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 832 date.setFullYear(date.getFullYear() + 3); 833 equalsDate(inp.datepicker('getDate'), date, 'Default date +1 Y'); 834 inp.datepicker('option', {defaultDate: '+1M +10d'}). 835 datepicker('hide').val('').datepicker('show'). 836 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 837 date = new Date(); 838 date.setMonth(date.getMonth() + 1); 839 date.setDate(date.getDate() + 10); 840 equalsDate(inp.datepicker('getDate'), date, 'Default date +1M +10d'); 841 date = new Date(2007, 1 - 1, 26); 842 inp.datepicker('option', {defaultDate: date}). 843 datepicker('hide').val('').datepicker('show'). 844 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 845 equalsDate(inp.datepicker('getDate'), date, 'Default date 01/26/2007'); 846 }); 847 848 test('miscellaneous', function() { 849 var dp = $('#ui-datepicker-div'); 850 var inp = init('#inp'); 851 // Year range 852 inp.val('02/04/2008').datepicker('show'); 853 equals(dp.find('.ui-datepicker-new-year').text(), 854 '199819992000200120022003200420052006200720082009201020112012201320142015201620172018', 855 'Year range - default'); 856 inp.datepicker('hide').datepicker('option', {yearRange: '-6:+2'}).datepicker('show'); 857 equals(dp.find('.ui-datepicker-new-year').text(), 858 '200220032004200520062007200820092010', 'Year range - -6:+2'); 859 inp.datepicker('hide').datepicker('option', {yearRange: '2000:2010'}).datepicker('show'); 860 equals(dp.find('.ui-datepicker-new-year').text(), 861 '20002001200220032004200520062007200820092010', 'Year range - 2000:2010'); 862 // Navigation as date format 863 equals(dp.find('.ui-datepicker-prev').text(), 864 '<Prev', 'Navigation prev - default'); 865 equals(dp.find('.ui-datepicker-current').text(), 866 'Today', 'Navigation current - default'); 867 equals(dp.find('.ui-datepicker-next').text(), 868 'Next>', 'Navigation next - default'); 869 inp.datepicker('hide').datepicker('option', {navigationAsDateFormat: true, 870 prevText: '< M', currentText: 'MM', nextText: 'M >'}). 871 val('02/04/2008').datepicker('show'); 872 var longNames = $.datepicker.regional[''].monthNames; 873 var shortNames = $.datepicker.regional[''].monthNamesShort; 874 var date = new Date(); 875 equals(dp.find('.ui-datepicker-prev').text(), 876 '< ' + shortNames[0], 'Navigation prev - as date format'); 877 equals(dp.find('.ui-datepicker-current').text(), 878 longNames[date.getMonth()], 'Navigation current - as date format'); 879 equals(dp.find('.ui-datepicker-next').text(), 880 shortNames[2] + ' >', 'Navigation next - as date format'); 881 inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}); 882 equals(dp.find('.ui-datepicker-prev').text(), 883 '< ' + shortNames[1], 'Navigation prev - as date format + pgdn'); 884 equals(dp.find('.ui-datepicker-current').text(), 885 longNames[date.getMonth()], 'Navigation current - as date format + pgdn'); 886 equals(dp.find('.ui-datepicker-next').text(), 887 shortNames[3] + ' >', 'Navigation next - as date format + pgdn'); 888 inp.datepicker('hide').datepicker('option', {gotoCurrent: true}). 889 val('02/04/2008').datepicker('show'); 890 equals(dp.find('.ui-datepicker-prev').text(), 891 '< ' + shortNames[0], 'Navigation prev - as date format + goto current'); 892 equals(dp.find('.ui-datepicker-current').text(), 893 longNames[1], 'Navigation current - as date format + goto current'); 894 equals(dp.find('.ui-datepicker-next').text(), 895 shortNames[2] + ' >', 'Navigation next - as date format + goto current'); 896 }); 897 898 test('minMax', function() { 899 var inp = init('#inp'); 900 var lastYear = new Date(2007, 6 - 1, 4); 901 var nextYear = new Date(2009, 6 - 1, 4); 902 var minDate = new Date(2008, 2 - 1, 29); 903 var maxDate = new Date(2008, 12 - 1, 7); 904 inp.val('06/04/2008').datepicker('show'); 905 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). 906 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 907 equalsDate(inp.datepicker('getDate'), lastYear, 908 'Min/max - null, null - ctrl+pgup'); 909 inp.val('06/04/2008').datepicker('show'); 910 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). 911 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 912 equalsDate(inp.datepicker('getDate'), nextYear, 913 'Min/max - null, null - ctrl+pgdn'); 914 inp.datepicker('option', {minDate: minDate}). 915 datepicker('hide').val('06/04/2008').datepicker('show'); 916 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). 917 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 918 equalsDate(inp.datepicker('getDate'), minDate, 919 'Min/max - 02/29/2008, null - ctrl+pgup'); 920 inp.val('06/04/2008').datepicker('show'); 921 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). 922 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 923 equalsDate(inp.datepicker('getDate'), nextYear, 924 'Min/max - 02/29/2008, null - ctrl+pgdn'); 925 inp.datepicker('option', {maxDate: maxDate}). 926 datepicker('hide').val('06/04/2008').datepicker('show'); 927 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). 928 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 929 equalsDate(inp.datepicker('getDate'), minDate, 930 'Min/max - 02/29/2008, 12/07/2008 - ctrl+pgup'); 931 inp.val('06/04/2008').datepicker('show'); 932 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). 933 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 934 equalsDate(inp.datepicker('getDate'), maxDate, 935 'Min/max - 02/29/2008, 12/07/2008 - ctrl+pgdn'); 936 inp.datepicker('option', {minDate: null}). 937 datepicker('hide').val('06/04/2008').datepicker('show'); 938 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). 939 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 940 equalsDate(inp.datepicker('getDate'), lastYear, 941 'Min/max - null, 12/07/2008 - ctrl+pgup'); 942 inp.val('06/04/2008').datepicker('show'); 943 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). 944 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 945 equalsDate(inp.datepicker('getDate'), maxDate, 946 'Min/max - null, 12/07/2008 - ctrl+pgdn'); 947 // Relative dates 948 var date = new Date(); 949 date.setDate(date.getDate() - 7); 950 inp.datepicker('option', {minDate: '-1w', maxDate: '+1 M +10 D '}). 951 datepicker('hide').val('').datepicker('show'); 952 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). 953 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 954 equalsDate(inp.datepicker('getDate'), date, 955 'Min/max - -1w, +1 M +10 D - ctrl+pgup'); 956 date = new Date(); 957 date.setMonth(date.getMonth() + 1); 958 date.setDate(date.getDate() + 10); 959 inp.val('').datepicker('show'); 960 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). 961 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 962 equalsDate(inp.datepicker('getDate'), date, 963 'Min/max - -1w, +1 M +10 D - ctrl+pgdn'); 964 }); 965 966 test('setDate', function() { 967 var inp = init('#inp'); 968 var date1 = new Date(2008, 6 - 1, 4); 969 var date2 = new Date(); 970 ok(inp.datepicker('getDate') == null, 'Set date - default'); 971 inp.datepicker('setDate', date1); 972 equalsDate(inp.datepicker('getDate'), date1, 'Set date - 2008-06-04'); 973 date1 = new Date(); 974 date1.setDate(date1.getDate() + 7); 975 inp.datepicker('setDate', +7); 976 equalsDate(inp.datepicker('getDate'), date1, 'Set date - +7'); 977 date2.setFullYear(date2.getFullYear() + 2); 978 inp.datepicker('setDate', '+2y'); 979 equalsDate(inp.datepicker('getDate'), date2, 'Set date - +2y'); 980 inp.datepicker('setDate', date1, date2); 981 equalsDate(inp.datepicker('getDate'), date1, 'Set date - two dates'); 982 inp.datepicker('setDate'); 983 ok(inp.datepicker('getDate') == null, 'Set date - null'); 984 // Ranges 985 date1 = new Date(2008, 6 - 1, 4); 986 date2 = new Date(2009, 7 - 1, 5); 987 inp.datepicker('option', {rangeSelect: true}); 988 inp.datepicker('setDate', date1, date2); 989 equalsDateArray(inp.datepicker('getDate'), [date1, date2], 990 'Set date range - 2008-06-04 - 2009-07-05'); 991 inp.datepicker('setDate', date1); 992 equalsDateArray(inp.datepicker('getDate'), [date1, date1], 993 'Set date range - 2008-06-04'); 994 date1 = new Date(); 995 date1.setDate(date1.getDate() - 10); 996 date2 = new Date(); 997 date2.setDate(date2.getDate() + 10); 998 inp.datepicker('setDate', -10, +10); 999 equalsDateArray(inp.datepicker('getDate'), [date1, date2], 1000 'Set date range - -10 - +10'); 1001 inp.datepicker('setDate', -10); 1002 equalsDateArray(inp.datepicker('getDate'), [date1, date1], 1003 'Set date range - -10'); 1004 date1 = new Date(); 1005 date1.setDate(date1.getDate() - 14); 1006 date2 = new Date(); 1007 date2.setFullYear(date2.getFullYear() + 1); 1008 inp.datepicker('setDate', '-2w', '+1Y'); 1009 equalsDateArray(inp.datepicker('getDate'), [date1, date2], 1010 'Set date range - -2w - +1Y'); 1011 inp.datepicker('setDate', '-2w'); 1012 equalsDateArray(inp.datepicker('getDate'), [date1, date1], 1013 'Set date range - -2w'); 1014 inp.datepicker('setDate'); 1015 isObj(inp.datepicker('getDate'), [null, null], 'Set date range - null'); 1016 // Inline 1017 var inl = init('#inl'); 1018 date1 = new Date(2008, 6 - 1, 4); 1019 date2 = new Date(); 1020 equalsDate(inl.datepicker('getDate'), date2, 'Set date inline - default'); 1021 inl.datepicker('setDate', date1); 1022 equalsDate(inl.datepicker('getDate'), date1, 'Set date inline - 2008-06-04'); 1023 date1 = new Date(); 1024 date1.setDate(date1.getDate() + 7); 1025 inl.datepicker('setDate', +7); 1026 equalsDate(inl.datepicker('getDate'), date1, 'Set date inline - +7'); 1027 date2.setFullYear(date2.getFullYear() + 2); 1028 inl.datepicker('setDate', '+2y'); 1029 equalsDate(inl.datepicker('getDate'), date2, 'Set date inline - +2y'); 1030 inl.datepicker('setDate', date1, date2); 1031 equalsDate(inl.datepicker('getDate'), date1, 'Set date inline - two dates'); 1032 inl.datepicker('setDate'); 1033 ok(inl.datepicker('getDate') == null, 'Set date inline - null'); 1034 // Alternate field 1035 var alt = $('#alt'); 1036 inp.datepicker('option', {altField: '#alt', altFormat: 'yy-mm-dd'}); 1037 date1 = new Date(2008, 6 - 1, 4); 1038 date2 = new Date(2009, 7 - 1, 5); 1039 inp.datepicker('setDate', date1, date2); 1040 equals(inp.val(), '06/04/2008 - 07/05/2009', 1041 'Set date alternate - 06/04/2008 - 07/05/2009'); 1042 equals(alt.val(), '2008-06-04 - 2009-07-05', 1043 'Set date alternate - 2008-06-04 - 2009-07-05'); 1044 inp.datepicker('option', {rangeSelect: false}).datepicker('setDate', date1); 1045 equals(inp.val(), '06/04/2008', 'Set date alternate - 06/04/2008'); 1046 equals(alt.val(), '2008-06-04', 'Set date alternate - 2008-06-04'); 1047 }); 1048 1049 test('ranges', function() { 1050 var inp = init('#inp', {rangeSelect: true}); 1051 var date1 = new Date(); 1052 var date2 = new Date(); 1053 // Select today - today 1054 inp.val('').datepicker('show'). 1055 simulate('keydown', {keyCode: $.simulate.VK_ENTER}). 1056 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1057 equalsDateArray(inp.datepicker('getDate'), [date1, date1], 1058 'Range - enter/enter'); 1059 // Can't select prior to start date 1060 inp.val('').datepicker('show'). 1061 simulate('keydown', {keyCode: $.simulate.VK_ENTER}). 1062 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_UP}). 1063 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1064 equalsDateArray(inp.datepicker('getDate'), [date1, date1], 1065 'Range - enter/ctrl+up/enter'); 1066 // Can select after start date 1067 inp.val('').datepicker('show'). 1068 simulate('keydown', {keyCode: $.simulate.VK_ENTER}). 1069 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). 1070 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1071 date2.setDate(date2.getDate() + 7); 1072 equalsDateArray(inp.datepicker('getDate'), [date1, date2], 1073 'Range - enter/ctrl+down/enter'); 1074 equals(inp.val(), $.datepicker.formatDate('mm/dd/yy', date1) + ' - ' + 1075 $.datepicker.formatDate('mm/dd/yy', date2), 'Range - value'); 1076 // Select then cancel defaults to first date 1077 inp.val('').datepicker('show'). 1078 simulate('keydown', {keyCode: $.simulate.VK_ENTER}). 1079 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). 1080 simulate('keydown', {keyCode: $.simulate.VK_ESC}); 1081 equalsDateArray(inp.datepicker('getDate'), [date1, date1], 1082 'Range - enter/ctrl+down/esc'); 1083 // Separator 1084 inp.datepicker('option', {rangeSeparator: ' to '}). 1085 datepicker('hide').val('06/04/2008').datepicker('show'). 1086 simulate('keydown', {keyCode: $.simulate.VK_ENTER}). 1087 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). 1088 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1089 equalsDateArray(inp.datepicker('getDate'), 1090 [new Date(2008, 6 - 1, 4), new Date(2008, 6 - 1, 11)], 1091 'Range separator - enter/ctrl+down/enter'); 1092 equals(inp.val(), '06/04/2008 to 06/11/2008', 1093 'Range separator - value'); 1094 // Callbacks 1095 inp.datepicker('option', {onSelect: callback, rangeSeparator: ' - '}). 1096 datepicker('hide').val('06/04/2008').datepicker('show'). 1097 simulate('keydown', {keyCode: $.simulate.VK_ENTER}). 1098 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). 1099 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1100 equals(selectedDate, '06/04/2008 - 06/11/2008', 1101 'Range onSelect - enter/ctrl+down/enter'); 1102 inp.datepicker('option', {onChangeMonthYear: callback2, onSelect: null}). 1103 datepicker('hide').val('05/04/2008').datepicker('show'). 1104 simulate('keydown', {keyCode: $.simulate.VK_PGUP}). 1105 simulate('keydown', {keyCode: $.simulate.VK_ENTER}). 1106 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). 1107 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1108 equals(selectedDate, '2008/4', 1109 'Range onChangeMonthYear - enter/ctrl+down/enter'); 1110 inp.datepicker('option', {onClose: callback, onChangeMonthYear: null}). 1111 datepicker('hide').val('03/04/2008').datepicker('show'). 1112 simulate('keydown', {keyCode: $.simulate.VK_ENTER}). 1113 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). 1114 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1115 equals(selectedDate, '03/04/2008 - 03/11/2008', 1116 'Range onClose - enter/ctrl+down/enter'); 1117 // Minimum/maximum 1118 date1 = new Date(2008, 5 - 1, 20); 1119 date2 = new Date(2008, 7 - 1, 2); 1120 inp.datepicker('option', {minDate: date1, maxDate: date2, onClose: null}). 1121 datepicker('hide').val('06/04/2008').datepicker('show'). 1122 simulate('keydown', {keyCode: $.simulate.VK_PGUP}). 1123 simulate('keydown', {keyCode: $.simulate.VK_ENTER}). 1124 simulate('keydown', {keyCode: $.simulate.VK_PGDN}). 1125 simulate('keydown', {keyCode: $.simulate.VK_PGDN}). 1126 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1127 equalsDateArray(inp.datepicker('getDate'), [date1, date2], 1128 'Range min/max - pgup/enter/pgdn/pgdn/enter'); 1129 inp.val('06/04/2008').datepicker('show'). 1130 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_UP}). 1131 simulate('keydown', {keyCode: $.simulate.VK_ENTER}). 1132 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). 1133 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). 1134 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1135 equalsDateArray(inp.datepicker('getDate'), 1136 [new Date(2008, 5 - 1, 28), new Date(2008, 6 - 1, 11)], 1137 'Range min/max - ctrl+up/enter/ctrl+down/ctrl+down/enter'); 1138 // Inline 1139 var inl = init('#inl', {rangeSelect: true}); 1140 var dp = $('.ui-datepicker-inline', inl); 1141 date1 = new Date(); 1142 date1.setDate(12); 1143 date2 = new Date(); 1144 date2.setDate(19); 1145 $('.ui-datepicker tbody a:contains(12)', dp).simulate('click', {}); 1146 $('.ui-datepicker tbody a:contains(12)', dp).simulate('click', {}); 1147 equalsDateArray(inl.datepicker('getDate'), [date1, date1], 1148 'Range inline - same day'); 1149 $('.ui-datepicker tbody a:contains(12)', dp).simulate('click', {}); 1150 $('.ui-datepicker tbody a:contains(10)', dp).simulate('click', {}); // Doesn't select 1151 equalsDateArray(inl.datepicker('getDate'), [date1, date1], 1152 'Range inline - prev'); 1153 $('.ui-datepicker tbody a:contains(12)', dp).simulate('click', {}); // Selects 1154 inl.datepicker('setDate', date1); 1155 $('.ui-datepicker tbody a:contains(12)', dp).simulate('click', {}); 1156 $('.ui-datepicker tbody a:contains(19)', dp).simulate('click', {}); 1157 equalsDateArray(inl.datepicker('getDate'), [date1, date2], 1158 'Range inline - next'); 1159 }); 1160 1161 test('altField', function() { 1162 var inp = init('#inp'); 1163 var alt = $('#alt'); 1164 // No alternate field set 1165 alt.val(''); 1166 inp.val('06/04/2008').datepicker('show'); 1167 inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1168 equals(inp.val(), '06/04/2008', 'Alt field - dp - enter'); 1169 equals(alt.val(), '', 'Alt field - alt not set'); 1170 // Alternate field set 1171 alt.val(''); 1172 inp.datepicker('option', {altField: '#alt', altFormat: 'yy-mm-dd'}). 1173 val('06/04/2008').datepicker('show'); 1174 inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1175 equals(inp.val(), '06/04/2008', 'Alt field - dp - enter'); 1176 equals(alt.val(), '2008-06-04', 'Alt field - alt - enter'); 1177 // Move from initial date 1178 alt.val(''); 1179 inp.val('06/04/2008').datepicker('show'); 1180 inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}). 1181 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1182 equals(inp.val(), '07/04/2008', 'Alt field - dp - pgdn'); 1183 equals(alt.val(), '2008-07-04', 'Alt field - alt - pgdn'); 1184 // Alternate field set - closed 1185 alt.val(''); 1186 inp.val('06/04/2008').datepicker('show'); 1187 inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}). 1188 simulate('keydown', {keyCode: $.simulate.VK_ESC}); 1189 equals(inp.val(), '06/04/2008', 'Alt field - dp - pgdn/esc'); 1190 equals(alt.val(), '', 'Alt field - alt - pgdn/esc'); 1191 // Clear date and alternate 1192 alt.val(''); 1193 inp.val('06/04/2008').datepicker('show'); 1194 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_END}); 1195 equals(inp.val(), '', 'Alt field - dp - ctrl+end'); 1196 equals(alt.val(), '', 'Alt field - alt - ctrl+end'); 1197 // Range select no alternate field set 1198 alt.val(''); 1199 inp.datepicker('option', {rangeSelect: true, altField: '', altFormat: ''}). 1200 datepicker('hide').val('06/04/2008 - 07/14/2008').datepicker('show'); 1201 inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}). 1202 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1203 equals(inp.val(), '06/04/2008 - 06/04/2008', 'Alt field range - dp - enter'); 1204 equals(alt.val(), '', 'Alt field range - alt not set'); 1205 // Range select no movement 1206 alt.val(''); 1207 inp.datepicker('option', {altField: '#alt', altFormat: 'yy-mm-dd'}). 1208 datepicker('hide').val('06/04/2008 - 07/14/2008').datepicker('show'); 1209 inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}). 1210 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1211 equals(inp.val(), '06/04/2008 - 06/04/2008', 'Alt field range - dp - enter'); 1212 equals(alt.val(), '2008-06-04 - 2008-06-04', 'Alt field range - alt - enter'); 1213 // Range select next month 1214 alt.val(''); 1215 inp.val('06/04/2008 - 07/14/2008').datepicker('show'); 1216 inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}). 1217 simulate('keydown', {keyCode: $.simulate.VK_PGDN}). 1218 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1219 equals(inp.val(), '06/04/2008 - 07/04/2008', 1220 'Alt field range - dp - enter/pgdn/enter'); 1221 equals(alt.val(), '2008-06-04 - 2008-07-04', 1222 'Alt field range - alt - enter/pgdn/enter'); 1223 // Range select escape 1224 alt.val(''); 1225 inp.val('06/04/2008 - 07/14/2008').datepicker('show'); 1226 inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}). 1227 simulate('keydown', {keyCode: $.simulate.VK_PGDN}). 1228 simulate('keydown', {keyCode: $.simulate.VK_ESC}); 1229 equals(inp.val(), '06/04/2008 - 06/04/2008', 1230 'Alt field range - dp - enter/pgdn/esc'); 1231 equals(alt.val(), '2008-06-04 - 2008-06-04', 1232 'Alt field range - alt - enter/pgdn/esc'); 1233 // Range select clear 1234 alt.val(''); 1235 inp.val('06/04/2008 - 07/14/2008').datepicker('show'); 1236 inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}). 1237 simulate('keydown', {keyCode: $.simulate.VK_PGDN}). 1238 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_END}); 1239 equals(inp.val(), '', 'Alt field range - dp - enter/pgdn/ctrl+end'); 1240 equals(alt.val(), '', 'Alt field range - alt - enter/pgdn/ctrl+end'); 1241 }); 1242 1243 test('daylightSaving', function() { 1244 var inp = init('#inp'); 1245 var dp = $('#ui-datepicker-div'); 1246 ok(true, 'Daylight saving - ' + new Date()); 1247 // Australia, Sydney - AM change, southern hemisphere 1248 inp.val('04/01/2008').datepicker('show'); 1249 $('.ui-datepicker td:eq(13)', dp).simulate('click', {}); 1250 equals(inp.val(), '04/05/2008', 'Daylight saving - Australia 04/05/2008'); 1251 inp.val('04/01/2008').datepicker('show'); 1252 $('.ui-datepicker td:eq(14)', dp).simulate('click', {}); 1253 equals(inp.val(), '04/06/2008', 'Daylight saving - Australia 04/06/2008'); 1254 inp.val('04/01/2008').datepicker('show'); 1255 $('.ui-datepicker td:eq(15)', dp).simulate('click', {}); 1256 equals(inp.val(), '04/07/2008', 'Daylight saving - Australia 04/07/2008'); 1257 inp.val('10/01/2008').datepicker('show'); 1258 $('.ui-datepicker td:eq(13)', dp).simulate('click', {}); 1259 equals(inp.val(), '10/04/2008', 'Daylight saving - Australia 10/04/2008'); 1260 inp.val('10/01/2008').datepicker('show'); 1261 $('.ui-datepicker td:eq(14)', dp).simulate('click', {}); 1262 equals(inp.val(), '10/05/2008', 'Daylight saving - Australia 10/05/2008'); 1263 inp.val('10/01/2008').datepicker('show'); 1264 $('.ui-datepicker td:eq(15)', dp).simulate('click', {}); 1265 equals(inp.val(), '10/06/2008', 'Daylight saving - Australia 10/06/2008'); 1266 // Brasil, Brasilia - midnight change, southern hemisphere 1267 inp.val('02/01/2008').datepicker('show'); 1268 $('.ui-datepicker td:eq(27)', dp).simulate('click', {}); 1269 equals(inp.val(), '02/16/2008', 'Daylight saving - Brasil 02/16/2008'); 1270 inp.val('02/01/2008').datepicker('show'); 1271 $('.ui-datepicker td:eq(28)', dp).simulate('click', {}); 1272 equals(inp.val(), '02/17/2008', 'Daylight saving - Brasil 02/17/2008'); 1273 inp.val('02/01/2008').datepicker('show'); 1274 $('.ui-datepicker td:eq(29)', dp).simulate('click', {}); 1275 equals(inp.val(), '02/18/2008', 'Daylight saving - Brasil 02/18/2008'); 1276 inp.val('10/01/2008').datepicker('show'); 1277 $('.ui-datepicker td:eq(20)', dp).simulate('click', {}); 1278 equals(inp.val(), '10/11/2008', 'Daylight saving - Brasil 10/11/2008'); 1279 inp.val('10/01/2008').datepicker('show'); 1280 $('.ui-datepicker td:eq(21)', dp).simulate('click', {}); 1281 equals(inp.val(), '10/12/2008', 'Daylight saving - Brasil 10/12/2008'); 1282 inp.val('10/01/2008').datepicker('show'); 1283 $('.ui-datepicker td:eq(22)', dp).simulate('click', {}); 1284 equals(inp.val(), '10/13/2008', 'Daylight saving - Brasil 10/13/2008'); 1285 // Lebanon, Beirut - midnight change, northern hemisphere 1286 inp.val('03/01/2008').datepicker('show'); 1287 $('.ui-datepicker td:eq(41)', dp).simulate('click', {}); 1288 equals(inp.val(), '03/29/2008', 'Daylight saving - Lebanon 03/29/2008'); 1289 inp.val('03/01/2008').datepicker('show'); 1290 $('.ui-datepicker td:eq(42)', dp).simulate('click', {}); 1291 equals(inp.val(), '03/30/2008', 'Daylight saving - Lebanon 03/30/2008'); 1292 inp.val('03/01/2008').datepicker('show'); 1293 $('.ui-datepicker td:eq(43)', dp).simulate('click', {}); 1294 equals(inp.val(), '03/31/2008', 'Daylight saving - Lebanon 03/31/2008'); 1295 inp.val('10/01/2008').datepicker('show'); 1296 $('.ui-datepicker td:eq(34)', dp).simulate('click', {}); 1297 equals(inp.val(), '10/25/2008', 'Daylight saving - Lebanon 10/25/2008'); 1298 inp.val('10/01/2008').datepicker('show'); 1299 $('.ui-datepicker td:eq(35)', dp).simulate('click', {}); 1300 equals(inp.val(), '10/26/2008', 'Daylight saving - Lebanon 10/26/2008'); 1301 inp.val('10/01/2008').datepicker('show'); 1302 $('.ui-datepicker td:eq(36)', dp).simulate('click', {}); 1303 equals(inp.val(), '10/27/2008', 'Daylight saving - Lebanon 10/27/2008'); 1304 // US, Eastern - AM change, northern hemisphere 1305 inp.val('03/01/2008').datepicker('show'); 1306 $('.ui-datepicker td:eq(20)', dp).simulate('click', {}); 1307 equals(inp.val(), '03/08/2008', 'Daylight saving - US 03/08/2008'); 1308 inp.val('03/01/2008').datepicker('show'); 1309 $('.ui-datepicker td:eq(21)', dp).simulate('click', {}); 1310 equals(inp.val(), '03/09/2008', 'Daylight saving - US 03/09/2008'); 1311 inp.val('03/01/2008').datepicker('show'); 1312 $('.ui-datepicker td:eq(22)', dp).simulate('click', {}); 1313 equals(inp.val(), '03/10/2008', 'Daylight saving - US 03/10/2008'); 1314 inp.val('11/01/2008').datepicker('show'); 1315 $('.ui-datepicker td:eq(13)', dp).simulate('click', {}); 1316 equals(inp.val(), '11/01/2008', 'Daylight saving - US 11/01/2008'); 1317 inp.val('11/01/2008').datepicker('show'); 1318 $('.ui-datepicker td:eq(14)', dp).simulate('click', {}); 1319 equals(inp.val(), '11/02/2008', 'Daylight saving - US 11/02/2008'); 1320 inp.val('11/01/2008').datepicker('show'); 1321 $('.ui-datepicker td:eq(15)', dp).simulate('click', {}); 1322 equals(inp.val(), '11/03/2008', 'Daylight saving - US 11/03/2008'); 1323 }); 1324 1325 var beforeShowThis = null; 1326 var beforeShowInput = null; 1327 var beforeShowInst = null; 1328 1329 function beforeAll(input, inst) { 1330 beforeShowThis = this; 1331 beforeShowInput = input; 1332 beforeShowInst = inst; 1333 return {currentText: 'Current'}; 1334 } 1335 1336 var beforeShowDayThis = null; 1337 var beforeShowDayOK = true; 1338 1339 function beforeDay(date) { 1340 beforeShowDayThis = this; 1341 beforeShowDayOK &= (date > new Date(2008, 1 - 1, 26) && 1342 date < new Date(2008, 3 - 1, 6)); 1343 return [(date.getDate() % 2 == 0), (date.getDate() % 10 == 0 ? 'day10' : ''), 1344 (date.getDate() % 3 == 0 ? 'Divisble by 3' : '')]; 1345 } 1346 1347 function calcWeek(date) { 1348 var doy = date.getDate() + 6; 1349 for (var m = date.getMonth() - 1; m >= 0; m--) 1350 doy += $.datepicker._getDaysInMonth(date.getFullYear(), m); 1351 // Simple count from 01/01 starting at week 1 1352 return Math.floor(doy / 7); 1353 } 1354 1355 test('callbacks', function() { 1356 // Before show 1357 var inp = init('#inp', {beforeShow: beforeAll}); 1358 var inst = $.data(inp[0], 'datepicker'); 1359 equals($.datepicker._get(inst, 'currentText'), 'Today', 'Before show - initial'); 1360 inp.val('02/04/2008').datepicker('show'); 1361 equals($.datepicker._get(inst, 'currentText'), 'Current', 'Before show - changed'); 1362 ok(beforeShowThis.id == inp[0].id, 'Before show - this OK'); 1363 ok(beforeShowInput.id == inp[0].id, 'Before show - input OK'); 1364 isObj(beforeShowInst, inst, 'Before show - inst OK'); 1365 inp.datepicker('hide').datepicker('destroy'); 1366 // Before show day 1367 inp = init('#inp', {beforeShowDay: beforeDay}); 1368 var dp = $('#ui-datepicker-div'); 1369 inp.val('02/04/2008').datepicker('show'); 1370 ok(beforeShowDayThis.id == inp[0].id, 'Before show day - this OK'); 1371 ok(beforeShowDayOK, 'Before show day - dates OK'); 1372 var day20 = dp.find('.ui-datepicker td:contains("20")'); 1373 var day21 = dp.find('.ui-datepicker td:contains("21")'); 1374 ok(!day20.is('.ui-datepicker-unselectable'), 'Before show day - unselectable 20'); 1375 ok(day21.is('.ui-datepicker-unselectable'), 'Before show day - unselectable 21'); 1376 ok(day20.is('.day10'), 'Before show day - CSS 20'); 1377 ok(!day21.is('.day10'), 'Before show day - CSS 21'); 1378 ok(day20.attr('title') == '', 'Before show day - title 20'); 1379 ok(day21.attr('title') == 'Divisble by 3', 'Before show day - title 21'); 1380 inp.datepicker('hide').datepicker('destroy'); 1381 // Calculate week 1382 inp = init('#inp', {showWeeks: true, calculateWeek: calcWeek}); 1383 inp.val('02/04/2008').datepicker('show'); 1384 equals($('.ui-datepicker-week-col:first').text(), 4, 'Calculate week'); 1385 equals($('.ui-datepicker-week-col:last').text(), 8, 'Calculate week'); 1386 // Make Tuesday first 1387 $('.ui-datepicker-title-row a:contains("Tu")', dp).simulate('click', {}); 1388 equals($('.ui-datepicker-week-col:first').text(), 5, 'Calculate week'); 1389 equals($('.ui-datepicker-week-col:last').text(), 9, 'Calculate week'); 1390 inp.datepicker('hide').datepicker('destroy'); 1391 }); 1392 1393 var selectedThis = null; 1394 var selectedDate = null; 1395 var selectedInst = null; 1396 1397 function callback(date, inst) { 1398 selectedThis = this; 1399 selectedDate = date; 1400 selectedInst = inst; 1401 } 1402 1403 function callback2(year, month, inst) { 1404 selectedThis = this; 1405 selectedDate = year + '/' + month; 1406 selectedInst = inst; 1407 } 1408 1409 test('events', function() { 1410 var inp = init('#inp', {onSelect: callback}); 1411 var date = new Date(); 1412 // onSelect 1413 inp.val('').datepicker('show'). 1414 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1415 equals(selectedThis, inp[0], 'Callback selected this'); 1416 equals(selectedInst, $.data(inp[0], PROP_NAME), 'Callback selected inst'); 1417 equals(selectedDate, $.datepicker.formatDate('mm/dd/yy', date), 1418 'Callback selected date'); 1419 inp.val('').datepicker('show'). 1420 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). 1421 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1422 date.setDate(date.getDate() + 7); 1423 equals(selectedDate, $.datepicker.formatDate('mm/dd/yy', date), 1424 'Callback selected date - ctrl+down'); 1425 inp.val('').datepicker('show'). 1426 simulate('keydown', {keyCode: $.simulate.VK_ESC}); 1427 equals(selectedDate, $.datepicker.formatDate('mm/dd/yy', date), 1428 'Callback selected date - esc'); 1429 // onChangeMonthYear 1430 inp.datepicker('option', {onChangeMonthYear: callback2, onSelect: null}). 1431 val('').datepicker('show'); 1432 var newMonthYear = function(date) { 1433 return date.getFullYear() + '/' + (date.getMonth() + 1); 1434 }; 1435 date = new Date(); 1436 date.setDate(1); 1437 inp.simulate('keydown', {keyCode: $.simulate.VK_PGUP}); 1438 date.setMonth(date.getMonth() - 1); 1439 equals(selectedThis, inp[0], 'Callback change month/year this'); 1440 equals(selectedInst, $.data(inp[0], PROP_NAME), 'Callback change month/year inst'); 1441 equals(selectedDate, newMonthYear(date), 1442 'Callback change month/year date - pgup'); 1443 inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}); 1444 date.setMonth(date.getMonth() + 1); 1445 equals(selectedDate, newMonthYear(date), 1446 'Callback change month/year date - pgdn'); 1447 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}); 1448 date.setFullYear(date.getFullYear() - 1); 1449 equals(selectedDate, newMonthYear(date), 1450 'Callback change month/year date - ctrl+pgup'); 1451 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_HOME}); 1452 date.setFullYear(date.getFullYear() + 1); 1453 equals(selectedDate, newMonthYear(date), 1454 'Callback change month/year date - ctrl+home'); 1455 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}); 1456 date.setFullYear(date.getFullYear() + 1); 1457 equals(selectedDate, newMonthYear(date), 1458 'Callback change month/year date - ctrl+pgdn'); 1459 inp.datepicker('setDate', new Date(2007, 1 - 1, 26)); 1460 equals(selectedDate, '2007/1', 'Callback change month/year date - setDate'); 1461 selectedDate = null; 1462 inp.datepicker('setDate', new Date(2007, 1 - 1, 12)); 1463 ok(selectedDate == null, 'Callback change month/year date - setDate no change'); 1464 // onChangeMonthYear step by 2 1465 inp.datepicker('option', {stepMonths: 2}). 1466 datepicker('hide').val('').datepicker('show'). 1467 simulate('keydown', {keyCode: $.simulate.VK_PGUP}); 1468 date.setMonth(date.getMonth() - 14); 1469 equals(selectedDate, newMonthYear(date), 1470 'Callback change month/year by 2 date - pgup'); 1471 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}); 1472 date.setMonth(date.getMonth() - 12); 1473 equals(selectedDate, newMonthYear(date), 1474 'Callback change month/year by 2 date - ctrl+pgup'); 1475 inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}); 1476 date.setMonth(date.getMonth() + 2); 1477 equals(selectedDate, newMonthYear(date), 1478 'Callback change month/year by 2 date - pgdn'); 1479 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}); 1480 date.setMonth(date.getMonth() + 12); 1481 equals(selectedDate, newMonthYear(date), 1482 'Callback change month/year by 2 date - ctrl+pgdn'); 1483 // onClose 1484 inp.datepicker('option', {onClose: callback, onChangeMonthYear: null, stepMonths: 1}). 1485 val('').datepicker('show'). 1486 simulate('keydown', {keyCode: $.simulate.VK_ESC}); 1487 equals(selectedThis, inp[0], 'Callback close this'); 1488 equals(selectedInst, $.data(inp[0], PROP_NAME), 'Callback close inst'); 1489 equals(selectedDate, '', 'Callback close date - esc'); 1490 inp.val('').datepicker('show'). 1491 simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1492 equals(selectedDate, $.datepicker.formatDate('mm/dd/yy', new Date()), 1493 'Callback close date - enter'); 1494 inp.val('02/04/2008').datepicker('show'). 1495 simulate('keydown', {keyCode: $.simulate.VK_ESC}); 1496 equals(selectedDate, '02/04/2008', 'Callback close date - preset'); 1497 inp.val('02/04/2008').datepicker('show'). 1498 simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_END}); 1499 equals(selectedDate, '', 'Callback close date - ctrl+end'); 1500 }); 1501 1502 function highlight20(date, inst) { 1503 return (date.getDate() == 20 ? '*** 20 ***' : $.datepicker.dateStatus(date, inst)); 1504 } 1505 1506 test('status', function() { 1507 var dp = $('#ui-datepicker-div'); 1508 var inp = init('#inp', {showStatus: true, statusForDate: highlight20, showWeeks: true}); 1509 inp.val('').datepicker('show'); 1510 var status = $('.ui-datepicker-status', dp); 1511 ok(status.length == 1, 'Status - present'); 1512 equals(status.text(), 'Select a date', 'Status - default'); 1513 $('.ui-datepicker-clear a', dp).simulate('mouseover'); 1514 equals(status.text(), 'Erase the current date', 'Status - clear'); 1515 $('.ui-datepicker-close a', dp).simulate('mouseover'); 1516 equals(status.text(), 'Close without change', 'Status - close'); 1517 $('.ui-datepicker-prev a', dp).simulate('mouseover'); 1518 equals(status.text(), 'Show the previous month', 'Status - previous'); 1519 $('.ui-datepicker-current a', dp).simulate('mouseover'); 1520 equals(status.text(), 'Show the current month', 'Status - current'); 1521 $('.ui-datepicker-next a', dp).simulate('mouseover'); 1522 equals(status.text(), 'Show the next month', 'Status - next'); 1523 $('.ui-datepicker-new-month', dp).simulate('mouseover'); 1524 equals(status.text(), 'Show a different month', 'Status - new month'); 1525 $('.ui-datepicker-new-year', dp).simulate('mouseover'); 1526 equals(status.text(), 'Show a different year', 'Status - new year'); 1527 $('.ui-datepicker-title-row td:first', dp).simulate('mouseover'); 1528 equals(status.text(), 'Week of the year', 'Status - week header'); 1529 var day = 0; 1530 $('.ui-datepicker-title-row a', dp).each(function() { 1531 $(this).simulate('mouseover'); 1532 equals(status.text(), 'Set ' + $.datepicker.regional[''].dayNames[day] + 1533 ' as first week day', 'Status - day ' + day); 1534 day++; 1535 }); 1536 $('.ui-datepicker-days-row:eq(1) td:first', dp).simulate('mouseover'); 1537 equals(status.text(), 'Week of the year', 'Status - week column'); 1538 day = 0; 1539 var month = $.datepicker.regional[''].monthNamesShort[new Date().getMonth()]; 1540 $('.ui-datepicker-days-row:eq(1) a', dp).each(function() { 1541 $(this).simulate('mouseover'); 1542 equals(status.text(), 'Select ' + $.datepicker.regional[''].dayNames[day] + 1543 ', ' + month + ' ' + $(this).text(), 'Status - dates'); 1544 day++; 1545 }); 1546 $('.ui-datepicker-days-row a:contains("20")', dp).each(function() { 1547 $(this).simulate('mouseover'); 1548 equals(status.text(), '*** 20 ***', 'Status - dates'); 1549 }); 1550 inp.datepicker('hide').datepicker('destroy'); 1551 }); 1552 1553 test('localisation', function() { 1554 var inp = init('#inp', $.datepicker.regional['fr']); 1555 inp.datepicker('option', {dateFormat: 'DD, d MM yy', showStatus: true, showWeeks: true}). 1556 val('').datepicker('show'); 1557 var dp = $('#ui-datepicker-div'); 1558 var status = $('.ui-datepicker-status', dp); 1559 equals($('.ui-datepicker-clear', dp).text(), 'Effacer', 'Localisation - clear'); 1560 equals($('.ui-datepicker-close', dp).text(), 'Fermer', 'Localisation - close'); 1561 $('.ui-datepicker-close a', dp).simulate('mouseover'); 1562 equals(status.text(), 'Fermer sans modifier', 'Localisation - status'); 1563 equals($('.ui-datepicker-prev', dp).text(), '<Préc', 'Localisation - previous'); 1564 equals($('.ui-datepicker-current', dp).text(), 'Courant', 'Localisation - current'); 1565 equals($('.ui-datepicker-next', dp).text(), 'Suiv>', 'Localisation - next'); 1566 equals($('.ui-datepicker-current', dp).text(), 'Courant', 'Localisation - current'); 1567 var month = 0; 1568 $('.ui-datepicker-new-month option', dp).each(function() { 1569 equals($(this).text(), $.datepicker.regional['fr'].monthNames[month], 1570 'Localisation - month ' + month); 1571 month++; 1572 }); 1573 equals($('.ui-datepicker-title-row td:first', dp).text(), 1574 $.datepicker.regional['fr'].weekHeader, 'Localisation - week header'); 1575 var day = 1; 1576 $('.ui-datepicker-title-row a', dp).each(function() { 1577 equals($(this).text(), $.datepicker.regional['fr'].dayNamesMin[day], 1578 'Localisation - day ' + day); 1579 day = (day + 1) % 7; 1580 }); 1581 inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}); 1582 var date = new Date(); 1583 equals(inp.val(), $.datepicker.regional['fr'].dayNames[date.getDay()] + ', ' + 1584 date.getDate() + ' ' + $.datepicker.regional['fr'].monthNames[date.getMonth()] + 1585 ' ' + date.getFullYear(), 'Localisation - formatting'); 1586 }); 1587 1588 test('noWeekends', function() { 1589 for (var i = 1; i <= 31; i++) { 1590 var date = new Date(2001, 1 - 1, i); 1591 isSet($.datepicker.noWeekends(date), [(i + 1) % 7 >= 2, ''], 1592 'No weekends ' + date); 1593 } 1594 }); 1595 1596 test('iso8601Week', function() { 1597 var date = new Date(2000, 12 - 1, 31); 1598 equals($.datepicker.iso8601Week(date), 52, 'ISO 8601 week ' + date); 1599 date = new Date(2001, 1 - 1, 1); 1600 equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); 1601 date = new Date(2001, 1 - 1, 7); 1602 equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); 1603 date = new Date(2001, 1 - 1, 8); 1604 equals($.datepicker.iso8601Week(date), 2, 'ISO 8601 week ' + date); 1605 date = new Date(2003, 12 - 1, 28); 1606 equals($.datepicker.iso8601Week(date), 52, 'ISO 8601 week ' + date); 1607 date = new Date(2003, 12 - 1, 29); 1608 equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); 1609 date = new Date(2004, 1 - 1, 4); 1610 equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); 1611 date = new Date(2004, 1 - 1, 5); 1612 equals($.datepicker.iso8601Week(date), 2, 'ISO 8601 week ' + date); 1613 date = new Date(2009, 12 - 1, 28); 1614 equals($.datepicker.iso8601Week(date), 53, 'ISO 8601 week ' + date); 1615 date = new Date(2010, 1 - 1, 3); 1616 equals($.datepicker.iso8601Week(date), 53, 'ISO 8601 week ' + date); 1617 date = new Date(2010, 1 - 1, 4); 1618 equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); 1619 date = new Date(2010, 1 - 1, 10); 1620 equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); 1621 }); 1622 1623 test('parseDate', function() { 1624 init('#inp'); 1625 ok($.datepicker.parseDate('d m y', '') == null, 'Parse date empty'); 1626 equalsDate($.datepicker.parseDate('d m y', '3 2 01'), 1627 new Date(2001, 2 - 1, 3), 'Parse date d m y'); 1628 equalsDate($.datepicker.parseDate('dd mm yy', '03 02 2001'), 1629 new Date(2001, 2 - 1, 3), 'Parse date dd mm yy'); 1630 equalsDate($.datepicker.parseDate('d m y', '13 12 01'), 1631 new Date(2001, 12 - 1, 13), 'Parse date d m y'); 1632 equalsDate($.datepicker.parseDate('dd mm yy', '13 12 2001'), 1633 new Date(2001, 12 - 1, 13), 'Parse date dd mm yy'); 1634 equalsDate($.datepicker.parseDate('y-o', '2001-34'), 1635 new Date(2001, 2 - 1, 3), 'Parse date y-o'); 1636 equalsDate($.datepicker.parseDate('yy-oo', '2001-347'), 1637 new Date(2001, 12 - 1, 13), 'Parse date yy oo'); 1638 equalsDate($.datepicker.parseDate('oo yy', '348 2004'), 1639 new Date(2004, 12 - 1, 13), 'Parse date oo-yy'); 1640 equalsDate($.datepicker.parseDate('D d M y', 'Sat 3 Feb 01'), 1641 new Date(2001, 2 - 1, 3), 'Parse date D d M y'); 1642 equalsDate($.datepicker.parseDate('d MM DD yy', '3 February Saturday 2001'), 1643 new Date(2001, 2 - 1, 3), 'Parse date dd MM DD yy'); 1644 equalsDate($.datepicker.parseDate('DD, MM d, yy', 'Saturday, February 3, 2001'), 1645 new Date(2001, 2 - 1, 3), 'Parse date DD, MM d, yy'); 1646 equalsDate($.datepicker.parseDate('\'day\' d \'of\' MM (\'\'DD\'\'), yy', 1647 'day 3 of February (\'Saturday\'), 2001'), new Date(2001, 2 - 1, 3), 1648 'Parse date \'day\' d \'of\' MM (\'\'DD\'\'), yy'); 1649 equalsDate($.datepicker.parseDate('y-m-d', '01-02-03'), 1650 new Date(2001, 2 - 1, 3), 'Parse date y-m-d - default cutoff'); 1651 equalsDate($.datepicker.parseDate('y-m-d', '51-02-03'), 1652 new Date(1951, 2 - 1, 3), 'Parse date y-m-d - default cutoff'); 1653 equalsDate($.datepicker.parseDate('y-m-d', '51-02-03', {shortYearCutoff: 80}), 1654 new Date(2051, 2 - 1, 3), 'Parse date y-m-d - cutoff 80'); 1655 equalsDate($.datepicker.parseDate('y-m-d', '51-02-03', {shortYearCutoff: '+60'}), 1656 new Date(2051, 2 - 1, 3), 'Parse date y-m-d - cutoff +60'); 1657 var fr = $.datepicker.regional['fr']; 1658 var settings = {dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames, 1659 monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames}; 1660 equalsDate($.datepicker.parseDate('D d M y', 'Lun 9 Avr 01', settings), 1661 new Date(2001, 4 - 1, 9), 'Parse date D M y with settings'); 1662 equalsDate($.datepicker.parseDate('d MM DD yy', '9 Avril Lundi 2001', settings), 1663 new Date(2001, 4 - 1, 9), 'Parse date d MM DD yy with settings'); 1664 equalsDate($.datepicker.parseDate('DD, MM d, yy', 'Lundi, Avril 9, 2001', settings), 1665 new Date(2001, 4 - 1, 9), 'Parse date DD, MM d, yy with settings'); 1666 equalsDate($.datepicker.parseDate('\'jour\' d \'de\' MM (\'\'DD\'\'), yy', 1667 'jour 9 de Avril (\'Lundi\'), 2001', settings), new Date(2001, 4 - 1, 9), 1668 'Parse date \'jour\' d \'de\' MM (\'\'DD\'\'), yy with settings'); 1669 }); 1670 1671 test('parseDateErrors', function() { 1672 init('#inp'); 1673 var expectError = function(expr, value, error) { 1674 try { 1675 expr(); 1676 ok(false, 'Parsed error ' + value); 1677 } 1678 catch (e) { 1679 equals(e, error, 'Parsed error ' + value); 1680 } 1681 }; 1682 expectError(function() { $.datepicker.parseDate(null, 'Sat 2 01'); }, 1683 'Sat 2 01', 'Invalid arguments'); 1684 expectError(function() { $.datepicker.parseDate('d m y', null); }, 1685 'null', 'Invalid arguments'); 1686 expectError(function() { $.datepicker.parseDate('d m y', 'Sat 2 01'); }, 1687 'Sat 2 01 - d m y', 'Missing number at position 0'); 1688 expectError(function() { $.datepicker.parseDate('dd mm yy', 'Sat 2 01'); }, 1689 'Sat 2 01 - dd mm yy', 'Missing number at position 0'); 1690 expectError(function() { $.datepicker.parseDate('d m y', '3 Feb 01'); }, 1691 '3 Feb 01 - d m y', 'Missing number at position 2'); 1692 expectError(function() { $.datepicker.parseDate('dd mm yy', '3 Feb 01'); }, 1693 '3 Feb 01 - dd mm yy', 'Missing number at position 2'); 1694 expectError(function() { $.datepicker.parseDate('d m y', '3 2 AD01'); }, 1695 '3 2 AD01 - d m y', 'Missing number at position 4'); 1696 expectError(function() { $.datepicker.parseDate('d m yy', '3 2 AD01'); }, 1697 '3 2 AD01 - dd mm yy', 'Missing number at position 4'); 1698 expectError(function() { $.datepicker.parseDate('y-o', '2001-D01'); }, 1699 '2001-D01 - y-o', 'Missing number at position 5'); 1700 expectError(function() { $.datepicker.parseDate('yy-oo', '2001-D01'); }, 1701 '2001-D01 - yy-oo', 'Missing number at position 5'); 1702 expectError(function() { $.datepicker.parseDate('D d M y', 'D7 3 Feb 01'); }, 1703 'D7 3 Feb 01 - D d M y', 'Unknown name at position 0'); 1704 expectError(function() { $.datepicker.parseDate('D d M y', 'Sat 3 M2 01'); }, 1705 'Sat 3 M2 01 - D d M y', 'Unknown name at position 6'); 1706 expectError(function() { $.datepicker.parseDate('DD, MM d, yy', 'Saturday- Feb 3, 2001'); }, 1707 'Saturday- Feb 3, 2001 - DD, MM d, yy', 'Unexpected literal at position 8'); 1708 expectError(function() { $.datepicker.parseDate('\'day\' d \'of\' MM (\'\'DD\'\'), yy', 1709 'day 3 of February ("Saturday"), 2001'); }, 1710 'day 3 of Mon2 ("Day7"), 2001', 'Unexpected literal at position 19'); 1711 expectError(function() { $.datepicker.parseDate('d m y', '29 2 01'); }, 1712 '29 2 01 - d m y', 'Invalid date'); 1713 var fr = $.datepicker.regional['fr']; 1714 var settings = {dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames, 1715 monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames}; 1716 expectError(function() { $.datepicker.parseDate('D d M y', 'Mon 9 Avr 01', settings); }, 1717 'Mon 9 Avr 01 - D d M y', 'Unknown name at position 0'); 1718 expectError(function() { $.datepicker.parseDate('D d M y', 'Lun 9 Apr 01', settings); }, 1719 'Lun 9 Apr 01 - D d M y', 'Unknown name at position 6'); 1720 }); 1721 1722 test('formatDate', function() { 1723 init('#inp'); 1724 equals($.datepicker.formatDate('d m y', new Date(2001, 2 - 1, 3)), 1725 '3 2 01', 'Format date d m y'); 1726 equals($.datepicker.formatDate('dd mm yy', new Date(2001, 2 - 1, 3)), 1727 '03 02 2001', 'Format date dd mm yy'); 1728 equals($.datepicker.formatDate('d m y', new Date(2001, 12 - 1, 13)), 1729 '13 12 01', 'Format date d m y'); 1730 equals($.datepicker.formatDate('dd mm yy', new Date(2001, 12 - 1, 13)), 1731 '13 12 2001', 'Format date dd mm yy'); 1732 equals($.datepicker.formatDate('yy-o', new Date(2001, 2 - 1, 3)), 1733 '2001-34', 'Format date yy-o'); 1734 equals($.datepicker.formatDate('yy-oo', new Date(2001, 2 - 1, 3)), 1735 '2001-034', 'Format date yy-oo'); 1736 equals($.datepicker.formatDate('D M y', new Date(2001, 2 - 1, 3)), 1737 'Sat Feb 01', 'Format date D M y'); 1738 equals($.datepicker.formatDate('DD MM yy', new Date(2001, 2 - 1, 3)), 1739 'Saturday February 2001', 'Format date DD MM yy'); 1740 equals($.datepicker.formatDate('DD, MM d, yy', new Date(2001, 2 - 1, 3)), 1741 'Saturday, February 3, 2001', 'Format date DD, MM d, yy'); 1742 equals($.datepicker.formatDate('\'day\' d \'of\' MM (\'\'DD\'\'), yy', 1743 new Date(2001, 2 - 1, 3)), 'day 3 of February (\'Saturday\'), 2001', 1744 'Format date \'day\' d \'of\' MM (\'\'DD\'\'), yy'); 1745 var fr = $.datepicker.regional['fr']; 1746 var settings = {dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames, 1747 monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames}; 1748 equals($.datepicker.formatDate('D M y', new Date(2001, 4 - 1, 9), settings), 1749 'Lun Avr 01', 'Format date D M y with settings'); 1750 equals($.datepicker.formatDate('DD MM yy', new Date(2001, 4 - 1, 9), settings), 1751 'Lundi Avril 2001', 'Format date DD MM yy with settings'); 1752 equals($.datepicker.formatDate('DD, MM d, yy', new Date(2001, 4 - 1, 9), settings), 1753 'Lundi, Avril 9, 2001', 'Format date DD, MM d, yy with settings'); 1754 equals($.datepicker.formatDate('\'jour\' d \'de\' MM (\'\'DD\'\'), yy', 1755 new Date(2001, 4 - 1, 9), settings), 'jour 9 de Avril (\'Lundi\'), 2001', 1756 'Format date \'jour\' d \'de\' MM (\'\'DD\'\'), yy with settings'); 1757 }); 1758 1759 })(jQuery);
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Thu Mar 24 11:18:33 2011 | Cross-referenced by PHPXref 0.7 |