source: main/trunk/greenstone3/web/interfaces/oran/js/jquery-ui-1.8rc1/tests/unit/datepicker/datepicker_options.js@ 24245

Last change on this file since 24245 was 24245, checked in by sjb48, 13 years ago

Oran code for supporting format changes to document.

  • Property svn:executable set to *
File size: 45.6 KB
Line 
1/*
2 * datepicker_options.js
3 */
4
5(function($) {
6
7module("datepicker: options", {
8 teardown: function() {
9 stop();
10 setTimeout(start, 13);
11 }
12});
13
14test('setDefaults', function() {
15 var inp = init('#inp');
16 equals($.datepicker._defaults.showOn, 'focus', 'Initial showOn');
17 $.datepicker.setDefaults({showOn: 'button'});
18 equals($.datepicker._defaults.showOn, 'button', 'Change default showOn');
19 $.datepicker.setDefaults({showOn: 'focus'});
20 equals($.datepicker._defaults.showOn, 'focus', 'Restore showOn');
21});
22
23test('option', function() {
24 var inp = init('#inp');
25 var inst = $.data(inp[0], PROP_NAME);
26 // Set option
27 equals(inst.settings.showOn, null, 'Initial setting showOn');
28 equals($.datepicker._get(inst, 'showOn'), 'focus', 'Initial instance showOn');
29 equals($.datepicker._defaults.showOn, 'focus', 'Initial default showOn');
30 inp.datepicker('option', 'showOn', 'button');
31 equals(inst.settings.showOn, 'button', 'Change setting showOn');
32 equals($.datepicker._get(inst, 'showOn'), 'button', 'Change instance showOn');
33 equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn');
34 inp.datepicker('option', {showOn: 'both'});
35 equals(inst.settings.showOn, 'both', 'Change setting showOn');
36 equals($.datepicker._get(inst, 'showOn'), 'both', 'Change instance showOn');
37 equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn');
38 inp.datepicker('option', 'showOn', undefined);
39 equals(inst.settings.showOn, null, 'Clear setting showOn');
40 equals($.datepicker._get(inst, 'showOn'), 'focus', 'Restore instance showOn');
41 equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn');
42 // Get option
43 inp = init('#inp');
44 equals(inp.datepicker('option', 'showOn'), 'focus', 'Initial setting showOn');
45 inp.datepicker('option', 'showOn', 'button');
46 equals(inp.datepicker('option', 'showOn'), 'button', 'Change instance showOn');
47 inp.datepicker('option', 'showOn', undefined);
48 equals(inp.datepicker('option', 'showOn'), 'focus', 'Reset instance showOn');
49 same(inp.datepicker('option', 'all'), {showAnim: ''}, 'Get instance settings');
50 same(inp.datepicker('option', 'defaults'), $.datepicker._defaults,
51 'Get default settings');
52});
53
54test('change', function() {
55 var inp = init('#inp');
56 var inst = $.data(inp[0], PROP_NAME);
57 equals(inst.settings.showOn, null, 'Initial setting showOn');
58 equals($.datepicker._get(inst, 'showOn'), 'focus', 'Initial instance showOn');
59 equals($.datepicker._defaults.showOn, 'focus', 'Initial default showOn');
60 inp.datepicker('change', 'showOn', 'button');
61 equals(inst.settings.showOn, 'button', 'Change setting showOn');
62 equals($.datepicker._get(inst, 'showOn'), 'button', 'Change instance showOn');
63 equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn');
64 inp.datepicker('change', {showOn: 'both'});
65 equals(inst.settings.showOn, 'both', 'Change setting showOn');
66 equals($.datepicker._get(inst, 'showOn'), 'both', 'Change instance showOn');
67 equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn');
68 inp.datepicker('change', 'showOn', undefined);
69 equals(inst.settings.showOn, null, 'Clear setting showOn');
70 equals($.datepicker._get(inst, 'showOn'), 'focus', 'Restore instance showOn');
71 equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn');
72});
73
74test('invocation', function() {
75 var inp = init('#inp');
76 var dp = $('#ui-datepicker-div');
77 var body = $('body');
78 // On focus
79 var button = inp.siblings('button');
80 ok(button.length == 0, 'Focus - button absent');
81 var image = inp.siblings('img');
82 ok(image.length == 0, 'Focus - image absent');
83 inp.focus();
84 ok(dp.is(':visible'), 'Focus - rendered on focus');
85 inp.simulate('keydown', {keyCode: $.simulate.VK_ESC});
86 ok(!dp.is(':visible'), 'Focus - hidden on exit');
87 inp.focus();
88 ok(dp.is(':visible'), 'Focus - rendered on focus');
89 body.simulate('mousedown', {});
90 ok(!dp.is(':visible'), 'Focus - hidden on external click');
91 inp.datepicker('hide').datepicker('destroy');
92 // On button
93 inp = init('#inp', {showOn: 'button', buttonText: 'Popup'});
94 ok(!dp.is(':visible'), 'Button - initially hidden');
95 button = inp.siblings('button');
96 image = inp.siblings('img');
97 ok(button.length == 1, 'Button - button present');
98 ok(image.length == 0, 'Button - image absent');
99 equals(button.text(), 'Popup', 'Button - button text');
100 inp.focus();
101 ok(!dp.is(':visible'), 'Button - not rendered on focus');
102 button.click();
103 ok(dp.is(':visible'), 'Button - rendered on button click');
104 button.click();
105 ok(!dp.is(':visible'), 'Button - hidden on second button click');
106 inp.datepicker('hide').datepicker('destroy');
107 // On image button
108 inp = init('#inp', {showOn: 'button', buttonImageOnly: true,
109 buttonImage: 'img/calendar.gif', buttonText: 'Cal'});
110 ok(!dp.is(':visible'), 'Image button - initially hidden');
111 button = inp.siblings('button');
112 ok(button.length == 0, 'Image button - button absent');
113 image = inp.siblings('img');
114 ok(image.length == 1, 'Image button - image present');
115 equals(image.attr('src'), 'img/calendar.gif', 'Image button - image source');
116 equals(image.attr('title'), 'Cal', 'Image button - image text');
117 inp.focus();
118 ok(!dp.is(':visible'), 'Image button - not rendered on focus');
119 image.click();
120 ok(dp.is(':visible'), 'Image button - rendered on image click');
121 image.click();
122 ok(!dp.is(':visible'), 'Image button - hidden on second image click');
123 inp.datepicker('hide').datepicker('destroy');
124 // On both
125 inp = init('#inp', {showOn: 'both', buttonImage: 'img/calendar.gif'});
126 ok(!dp.is(':visible'), 'Both - initially hidden');
127 button = inp.siblings('button');
128 ok(button.length == 1, 'Both - button present');
129 image = inp.siblings('img');
130 ok(image.length == 0, 'Both - image absent');
131 image = button.children('img');
132 ok(image.length == 1, 'Both - button image present');
133 inp.focus();
134 ok(dp.is(':visible'), 'Both - rendered on focus');
135 body.simulate('mousedown', {});
136 ok(!dp.is(':visible'), 'Both - hidden on external click');
137 button.click();
138 ok(dp.is(':visible'), 'Both - rendered on button click');
139 button.click();
140 ok(!dp.is(':visible'), 'Both - hidden on second button click');
141 inp.datepicker('hide').datepicker('destroy');
142});
143
144test('otherMonths', function() {
145 var inp = init('#inp');
146 var pop = $('#ui-datepicker-div');
147 inp.val('06/01/2009').datepicker('show');
148 equals(pop.find('tbody').text(), '\u00a0123456789101112131415161718192021222324252627282930\u00a0\u00a0\u00a0\u00a0',
149 'Other months - none');
150 ok(pop.find('td:last *').length == 0, 'Other months - no content');
151 inp.datepicker('hide').datepicker('option', 'showOtherMonths', true).datepicker('show');
152 equals(pop.find('tbody').text(), '311234567891011121314151617181920212223242526272829301234',
153 'Other months - show');
154 ok(pop.find('td:last span').length == 1, 'Other months - span content');
155 inp.datepicker('hide').datepicker('option', 'selectOtherMonths', true).datepicker('show');
156 equals(pop.find('tbody').text(), '311234567891011121314151617181920212223242526272829301234',
157 'Other months - select');
158 ok(pop.find('td:last a').length == 1, 'Other months - link content');
159 inp.datepicker('hide').datepicker('option', 'showOtherMonths', false).datepicker('show');
160 equals(pop.find('tbody').text(), '\u00a0123456789101112131415161718192021222324252627282930\u00a0\u00a0\u00a0\u00a0',
161 'Other months - none');
162 ok(pop.find('td:last *').length == 0, 'Other months - no content');
163});
164
165test('defaultDate', function() {
166 var inp = init('#inp');
167 var date = new Date();
168 inp.val('').datepicker('show').
169 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
170 equalsDate(inp.datepicker('getDate'), date, 'Default date null');
171 // Numeric values
172 inp.datepicker('option', {defaultDate: -2}).
173 datepicker('hide').val('').datepicker('show').
174 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
175 date.setDate(date.getDate() - 2);
176 equalsDate(inp.datepicker('getDate'), date, 'Default date -2');
177 inp.datepicker('option', {defaultDate: 3}).
178 datepicker('hide').val('').datepicker('show').
179 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
180 date.setDate(date.getDate() + 5);
181 equalsDate(inp.datepicker('getDate'), date, 'Default date 3');
182 inp.datepicker('option', {defaultDate: 1 / 0}).
183 datepicker('hide').val('').datepicker('show').
184 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
185 date.setDate(date.getDate() - 3);
186 equalsDate(inp.datepicker('getDate'), date, 'Default date Infinity');
187 inp.datepicker('option', {defaultDate: 1 / 'a'}).
188 datepicker('hide').val('').datepicker('show').
189 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
190 equalsDate(inp.datepicker('getDate'), date, 'Default date NaN');
191 // String offset values
192 inp.datepicker('option', {defaultDate: '-1d'}).
193 datepicker('hide').val('').datepicker('show').
194 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
195 date.setDate(date.getDate() - 1);
196 equalsDate(inp.datepicker('getDate'), date, 'Default date -1d');
197 inp.datepicker('option', {defaultDate: '+3D'}).
198 datepicker('hide').val('').datepicker('show').
199 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
200 date.setDate(date.getDate() + 4);
201 equalsDate(inp.datepicker('getDate'), date, 'Default date +3D');
202 inp.datepicker('option', {defaultDate: ' -2 w '}).
203 datepicker('hide').val('').datepicker('show').
204 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
205 date = new Date();
206 date.setDate(date.getDate() - 14);
207 equalsDate(inp.datepicker('getDate'), date, 'Default date -2 w');
208 inp.datepicker('option', {defaultDate: '+1 W'}).
209 datepicker('hide').val('').datepicker('show').
210 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
211 date.setDate(date.getDate() + 21);
212 equalsDate(inp.datepicker('getDate'), date, 'Default date +1 W');
213 inp.datepicker('option', {defaultDate: ' -1 m '}).
214 datepicker('hide').val('').datepicker('show').
215 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
216 date = addMonths(new Date(), -1);
217 equalsDate(inp.datepicker('getDate'), date, 'Default date -1 m');
218 inp.datepicker('option', {defaultDate: '+2M'}).
219 datepicker('hide').val('').datepicker('show').
220 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
221 date = addMonths(new Date(), 2);
222 equalsDate(inp.datepicker('getDate'), date, 'Default date +2M');
223 inp.datepicker('option', {defaultDate: '-2y'}).
224 datepicker('hide').val('').datepicker('show').
225 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
226 date = new Date();
227 date.setFullYear(date.getFullYear() - 2);
228 equalsDate(inp.datepicker('getDate'), date, 'Default date -2y');
229 inp.datepicker('option', {defaultDate: '+1 Y '}).
230 datepicker('hide').val('').datepicker('show').
231 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
232 date.setFullYear(date.getFullYear() + 3);
233 equalsDate(inp.datepicker('getDate'), date, 'Default date +1 Y');
234 inp.datepicker('option', {defaultDate: '+1M +10d'}).
235 datepicker('hide').val('').datepicker('show').
236 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
237 date = addMonths(new Date(), 1);
238 date.setDate(date.getDate() + 10);
239 equalsDate(inp.datepicker('getDate'), date, 'Default date +1M +10d');
240 // String date values
241 inp.datepicker('option', {defaultDate: '07/04/2007'}).
242 datepicker('hide').val('').datepicker('show').
243 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
244 date = new Date(2007, 7 - 1, 4);
245 equalsDate(inp.datepicker('getDate'), date, 'Default date 07/04/2007');
246 inp.datepicker('option', {dateFormat: 'yy-mm-dd', defaultDate: '2007-04-02'}).
247 datepicker('hide').val('').datepicker('show').
248 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
249 date = new Date(2007, 4 - 1, 2);
250 equalsDate(inp.datepicker('getDate'), date, 'Default date 2007-04-02');
251 // Date value
252 date = new Date(2007, 1 - 1, 26);
253 inp.datepicker('option', {dateFormat: 'mm/dd/yy', defaultDate: date}).
254 datepicker('hide').val('').datepicker('show').
255 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
256 equalsDate(inp.datepicker('getDate'), date, 'Default date 01/26/2007');
257});
258
259test('miscellaneous', function() {
260 var dp = $('#ui-datepicker-div');
261 var inp = init('#inp');
262 // Year range
263 var genRange = function(start, offset) {
264 var range = '';
265 for (var i = start; i < start + offset; i++) {
266 range += i;
267 }
268 return range;
269 };
270 var curYear = new Date().getFullYear();
271 inp.val('02/04/2008').datepicker('show');
272 equals(dp.find('.ui-datepicker-year').text(), '2008', 'Year range - read-only default');
273 inp.datepicker('hide').datepicker('option', {changeYear: true}).datepicker('show');
274 equals(dp.find('.ui-datepicker-year').text(), genRange(2008 - 10, 21), 'Year range - changeable default');
275 inp.datepicker('hide').datepicker('option', {yearRange: 'c-6:c+2', changeYear: true}).datepicker('show');
276 equals(dp.find('.ui-datepicker-year').text(), genRange(2008 - 6, 9), 'Year range - c-6:c+2');
277 inp.datepicker('hide').datepicker('option', {yearRange: '2000:2010', changeYear: true}).datepicker('show');
278 equals(dp.find('.ui-datepicker-year').text(), genRange(2000, 11), 'Year range - 2000:2010');
279 inp.datepicker('hide').datepicker('option', {yearRange: '-5:+3', changeYear: true}).datepicker('show');
280 equals(dp.find('.ui-datepicker-year').text(), genRange(curYear - 5, 9), 'Year range - -5:+3');
281 inp.datepicker('hide').datepicker('option', {yearRange: '2000:-5', changeYear: true}).datepicker('show');
282 equals(dp.find('.ui-datepicker-year').text(), genRange(2000, curYear - 2004), 'Year range - 2000:-5');
283 inp.datepicker('hide').datepicker('option', {yearRange: '', changeYear: true}).datepicker('show');
284 equals(dp.find('.ui-datepicker-year').text(), genRange(curYear, 1), 'Year range - -6:+2');
285
286 // Navigation as date format
287 inp.datepicker('option', {showButtonPanel: true});
288 equals(dp.find('.ui-datepicker-prev').text(), 'Prev', 'Navigation prev - default');
289 equals(dp.find('.ui-datepicker-current').text(), 'Today', 'Navigation current - default');
290 equals(dp.find('.ui-datepicker-next').text(), 'Next', 'Navigation next - default');
291 inp.datepicker('hide').datepicker('option', {navigationAsDateFormat: true, prevText: '< M', currentText: 'MM', nextText: 'M >'}).
292 val('02/04/2008').datepicker('show');
293 var longNames = $.datepicker.regional[''].monthNames;
294 var shortNames = $.datepicker.regional[''].monthNamesShort;
295 var date = new Date();
296 equals(dp.find('.ui-datepicker-prev').text(), '< ' + shortNames[0], 'Navigation prev - as date format');
297 equals(dp.find('.ui-datepicker-current').text(),
298 longNames[date.getMonth()], 'Navigation current - as date format');
299 equals(dp.find('.ui-datepicker-next').text(),
300 shortNames[2] + ' >', 'Navigation next - as date format');
301 inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN});
302 equals(dp.find('.ui-datepicker-prev').text(),
303 '< ' + shortNames[1], 'Navigation prev - as date format + pgdn');
304 equals(dp.find('.ui-datepicker-current').text(),
305 longNames[date.getMonth()], 'Navigation current - as date format + pgdn');
306 equals(dp.find('.ui-datepicker-next').text(),
307 shortNames[3] + ' >', 'Navigation next - as date format + pgdn');
308 inp.datepicker('hide').datepicker('option', {gotoCurrent: true}).
309 val('02/04/2008').datepicker('show');
310 equals(dp.find('.ui-datepicker-prev').text(),
311 '< ' + shortNames[0], 'Navigation prev - as date format + goto current');
312 equals(dp.find('.ui-datepicker-current').text(),
313 longNames[1], 'Navigation current - as date format + goto current');
314 equals(dp.find('.ui-datepicker-next').text(),
315 shortNames[2] + ' >', 'Navigation next - as date format + goto current');
316});
317
318test('minMax', function() {
319 var inp = init('#inp');
320 var lastYear = new Date(2007, 6 - 1, 4);
321 var nextYear = new Date(2009, 6 - 1, 4);
322 var minDate = new Date(2008, 2 - 1, 29);
323 var maxDate = new Date(2008, 12 - 1, 7);
324 inp.val('06/04/2008').datepicker('show');
325 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}).
326 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
327 equalsDate(inp.datepicker('getDate'), lastYear,
328 'Min/max - null, null - ctrl+pgup');
329 inp.val('06/04/2008').datepicker('show');
330 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}).
331 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
332 equalsDate(inp.datepicker('getDate'), nextYear,
333 'Min/max - null, null - ctrl+pgdn');
334 inp.datepicker('option', {minDate: minDate}).
335 datepicker('hide').val('06/04/2008').datepicker('show');
336 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}).
337 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
338 equalsDate(inp.datepicker('getDate'), minDate,
339 'Min/max - 02/29/2008, null - ctrl+pgup');
340 inp.val('06/04/2008').datepicker('show');
341 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}).
342 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
343 equalsDate(inp.datepicker('getDate'), nextYear,
344 'Min/max - 02/29/2008, null - ctrl+pgdn');
345 inp.datepicker('option', {maxDate: maxDate}).
346 datepicker('hide').val('06/04/2008').datepicker('show');
347 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}).
348 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
349 equalsDate(inp.datepicker('getDate'), minDate,
350 'Min/max - 02/29/2008, 12/07/2008 - ctrl+pgup');
351 inp.val('06/04/2008').datepicker('show');
352 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}).
353 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
354 equalsDate(inp.datepicker('getDate'), maxDate,
355 'Min/max - 02/29/2008, 12/07/2008 - ctrl+pgdn');
356 inp.datepicker('option', {minDate: null}).
357 datepicker('hide').val('06/04/2008').datepicker('show');
358 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}).
359 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
360 equalsDate(inp.datepicker('getDate'), lastYear,
361 'Min/max - null, 12/07/2008 - ctrl+pgup');
362 inp.val('06/04/2008').datepicker('show');
363 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}).
364 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
365 equalsDate(inp.datepicker('getDate'), maxDate,
366 'Min/max - null, 12/07/2008 - ctrl+pgdn');
367 // Relative dates
368 var date = new Date();
369 date.setDate(date.getDate() - 7);
370 inp.datepicker('option', {minDate: '-1w', maxDate: '+1 M +10 D '}).
371 datepicker('hide').val('').datepicker('show');
372 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}).
373 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
374 equalsDate(inp.datepicker('getDate'), date,
375 'Min/max - -1w, +1 M +10 D - ctrl+pgup');
376 date = addMonths(new Date(), 1);
377 date.setDate(date.getDate() + 10);
378 inp.val('').datepicker('show');
379 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}).
380 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
381 equalsDate(inp.datepicker('getDate'), date,
382 'Min/max - -1w, +1 M +10 D - ctrl+pgdn');
383 // With existing date
384 inp = init('#inp');
385 inp.val('06/04/2008').datepicker('option', {minDate: minDate});
386 equalsDate(inp.datepicker('getDate'), new Date(2008, 6 - 1, 4), 'Min/max - setDate > min');
387 inp.datepicker('option', {minDate: null}).val('01/04/2008').datepicker('option', {minDate: minDate});
388 equalsDate(inp.datepicker('getDate'), minDate, 'Min/max - setDate < min');
389 inp.datepicker('option', {minDate: null}).val('06/04/2008').datepicker('option', {maxDate: maxDate});
390 equalsDate(inp.datepicker('getDate'), new Date(2008, 6 - 1, 4), 'Min/max - setDate < max');
391 inp.datepicker('option', {maxDate: null}).val('01/04/2009').datepicker('option', {maxDate: maxDate});
392 equalsDate(inp.datepicker('getDate'), maxDate, 'Min/max - setDate > max');
393 inp.datepicker('option', {maxDate: null}).val('01/04/2008').datepicker('option', {minDate: minDate, maxDate: maxDate});
394 equalsDate(inp.datepicker('getDate'), minDate, 'Min/max - setDate < min');
395 inp.datepicker('option', {maxDate: null}).val('06/04/2008').datepicker('option', {minDate: minDate, maxDate: maxDate});
396 equalsDate(inp.datepicker('getDate'), new Date(2008, 6 - 1, 4), 'Min/max - setDate > min, < max');
397 inp.datepicker('option', {maxDate: null}).val('01/04/2009').datepicker('option', {minDate: minDate, maxDate: maxDate});
398 equalsDate(inp.datepicker('getDate'), maxDate, 'Min/max - setDate > max');
399});
400
401test('setDate', function() {
402 var inp = init('#inp');
403 var date1 = new Date(2008, 6 - 1, 4);
404 var date2 = new Date();
405 ok(inp.datepicker('getDate') == null, 'Set date - default');
406 inp.datepicker('setDate', date1);
407 equalsDate(inp.datepicker('getDate'), date1, 'Set date - 2008-06-04');
408 date1 = new Date();
409 date1.setDate(date1.getDate() + 7);
410 inp.datepicker('setDate', +7);
411 equalsDate(inp.datepicker('getDate'), date1, 'Set date - +7');
412 date2.setFullYear(date2.getFullYear() + 2);
413 inp.datepicker('setDate', '+2y');
414 equalsDate(inp.datepicker('getDate'), date2, 'Set date - +2y');
415 inp.datepicker('setDate', date1, date2);
416 equalsDate(inp.datepicker('getDate'), date1, 'Set date - two dates');
417 inp.datepicker('setDate');
418 ok(inp.datepicker('getDate') == null, 'Set date - null');
419 // Relative to current date
420 date1 = new Date();
421 date1.setDate(date1.getDate() + 7);
422 inp.datepicker('setDate', 'c +7');
423 equalsDate(inp.datepicker('getDate'), date1, 'Set date - c +7');
424 date1.setDate(date1.getDate() + 7);
425 inp.datepicker('setDate', 'c+7');
426 equalsDate(inp.datepicker('getDate'), date1, 'Set date - c+7');
427 date1.setDate(date1.getDate() - 21);
428 inp.datepicker('setDate', 'c -3 w');
429 equalsDate(inp.datepicker('getDate'), date1, 'Set date - c -3 w');
430 // Inline
431 var inl = init('#inl');
432 date1 = new Date(2008, 6 - 1, 4);
433 date2 = new Date();
434 equalsDate(inl.datepicker('getDate'), date2, 'Set date inline - default');
435 inl.datepicker('setDate', date1);
436 equalsDate(inl.datepicker('getDate'), date1, 'Set date inline - 2008-06-04');
437 date1 = new Date();
438 date1.setDate(date1.getDate() + 7);
439 inl.datepicker('setDate', +7);
440 equalsDate(inl.datepicker('getDate'), date1, 'Set date inline - +7');
441 date2.setFullYear(date2.getFullYear() + 2);
442 inl.datepicker('setDate', '+2y');
443 equalsDate(inl.datepicker('getDate'), date2, 'Set date inline - +2y');
444 inl.datepicker('setDate', date1, date2);
445 equalsDate(inl.datepicker('getDate'), date1, 'Set date inline - two dates');
446 inl.datepicker('setDate');
447 ok(inl.datepicker('getDate') == null, 'Set date inline - null');
448 // Alternate field
449 var alt = $('#alt');
450 inp.datepicker('option', {altField: '#alt', altFormat: 'yy-mm-dd'});
451 date1 = new Date(2008, 6 - 1, 4);
452 inp.datepicker('setDate', date1);
453 equals(inp.val(), '06/04/2008', 'Set date alternate - 06/04/2008');
454 equals(alt.val(), '2008-06-04', 'Set date alternate - 2008-06-04');
455 // With minimum/maximum
456 inp = init('#inp');
457 date1 = new Date(2008, 1 - 1, 4);
458 date2 = new Date(2008, 6 - 1, 4);
459 var minDate = new Date(2008, 2 - 1, 29);
460 var maxDate = new Date(2008, 3 - 1, 28);
461 inp.val('').datepicker('option', {minDate: minDate}).datepicker('setDate', date2);
462 equalsDate(inp.datepicker('getDate'), date2, 'Set date min/max - setDate > min');
463 inp.datepicker('setDate', date1);
464 equalsDate(inp.datepicker('getDate'), minDate, 'Set date min/max - setDate < min');
465 inp.val('').datepicker('option', {maxDate: maxDate, minDate: null}).datepicker('setDate', date1);
466 equalsDate(inp.datepicker('getDate'), date1, 'Set date min/max - setDate < max');
467 inp.datepicker('setDate', date2);
468 equalsDate(inp.datepicker('getDate'), maxDate, 'Set date min/max - setDate > max');
469 inp.val('').datepicker('option', {minDate: minDate}).datepicker('setDate', date1);
470 equalsDate(inp.datepicker('getDate'), minDate, 'Set date min/max - setDate < min');
471 inp.datepicker('setDate', date2);
472 equalsDate(inp.datepicker('getDate'), maxDate, 'Set date min/max - setDate > max');
473});
474
475test('altField', function() {
476 var inp = init('#inp');
477 var alt = $('#alt');
478 // No alternate field set
479 alt.val('');
480 inp.val('06/04/2008').datepicker('show');
481 inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER});
482 equals(inp.val(), '06/04/2008', 'Alt field - dp - enter');
483 equals(alt.val(), '', 'Alt field - alt not set');
484 // Alternate field set
485 alt.val('');
486 inp.datepicker('option', {altField: '#alt', altFormat: 'yy-mm-dd'}).
487 val('06/04/2008').datepicker('show');
488 inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER});
489 equals(inp.val(), '06/04/2008', 'Alt field - dp - enter');
490 equals(alt.val(), '2008-06-04', 'Alt field - alt - enter');
491 // Move from initial date
492 alt.val('');
493 inp.val('06/04/2008').datepicker('show');
494 inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}).
495 simulate('keydown', {keyCode: $.simulate.VK_ENTER});
496 equals(inp.val(), '07/04/2008', 'Alt field - dp - pgdn');
497 equals(alt.val(), '2008-07-04', 'Alt field - alt - pgdn');
498 // Alternate field set - closed
499 alt.val('');
500 inp.val('06/04/2008').datepicker('show');
501 inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}).
502 simulate('keydown', {keyCode: $.simulate.VK_ESC});
503 equals(inp.val(), '06/04/2008', 'Alt field - dp - pgdn/esc');
504 equals(alt.val(), '', 'Alt field - alt - pgdn/esc');
505 // Clear date and alternate
506 alt.val('');
507 inp.val('06/04/2008').datepicker('show');
508 inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_END});
509 equals(inp.val(), '', 'Alt field - dp - ctrl+end');
510 equals(alt.val(), '', 'Alt field - alt - ctrl+end');
511 // Verify alt field is updated on keyup
512 alt.val('');
513 inp.val('06/04/200').datepicker('show');
514 inp.simulate('keydown', {charCode: '8'.charCodeAt(0)});
515 inp.simulate('keypress', {charCode: '8'.charCodeAt(0)});
516 inp.simulate('keyup', {charCode: '8'.charCodeAt(0)});
517 equals(inp.val(), '06/04/2008', 'Alt field - dp - manual entry');
518 equals(alt.val(), '2008-06-04', 'Alt field - manual entry');
519 // Verify alt field is not updated on keyup if date is invalid
520 inp.val('12/04');
521 inp.simulate('keydown', {charCode: '/'.charCodeAt(0)});
522 inp.simulate('keypress', {charCode: '/'.charCodeAt(0)});
523 inp.simulate('keyup', {charCode: '/'.charCodeAt(0)});
524 equals(inp.val(), '12/04/', 'Alt field - dp - manual entry incomplete');
525 equals(alt.val(), '2008-06-04', 'Alt field - manual entry - not updated');
526});
527
528test('autoSize', function() {
529 var inp = init('#inp');
530 equals(inp.attr('size'), 0, 'Auto size - default');
531 inp.datepicker('option', 'autoSize', true);
532 equals(inp.attr('size'), 10, 'Auto size - mm/dd/yy');
533 inp.datepicker('option', 'dateFormat', 'm/d/yy');
534 equals(inp.attr('size'), 10, 'Auto size - m/d/yy');
535 inp.datepicker('option', 'dateFormat', 'D M d yy');
536 equals(inp.attr('size'), 15, 'Auto size - D M d yy');
537 inp.datepicker('option', 'dateFormat', 'DD, MM dd, yy');
538 equals(inp.attr('size'), 29, 'Auto size - DD, MM dd, yy');
539 inp.removeAttr('size');
540 // French
541 inp.datepicker('option', $.extend({autoSize: false}, $.datepicker.regional['fr']));
542 equals(inp.attr('size'), 0, 'Auto size - fr - default');
543 inp.datepicker('option', 'autoSize', true);
544 equals(inp.attr('size'), 10, 'Auto size - fr - dd/mm/yy');
545 inp.datepicker('option', 'dateFormat', 'm/d/yy');
546 equals(inp.attr('size'), 10, 'Auto size - fr - m/d/yy');
547 inp.datepicker('option', 'dateFormat', 'D M d yy');
548 equals(inp.attr('size'), 15, 'Auto size - fr - D M d yy');
549 inp.datepicker('option', 'dateFormat', 'DD, MM dd, yy');
550 equals(inp.attr('size'), 28, 'Auto size - fr - DD, MM dd, yy');
551 inp.removeAttr('size');
552 // Hebrew
553 inp.datepicker('option', $.extend({autoSize: false}, $.datepicker.regional['he']));
554 equals(inp.attr('size'), 0, 'Auto size - he - default');
555 inp.datepicker('option', 'autoSize', true);
556 equals(inp.attr('size'), 10, 'Auto size - he - dd/mm/yy');
557 inp.datepicker('option', 'dateFormat', 'm/d/yy');
558 equals(inp.attr('size'), 10, 'Auto size - he - m/d/yy');
559 inp.datepicker('option', 'dateFormat', 'D M d yy');
560 equals(inp.attr('size'), 14, 'Auto size - he - D M d yy');
561 inp.datepicker('option', 'dateFormat', 'DD, MM dd, yy');
562 equals(inp.attr('size'), 23, 'Auto size - he - DD, MM dd, yy');
563 inp.removeAttr('size');
564});
565
566test('daylightSaving', function() {
567 var inp = init('#inp');
568 var dp = $('#ui-datepicker-div');
569 ok(true, 'Daylight saving - ' + new Date());
570 // Australia, Sydney - AM change, southern hemisphere
571 inp.val('04/01/2008').datepicker('show');
572 $('.ui-datepicker-calendar td:eq(6) a', dp).simulate('click');
573 equals(inp.val(), '04/05/2008', 'Daylight saving - Australia 04/05/2008');
574 inp.val('04/01/2008').datepicker('show');
575 $('.ui-datepicker-calendar td:eq(7) a', dp).simulate('click');
576 equals(inp.val(), '04/06/2008', 'Daylight saving - Australia 04/06/2008');
577 inp.val('04/01/2008').datepicker('show');
578 $('.ui-datepicker-calendar td:eq(8) a', dp).simulate('click');
579 equals(inp.val(), '04/07/2008', 'Daylight saving - Australia 04/07/2008');
580 inp.val('10/01/2008').datepicker('show');
581 $('.ui-datepicker-calendar td:eq(6) a', dp).simulate('click');
582 equals(inp.val(), '10/04/2008', 'Daylight saving - Australia 10/04/2008');
583 inp.val('10/01/2008').datepicker('show');
584 $('.ui-datepicker-calendar td:eq(7) a', dp).simulate('click');
585 equals(inp.val(), '10/05/2008', 'Daylight saving - Australia 10/05/2008');
586 inp.val('10/01/2008').datepicker('show');
587 $('.ui-datepicker-calendar td:eq(8) a', dp).simulate('click');
588 equals(inp.val(), '10/06/2008', 'Daylight saving - Australia 10/06/2008');
589 // Brasil, Brasilia - midnight change, southern hemisphere
590 inp.val('02/01/2008').datepicker('show');
591 $('.ui-datepicker-calendar td:eq(20) a', dp).simulate('click');
592 equals(inp.val(), '02/16/2008', 'Daylight saving - Brasil 02/16/2008');
593 inp.val('02/01/2008').datepicker('show');
594 $('.ui-datepicker-calendar td:eq(21) a', dp).simulate('click');
595 equals(inp.val(), '02/17/2008', 'Daylight saving - Brasil 02/17/2008');
596 inp.val('02/01/2008').datepicker('show');
597 $('.ui-datepicker-calendar td:eq(22) a', dp).simulate('click');
598 equals(inp.val(), '02/18/2008', 'Daylight saving - Brasil 02/18/2008');
599 inp.val('10/01/2008').datepicker('show');
600 $('.ui-datepicker-calendar td:eq(13) a', dp).simulate('click');
601 equals(inp.val(), '10/11/2008', 'Daylight saving - Brasil 10/11/2008');
602 inp.val('10/01/2008').datepicker('show');
603 $('.ui-datepicker-calendar td:eq(14) a', dp).simulate('click');
604 equals(inp.val(), '10/12/2008', 'Daylight saving - Brasil 10/12/2008');
605 inp.val('10/01/2008').datepicker('show');
606 $('.ui-datepicker-calendar td:eq(15) a', dp).simulate('click');
607 equals(inp.val(), '10/13/2008', 'Daylight saving - Brasil 10/13/2008');
608 // Lebanon, Beirut - midnight change, northern hemisphere
609 inp.val('03/01/2008').datepicker('show');
610 $('.ui-datepicker-calendar td:eq(34) a', dp).simulate('click');
611 equals(inp.val(), '03/29/2008', 'Daylight saving - Lebanon 03/29/2008');
612 inp.val('03/01/2008').datepicker('show');
613 $('.ui-datepicker-calendar td:eq(35) a', dp).simulate('click');
614 equals(inp.val(), '03/30/2008', 'Daylight saving - Lebanon 03/30/2008');
615 inp.val('03/01/2008').datepicker('show');
616 $('.ui-datepicker-calendar td:eq(36) a', dp).simulate('click');
617 equals(inp.val(), '03/31/2008', 'Daylight saving - Lebanon 03/31/2008');
618 inp.val('10/01/2008').datepicker('show');
619 $('.ui-datepicker-calendar td:eq(27) a', dp).simulate('click');
620 equals(inp.val(), '10/25/2008', 'Daylight saving - Lebanon 10/25/2008');
621 inp.val('10/01/2008').datepicker('show');
622 $('.ui-datepicker-calendar td:eq(28) a', dp).simulate('click');
623 equals(inp.val(), '10/26/2008', 'Daylight saving - Lebanon 10/26/2008');
624 inp.val('10/01/2008').datepicker('show');
625 $('.ui-datepicker-calendar td:eq(29) a', dp).simulate('click');
626 equals(inp.val(), '10/27/2008', 'Daylight saving - Lebanon 10/27/2008');
627 // US, Eastern - AM change, northern hemisphere
628 inp.val('03/01/2008').datepicker('show');
629 $('.ui-datepicker-calendar td:eq(13) a', dp).simulate('click');
630 equals(inp.val(), '03/08/2008', 'Daylight saving - US 03/08/2008');
631 inp.val('03/01/2008').datepicker('show');
632 $('.ui-datepicker-calendar td:eq(14) a', dp).simulate('click');
633 equals(inp.val(), '03/09/2008', 'Daylight saving - US 03/09/2008');
634 inp.val('03/01/2008').datepicker('show');
635 $('.ui-datepicker-calendar td:eq(15) a', dp).simulate('click');
636 equals(inp.val(), '03/10/2008', 'Daylight saving - US 03/10/2008');
637 inp.val('11/01/2008').datepicker('show');
638 $('.ui-datepicker-calendar td:eq(6) a', dp).simulate('click');
639 equals(inp.val(), '11/01/2008', 'Daylight saving - US 11/01/2008');
640 inp.val('11/01/2008').datepicker('show');
641 $('.ui-datepicker-calendar td:eq(7) a', dp).simulate('click');
642 equals(inp.val(), '11/02/2008', 'Daylight saving - US 11/02/2008');
643 inp.val('11/01/2008').datepicker('show');
644 $('.ui-datepicker-calendar td:eq(8) a', dp).simulate('click');
645 equals(inp.val(), '11/03/2008', 'Daylight saving - US 11/03/2008');
646});
647
648var beforeShowThis = null;
649var beforeShowInput = null;
650var beforeShowInst = null;
651
652function beforeAll(input, inst) {
653 beforeShowThis = this;
654 beforeShowInput = input;
655 beforeShowInst = inst;
656 return {currentText: 'Current'};
657}
658
659var beforeShowDayThis = null;
660var beforeShowDayOK = true;
661
662function beforeDay(date) {
663 beforeShowDayThis = this;
664 beforeShowDayOK &= (date > new Date(2008, 1 - 1, 26) &&
665 date < new Date(2008, 3 - 1, 6));
666 return [(date.getDate() % 2 == 0), (date.getDate() % 10 == 0 ? 'day10' : ''),
667 (date.getDate() % 3 == 0 ? 'Divisble by 3' : '')];
668}
669
670function calcWeek(date) {
671 var doy = date.getDate() + 6;
672 for (var m = date.getMonth() - 1; m >= 0; m--)
673 doy += $.datepicker._getDaysInMonth(date.getFullYear(), m);
674 // Simple count from 01/01 starting at week 1
675 return Math.floor(doy / 7);
676}
677
678test('callbacks', function() {
679 // Before show
680 var inp = init('#inp', {beforeShow: beforeAll});
681 var inst = $.data(inp[0], 'datepicker');
682 equals($.datepicker._get(inst, 'currentText'), 'Today', 'Before show - initial');
683 inp.val('02/04/2008').datepicker('show');
684 equals($.datepicker._get(inst, 'currentText'), 'Current', 'Before show - changed');
685 ok(beforeShowThis.id == inp[0].id, 'Before show - this OK');
686 ok(beforeShowInput.id == inp[0].id, 'Before show - input OK');
687 isObj(beforeShowInst, inst, 'Before show - inst OK');
688 inp.datepicker('hide').datepicker('destroy');
689 // Before show day
690 inp = init('#inp', {beforeShowDay: beforeDay});
691 var dp = $('#ui-datepicker-div');
692 inp.val('02/04/2008').datepicker('show');
693 ok(beforeShowDayThis.id == inp[0].id, 'Before show day - this OK');
694 ok(beforeShowDayOK, 'Before show day - dates OK');
695 var day20 = dp.find('.ui-datepicker-calendar td:contains("20")');
696 var day21 = dp.find('.ui-datepicker-calendar td:contains("21")');
697 ok(!day20.is('.ui-datepicker-unselectable'), 'Before show day - unselectable 20');
698 ok(day21.is('.ui-datepicker-unselectable'), 'Before show day - unselectable 21');
699 ok(day20.is('.day10'), 'Before show day - CSS 20');
700 ok(!day21.is('.day10'), 'Before show day - CSS 21');
701 ok(day20.attr('title') == '', 'Before show day - title 20');
702 ok(day21.attr('title') == 'Divisble by 3', 'Before show day - title 21');
703 inp.datepicker('hide').datepicker('destroy');
704});
705
706test('localisation', function() {
707 var inp = init('#inp', $.datepicker.regional['fr']);
708 inp.datepicker('option', {dateFormat: 'DD, d MM yy', showButtonPanel:true, changeMonth:true, changeYear:true}).val('').datepicker('show');
709 var dp = $('#ui-datepicker-div');
710 equals($('.ui-datepicker-close', dp).text(), 'Fermer', 'Localisation - close');
711 $('.ui-datepicker-close', dp).simulate('mouseover');
712 equals($('.ui-datepicker-prev', dp).text(), '<Préc', 'Localisation - previous');
713 equals($('.ui-datepicker-current', dp).text(), 'Courant', 'Localisation - current');
714 equals($('.ui-datepicker-next', dp).text(), 'Suiv>', 'Localisation - next');
715 var month = 0;
716 $('.ui-datepicker-month option', dp).each(function() {
717 equals($(this).text(), $.datepicker.regional['fr'].monthNamesShort[month],
718 'Localisation - month ' + month);
719 month++;
720 });
721 var day = 1;
722 $('.ui-datepicker-calendar th', dp).each(function() {
723 equals($(this).text(), $.datepicker.regional['fr'].dayNamesMin[day],
724 'Localisation - day ' + day);
725 day = (day + 1) % 7;
726 });
727 inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER});
728 var date = new Date();
729 equals(inp.val(), $.datepicker.regional['fr'].dayNames[date.getDay()] + ', ' +
730 date.getDate() + ' ' + $.datepicker.regional['fr'].monthNames[date.getMonth()] +
731 ' ' + date.getFullYear(), 'Localisation - formatting');
732});
733
734test('noWeekends', function() {
735 for (var i = 1; i <= 31; i++) {
736 var date = new Date(2001, 1 - 1, i);
737 isSet($.datepicker.noWeekends(date), [(i + 1) % 7 >= 2, ''],
738 'No weekends ' + date);
739 }
740});
741
742test('iso8601Week', function() {
743 var date = new Date(2000, 12 - 1, 31);
744 equals($.datepicker.iso8601Week(date), 52, 'ISO 8601 week ' + date);
745 date = new Date(2001, 1 - 1, 1);
746 equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date);
747 date = new Date(2001, 1 - 1, 7);
748 equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date);
749 date = new Date(2001, 1 - 1, 8);
750 equals($.datepicker.iso8601Week(date), 2, 'ISO 8601 week ' + date);
751 date = new Date(2003, 12 - 1, 28);
752 equals($.datepicker.iso8601Week(date), 52, 'ISO 8601 week ' + date);
753 date = new Date(2003, 12 - 1, 29);
754 equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date);
755 date = new Date(2004, 1 - 1, 4);
756 equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date);
757 date = new Date(2004, 1 - 1, 5);
758 equals($.datepicker.iso8601Week(date), 2, 'ISO 8601 week ' + date);
759 date = new Date(2009, 12 - 1, 28);
760 equals($.datepicker.iso8601Week(date), 53, 'ISO 8601 week ' + date);
761 date = new Date(2010, 1 - 1, 3);
762 equals($.datepicker.iso8601Week(date), 53, 'ISO 8601 week ' + date);
763 date = new Date(2010, 1 - 1, 4);
764 equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date);
765 date = new Date(2010, 1 - 1, 10);
766 equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date);
767});
768
769test('parseDate', function() {
770 init('#inp');
771 ok($.datepicker.parseDate('d m y', '') == null, 'Parse date empty');
772 equalsDate($.datepicker.parseDate('d m y', '3 2 01'),
773 new Date(2001, 2 - 1, 3), 'Parse date d m y');
774 equalsDate($.datepicker.parseDate('dd mm yy', '03 02 2001'),
775 new Date(2001, 2 - 1, 3), 'Parse date dd mm yy');
776 equalsDate($.datepicker.parseDate('d m y', '13 12 01'),
777 new Date(2001, 12 - 1, 13), 'Parse date d m y');
778 equalsDate($.datepicker.parseDate('dd mm yy', '13 12 2001'),
779 new Date(2001, 12 - 1, 13), 'Parse date dd mm yy');
780 equalsDate($.datepicker.parseDate('y-o', '2001-34'),
781 new Date(2001, 2 - 1, 3), 'Parse date y-o');
782 equalsDate($.datepicker.parseDate('yy-oo', '2001-347'),
783 new Date(2001, 12 - 1, 13), 'Parse date yy oo');
784 equalsDate($.datepicker.parseDate('oo yy', '348 2004'),
785 new Date(2004, 12 - 1, 13), 'Parse date oo-yy');
786 equalsDate($.datepicker.parseDate('D d M y', 'Sat 3 Feb 01'),
787 new Date(2001, 2 - 1, 3), 'Parse date D d M y');
788 equalsDate($.datepicker.parseDate('d MM DD yy', '3 February Saturday 2001'),
789 new Date(2001, 2 - 1, 3), 'Parse date dd MM DD yy');
790 equalsDate($.datepicker.parseDate('DD, MM d, yy', 'Saturday, February 3, 2001'),
791 new Date(2001, 2 - 1, 3), 'Parse date DD, MM d, yy');
792 equalsDate($.datepicker.parseDate('\'day\' d \'of\' MM (\'\'DD\'\'), yy',
793 'day 3 of February (\'Saturday\'), 2001'), new Date(2001, 2 - 1, 3),
794 'Parse date \'day\' d \'of\' MM (\'\'DD\'\'), yy');
795 equalsDate($.datepicker.parseDate('y-m-d', '01-02-03'),
796 new Date(2001, 2 - 1, 3), 'Parse date y-m-d - default cutoff');
797 equalsDate($.datepicker.parseDate('y-m-d', '51-02-03'),
798 new Date(1951, 2 - 1, 3), 'Parse date y-m-d - default cutoff');
799 equalsDate($.datepicker.parseDate('y-m-d', '51-02-03', {shortYearCutoff: 80}),
800 new Date(2051, 2 - 1, 3), 'Parse date y-m-d - cutoff 80');
801 equalsDate($.datepicker.parseDate('y-m-d', '51-02-03', {shortYearCutoff: '+60'}),
802 new Date(2051, 2 - 1, 3), 'Parse date y-m-d - cutoff +60');
803 var gmtDate = new Date(2001, 2 - 1, 3);
804 gmtDate.setMinutes(gmtDate.getMinutes() - gmtDate.getTimezoneOffset());
805 equalsDate($.datepicker.parseDate('@', '981158400000'), gmtDate, 'Parse date @');
806 equalsDate($.datepicker.parseDate('!', '631167552000000000'), gmtDate, 'Parse date !');
807 var fr = $.datepicker.regional['fr'];
808 var settings = {dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames,
809 monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames};
810 equalsDate($.datepicker.parseDate('D d M y', 'Lun 9 Avr 01', settings),
811 new Date(2001, 4 - 1, 9), 'Parse date D M y with settings');
812 equalsDate($.datepicker.parseDate('d MM DD yy', '9 Avril Lundi 2001', settings),
813 new Date(2001, 4 - 1, 9), 'Parse date d MM DD yy with settings');
814 equalsDate($.datepicker.parseDate('DD, MM d, yy', 'Lundi, Avril 9, 2001', settings),
815 new Date(2001, 4 - 1, 9), 'Parse date DD, MM d, yy with settings');
816 equalsDate($.datepicker.parseDate('\'jour\' d \'de\' MM (\'\'DD\'\'), yy',
817 'jour 9 de Avril (\'Lundi\'), 2001', settings), new Date(2001, 4 - 1, 9),
818 'Parse date \'jour\' d \'de\' MM (\'\'DD\'\'), yy with settings');
819});
820
821test('parseDateErrors', function() {
822 init('#inp');
823 var expectError = function(expr, value, error) {
824 try {
825 expr();
826 ok(false, 'Parsed error ' + value);
827 }
828 catch (e) {
829 equals(e, error, 'Parsed error ' + value);
830 }
831 };
832 expectError(function() { $.datepicker.parseDate(null, 'Sat 2 01'); },
833 'Sat 2 01', 'Invalid arguments');
834 expectError(function() { $.datepicker.parseDate('d m y', null); },
835 'null', 'Invalid arguments');
836 expectError(function() { $.datepicker.parseDate('d m y', 'Sat 2 01'); },
837 'Sat 2 01 - d m y', 'Missing number at position 0');
838 expectError(function() { $.datepicker.parseDate('dd mm yy', 'Sat 2 01'); },
839 'Sat 2 01 - dd mm yy', 'Missing number at position 0');
840 expectError(function() { $.datepicker.parseDate('d m y', '3 Feb 01'); },
841 '3 Feb 01 - d m y', 'Missing number at position 2');
842 expectError(function() { $.datepicker.parseDate('dd mm yy', '3 Feb 01'); },
843 '3 Feb 01 - dd mm yy', 'Missing number at position 2');
844 expectError(function() { $.datepicker.parseDate('d m y', '3 2 AD01'); },
845 '3 2 AD01 - d m y', 'Missing number at position 4');
846 expectError(function() { $.datepicker.parseDate('d m yy', '3 2 AD01'); },
847 '3 2 AD01 - dd mm yy', 'Missing number at position 4');
848 expectError(function() { $.datepicker.parseDate('y-o', '2001-D01'); },
849 '2001-D01 - y-o', 'Missing number at position 5');
850 expectError(function() { $.datepicker.parseDate('yy-oo', '2001-D01'); },
851 '2001-D01 - yy-oo', 'Missing number at position 5');
852 expectError(function() { $.datepicker.parseDate('D d M y', 'D7 3 Feb 01'); },
853 'D7 3 Feb 01 - D d M y', 'Unknown name at position 0');
854 expectError(function() { $.datepicker.parseDate('D d M y', 'Sat 3 M2 01'); },
855 'Sat 3 M2 01 - D d M y', 'Unknown name at position 6');
856 expectError(function() { $.datepicker.parseDate('DD, MM d, yy', 'Saturday- Feb 3, 2001'); },
857 'Saturday- Feb 3, 2001 - DD, MM d, yy', 'Unexpected literal at position 8');
858 expectError(function() { $.datepicker.parseDate('\'day\' d \'of\' MM (\'\'DD\'\'), yy',
859 'day 3 of February ("Saturday"), 2001'); },
860 'day 3 of Mon2 ("Day7"), 2001', 'Unexpected literal at position 19');
861 expectError(function() { $.datepicker.parseDate('d m y', '29 2 01'); },
862 '29 2 01 - d m y', 'Invalid date');
863 var fr = $.datepicker.regional['fr'];
864 var settings = {dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames,
865 monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames};
866 expectError(function() { $.datepicker.parseDate('D d M y', 'Mon 9 Avr 01', settings); },
867 'Mon 9 Avr 01 - D d M y', 'Unknown name at position 0');
868 expectError(function() { $.datepicker.parseDate('D d M y', 'Lun 9 Apr 01', settings); },
869 'Lun 9 Apr 01 - D d M y', 'Unknown name at position 6');
870});
871
872test('formatDate', function() {
873 init('#inp');
874 equals($.datepicker.formatDate('d m y', new Date(2001, 2 - 1, 3)),
875 '3 2 01', 'Format date d m y');
876 equals($.datepicker.formatDate('dd mm yy', new Date(2001, 2 - 1, 3)),
877 '03 02 2001', 'Format date dd mm yy');
878 equals($.datepicker.formatDate('d m y', new Date(2001, 12 - 1, 13)),
879 '13 12 01', 'Format date d m y');
880 equals($.datepicker.formatDate('dd mm yy', new Date(2001, 12 - 1, 13)),
881 '13 12 2001', 'Format date dd mm yy');
882 equals($.datepicker.formatDate('yy-o', new Date(2001, 2 - 1, 3)),
883 '2001-34', 'Format date yy-o');
884 equals($.datepicker.formatDate('yy-oo', new Date(2001, 2 - 1, 3)),
885 '2001-034', 'Format date yy-oo');
886 equals($.datepicker.formatDate('D M y', new Date(2001, 2 - 1, 3)),
887 'Sat Feb 01', 'Format date D M y');
888 equals($.datepicker.formatDate('DD MM yy', new Date(2001, 2 - 1, 3)),
889 'Saturday February 2001', 'Format date DD MM yy');
890 equals($.datepicker.formatDate('DD, MM d, yy', new Date(2001, 2 - 1, 3)),
891 'Saturday, February 3, 2001', 'Format date DD, MM d, yy');
892 equals($.datepicker.formatDate('\'day\' d \'of\' MM (\'\'DD\'\'), yy',
893 new Date(2001, 2 - 1, 3)), 'day 3 of February (\'Saturday\'), 2001',
894 'Format date \'day\' d \'of\' MM (\'\'DD\'\'), yy');
895 var gmtDate = new Date(2001, 2 - 1, 3);
896 gmtDate.setMinutes(gmtDate.getMinutes() - gmtDate.getTimezoneOffset());
897 equals($.datepicker.formatDate('@', gmtDate), '981158400000', 'Format date @');
898 equals($.datepicker.formatDate('!', gmtDate), '631167552000000000', 'Format date !');
899 var fr = $.datepicker.regional['fr'];
900 var settings = {dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames,
901 monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames};
902 equals($.datepicker.formatDate('D M y', new Date(2001, 4 - 1, 9), settings),
903 'Lun Avr 01', 'Format date D M y with settings');
904 equals($.datepicker.formatDate('DD MM yy', new Date(2001, 4 - 1, 9), settings),
905 'Lundi Avril 2001', 'Format date DD MM yy with settings');
906 equals($.datepicker.formatDate('DD, MM d, yy', new Date(2001, 4 - 1, 9), settings),
907 'Lundi, Avril 9, 2001', 'Format date DD, MM d, yy with settings');
908 equals($.datepicker.formatDate('\'jour\' d \'de\' MM (\'\'DD\'\'), yy',
909 new Date(2001, 4 - 1, 9), settings), 'jour 9 de Avril (\'Lundi\'), 2001',
910 'Format date \'jour\' d \'de\' MM (\'\'DD\'\'), yy with settings');
911});
912
913})(jQuery);
Note: See TracBrowser for help on using the repository browser.