/[projects]/misc/horsensspejder-web/jquery/jquery-ui-1.10.3/tests/unit/datepicker/datepicker_options.js
ViewVC logotype

Contents of /misc/horsensspejder-web/jquery/jquery-ui-1.10.3/tests/unit/datepicker/datepicker_options.js

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2125 - (show annotations) (download) (as text)
Wed Mar 12 19:30:05 2014 UTC (10 years, 3 months ago) by torben
File MIME type: application/javascript
File size: 53687 byte(s)
initial import
1 /*
2 * datepicker_options.js
3 */
4
5 (function($) {
6
7 module("datepicker: options");
8
9 test("setDefaults", function() {
10 expect( 3 );
11 TestHelpers.datepicker.init("#inp");
12 equal($.datepicker._defaults.showOn, "focus", "Initial showOn");
13 $.datepicker.setDefaults({showOn: "button"});
14 equal($.datepicker._defaults.showOn, "button", "Change default showOn");
15 $.datepicker.setDefaults({showOn: "focus"});
16 equal($.datepicker._defaults.showOn, "focus", "Restore showOn");
17 });
18
19 test("option", function() {
20 expect( 17 );
21 var inp = TestHelpers.datepicker.init("#inp"),
22 inst = $.data(inp[0], TestHelpers.datepicker.PROP_NAME);
23 // Set option
24 equal(inst.settings.showOn, null, "Initial setting showOn");
25 equal($.datepicker._get(inst, "showOn"), "focus", "Initial instance showOn");
26 equal($.datepicker._defaults.showOn, "focus", "Initial default showOn");
27 inp.datepicker("option", "showOn", "button");
28 equal(inst.settings.showOn, "button", "Change setting showOn");
29 equal($.datepicker._get(inst, "showOn"), "button", "Change instance showOn");
30 equal($.datepicker._defaults.showOn, "focus", "Retain default showOn");
31 inp.datepicker("option", {showOn: "both"});
32 equal(inst.settings.showOn, "both", "Change setting showOn");
33 equal($.datepicker._get(inst, "showOn"), "both", "Change instance showOn");
34 equal($.datepicker._defaults.showOn, "focus", "Retain default showOn");
35 inp.datepicker("option", "showOn", undefined);
36 equal(inst.settings.showOn, null, "Clear setting showOn");
37 equal($.datepicker._get(inst, "showOn"), "focus", "Restore instance showOn");
38 equal($.datepicker._defaults.showOn, "focus", "Retain default showOn");
39 // Get option
40 inp = TestHelpers.datepicker.init("#inp");
41 equal(inp.datepicker("option", "showOn"), "focus", "Initial setting showOn");
42 inp.datepicker("option", "showOn", "button");
43 equal(inp.datepicker("option", "showOn"), "button", "Change instance showOn");
44 inp.datepicker("option", "showOn", undefined);
45 equal(inp.datepicker("option", "showOn"), "focus", "Reset instance showOn");
46 deepEqual(inp.datepicker("option", "all"), {showAnim: ""}, "Get instance settings");
47 deepEqual(inp.datepicker("option", "defaults"), $.datepicker._defaults,
48 "Get default settings");
49 });
50
51 test( "disabled", function() {
52 expect(8);
53 var inp = TestHelpers.datepicker.init("#inp");
54 ok(!inp.datepicker("isDisabled"), "Initially marked as enabled");
55 ok(!inp[0].disabled, "Field initially enabled");
56 inp.datepicker("option", "disabled", true);
57 ok(inp.datepicker("isDisabled"), "Marked as disabled");
58 ok(inp[0].disabled, "Field now disabled");
59 inp.datepicker("option", "disabled", false);
60 ok(!inp.datepicker("isDisabled"), "Marked as enabled");
61 ok(!inp[0].disabled, "Field now enabled");
62 inp.datepicker("destroy");
63
64 inp = TestHelpers.datepicker.init("#inp", { disabled: true });
65 ok(inp.datepicker("isDisabled"), "Initially marked as disabled");
66 ok(inp[0].disabled, "Field initially disabled");
67 });
68
69 test("change", function() {
70 expect( 12 );
71 var inp = TestHelpers.datepicker.init("#inp"),
72 inst = $.data(inp[0], TestHelpers.datepicker.PROP_NAME);
73 equal(inst.settings.showOn, null, "Initial setting showOn");
74 equal($.datepicker._get(inst, "showOn"), "focus", "Initial instance showOn");
75 equal($.datepicker._defaults.showOn, "focus", "Initial default showOn");
76 inp.datepicker("change", "showOn", "button");
77 equal(inst.settings.showOn, "button", "Change setting showOn");
78 equal($.datepicker._get(inst, "showOn"), "button", "Change instance showOn");
79 equal($.datepicker._defaults.showOn, "focus", "Retain default showOn");
80 inp.datepicker("change", {showOn: "both"});
81 equal(inst.settings.showOn, "both", "Change setting showOn");
82 equal($.datepicker._get(inst, "showOn"), "both", "Change instance showOn");
83 equal($.datepicker._defaults.showOn, "focus", "Retain default showOn");
84 inp.datepicker("change", "showOn", undefined);
85 equal(inst.settings.showOn, null, "Clear setting showOn");
86 equal($.datepicker._get(inst, "showOn"), "focus", "Restore instance showOn");
87 equal($.datepicker._defaults.showOn, "focus", "Retain default showOn");
88 });
89
90 asyncTest( "invocation", function() {
91 var button, image,
92 isOldIE = $.ui.ie && ( !document.documentMode || document.documentMode < 9 ),
93 body = $( "body" );
94
95 expect( isOldIE ? 25 : 29 );
96
97 function step0() {
98 var input = $( "<input>" ).appendTo( "#qunit-fixture" ),
99 inp = TestHelpers.datepicker.init( input ),
100 dp = $( "#ui-datepicker-div" );
101
102 button = inp.siblings( "button" );
103 ok( button.length === 0, "Focus - button absent" );
104 image = inp.siblings( "img" );
105 ok( image.length === 0, "Focus - image absent" );
106
107 TestHelpers.datepicker.onFocus( inp, function() {
108 ok( dp.is( ":visible" ), "Focus - rendered on focus" );
109 inp.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } );
110 ok( !dp.is( ":visible" ), "Focus - hidden on exit" );
111 step1();
112 });
113 }
114
115 function step1() {
116
117 var input = $( "<input>" ).appendTo( "#qunit-fixture" ),
118 inp = TestHelpers.datepicker.init( input ),
119 dp = $( "#ui-datepicker-div" );
120
121 TestHelpers.datepicker.onFocus( inp, function() {
122 ok( dp.is( ":visible" ), "Focus - rendered on focus" );
123 body.simulate( "mousedown", {} );
124 ok( !dp.is( ":visible" ), "Focus - hidden on external click" );
125 inp.datepicker( "hide" ).datepicker( "destroy" );
126
127 step2();
128 });
129 }
130
131 function step2() {
132 var input = $( "<input>" ).appendTo( "#qunit-fixture" ),
133 inp = TestHelpers.datepicker.init( input, { showOn: "button", buttonText: "Popup" } ),
134 dp = $( "#ui-datepicker-div" );
135
136 ok( !dp.is( ":visible" ), "Button - initially hidden" );
137 button = inp.siblings( "button" );
138 image = inp.siblings( "img" );
139 ok( button.length === 1, "Button - button present" );
140 ok( image.length === 0, "Button - image absent" );
141 equal( button.text(), "Popup", "Button - button text" );
142
143 TestHelpers.datepicker.onFocus( inp, function() {
144 ok( !dp.is( ":visible" ), "Button - not rendered on focus" );
145 button.click();
146 ok( dp.is( ":visible" ), "Button - rendered on button click" );
147 button.click();
148 ok( !dp.is( ":visible" ), "Button - hidden on second button click" );
149 inp.datepicker( "hide" ).datepicker( "destroy" );
150
151 step3();
152 });
153 }
154
155 function step3() {
156 var input = $( "<input>" ).appendTo( "#qunit-fixture" ),
157 inp = TestHelpers.datepicker.init( input, {
158 showOn: "button",
159 buttonImageOnly: true,
160 buttonImage: "images/calendar.gif",
161 buttonText: "Cal"
162 }),
163 dp = $( "#ui-datepicker-div" );
164
165 ok( !dp.is( ":visible" ), "Image button - initially hidden" );
166 button = inp.siblings( "button" );
167 ok( button.length === 0, "Image button - button absent" );
168 image = inp.siblings( "img" );
169 ok( image.length === 1, "Image button - image present" );
170 equal( image.attr( "src" ), "images/calendar.gif", "Image button - image source" );
171 equal( image.attr( "title" ), "Cal", "Image button - image text" );
172
173 TestHelpers.datepicker.onFocus( inp, function() {
174 ok( !dp.is( ":visible" ), "Image button - not rendered on focus" );
175 image.click();
176 ok( dp.is( ":visible" ), "Image button - rendered on image click" );
177 image.click();
178 ok( !dp.is( ":visible" ), "Image button - hidden on second image click" );
179 inp.datepicker( "hide" ).datepicker( "destroy" );
180
181 step4();
182 });
183 }
184
185 function step4() {
186 var input = $( "<input>" ).appendTo( "#qunit-fixture" ),
187 inp = TestHelpers.datepicker.init( input, { showOn: "both", buttonImage: "images/calendar.gif"} ),
188 dp = $( "#ui-datepicker-div" );
189
190 ok( !dp.is( ":visible" ), "Both - initially hidden" );
191 button = inp.siblings( "button" );
192 ok( button.length === 1, "Both - button present" );
193 image = inp.siblings( "img" );
194 ok( image.length === 0, "Both - image absent" );
195 image = button.children( "img" );
196 ok( image.length === 1, "Both - button image present" );
197
198 // TODO: occasionally this test flakily fails to focus in IE8 in browserstack
199 if ( !isOldIE ) {
200 TestHelpers.datepicker.onFocus( inp, function() {
201 ok( dp.is( ":visible" ), "Both - rendered on focus" );
202 body.simulate( "mousedown", {} );
203 ok( !dp.is( ":visible" ), "Both - hidden on external click" );
204 button.click();
205 ok( dp.is( ":visible" ), "Both - rendered on button click" );
206 button.click();
207 ok( !dp.is( ":visible" ), "Both - hidden on second button click" );
208 inp.datepicker( "hide" ).datepicker( "destroy" );
209
210 start();
211 });
212 } else {
213 start();
214 }
215 }
216
217 step0();
218 });
219
220 test("otherMonths", function() {
221 expect( 8 );
222 var inp = TestHelpers.datepicker.init("#inp"),
223 pop = $("#ui-datepicker-div");
224 inp.val("06/01/2009").datepicker("show");
225 equal(pop.find("tbody").text(),
226 // support: IE <9, jQuery <1.8
227 // In IE7/8 with jQuery <1.8, encoded spaces behave in strange ways
228 $( "<span>\u00a0123456789101112131415161718192021222324252627282930\u00a0\u00a0\u00a0\u00a0</span>" ).text(),
229 "Other months - none");
230 ok(pop.find("td:last *").length === 0, "Other months - no content");
231 inp.datepicker("hide").datepicker("option", "showOtherMonths", true).datepicker("show");
232 equal(pop.find("tbody").text(), "311234567891011121314151617181920212223242526272829301234",
233 "Other months - show");
234 ok(pop.find("td:last span").length === 1, "Other months - span content");
235 inp.datepicker("hide").datepicker("option", "selectOtherMonths", true).datepicker("show");
236 equal(pop.find("tbody").text(), "311234567891011121314151617181920212223242526272829301234",
237 "Other months - select");
238 ok(pop.find("td:last a").length === 1, "Other months - link content");
239 inp.datepicker("hide").datepicker("option", "showOtherMonths", false).datepicker("show");
240 equal(pop.find("tbody").text(),
241 // support: IE <9, jQuery <1.8
242 // In IE7/8 with jQuery <1.8, encoded spaces behave in strange ways
243 $( "<span>\u00a0123456789101112131415161718192021222324252627282930\u00a0\u00a0\u00a0\u00a0</span>" ).text(),
244 "Other months - none");
245 ok(pop.find("td:last *").length === 0, "Other months - no content");
246 });
247
248 test("defaultDate", function() {
249 expect( 16 );
250 var inp = TestHelpers.datepicker.init("#inp"),
251 date = new Date();
252 inp.val("").datepicker("show").
253 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
254 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date, "Default date null");
255
256 // Numeric values
257 inp.datepicker("option", {defaultDate: -2}).
258 datepicker("hide").val("").datepicker("show").
259 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
260 date.setDate(date.getDate() - 2);
261 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date, "Default date -2");
262
263 date = new Date();
264 inp.datepicker("option", {defaultDate: 3}).
265 datepicker("hide").val("").datepicker("show").
266 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
267 date.setDate(date.getDate() + 3);
268 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date, "Default date 3");
269
270 date = new Date();
271 inp.datepicker("option", {defaultDate: 1 / "a"}).
272 datepicker("hide").val("").datepicker("show").
273 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
274 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date, "Default date NaN");
275
276 // String offset values
277 inp.datepicker("option", {defaultDate: "-1d"}).
278 datepicker("hide").val("").datepicker("show").
279 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
280 date.setDate(date.getDate() - 1);
281 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date, "Default date -1d");
282 inp.datepicker("option", {defaultDate: "+3D"}).
283 datepicker("hide").val("").datepicker("show").
284 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
285 date.setDate(date.getDate() + 4);
286 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date, "Default date +3D");
287 inp.datepicker("option", {defaultDate: " -2 w "}).
288 datepicker("hide").val("").datepicker("show").
289 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
290 date = new Date();
291 date.setDate(date.getDate() - 14);
292 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date, "Default date -2 w");
293 inp.datepicker("option", {defaultDate: "+1 W"}).
294 datepicker("hide").val("").datepicker("show").
295 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
296 date.setDate(date.getDate() + 21);
297 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date, "Default date +1 W");
298 inp.datepicker("option", {defaultDate: " -1 m "}).
299 datepicker("hide").val("").datepicker("show").
300 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
301 date = TestHelpers.datepicker.addMonths(new Date(), -1);
302 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date, "Default date -1 m");
303 inp.datepicker("option", {defaultDate: "+2M"}).
304 datepicker("hide").val("").datepicker("show").
305 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
306 date = TestHelpers.datepicker.addMonths(new Date(), 2);
307 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date, "Default date +2M");
308 inp.datepicker("option", {defaultDate: "-2y"}).
309 datepicker("hide").val("").datepicker("show").
310 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
311 date = new Date();
312 date.setFullYear(date.getFullYear() - 2);
313 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date, "Default date -2y");
314 inp.datepicker("option", {defaultDate: "+1 Y "}).
315 datepicker("hide").val("").datepicker("show").
316 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
317 date.setFullYear(date.getFullYear() + 3);
318 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date, "Default date +1 Y");
319 inp.datepicker("option", {defaultDate: "+1M +10d"}).
320 datepicker("hide").val("").datepicker("show").
321 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
322 date = TestHelpers.datepicker.addMonths(new Date(), 1);
323 date.setDate(date.getDate() + 10);
324 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date, "Default date +1M +10d");
325 // String date values
326 inp.datepicker("option", {defaultDate: "07/04/2007"}).
327 datepicker("hide").val("").datepicker("show").
328 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
329 date = new Date(2007, 7 - 1, 4);
330 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date, "Default date 07/04/2007");
331 inp.datepicker("option", {dateFormat: "yy-mm-dd", defaultDate: "2007-04-02"}).
332 datepicker("hide").val("").datepicker("show").
333 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
334 date = new Date(2007, 4 - 1, 2);
335 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date, "Default date 2007-04-02");
336 // Date value
337 date = new Date(2007, 1 - 1, 26);
338 inp.datepicker("option", {dateFormat: "mm/dd/yy", defaultDate: date}).
339 datepicker("hide").val("").datepicker("show").
340 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
341 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date, "Default date 01/26/2007");
342 });
343
344 test("miscellaneous", function() {
345 expect( 19 );
346 var curYear, longNames, shortNames, date,
347 dp = $("#ui-datepicker-div"),
348 inp = TestHelpers.datepicker.init("#inp");
349 // Year range
350 function genRange(start, offset) {
351 var i = start,
352 range = "";
353 for (; i < start + offset; i++) {
354 range += i;
355 }
356 return range;
357 }
358 curYear = new Date().getFullYear();
359 inp.val("02/04/2008").datepicker("show");
360 equal(dp.find(".ui-datepicker-year").text(), "2008", "Year range - read-only default");
361 inp.datepicker("hide").datepicker("option", {changeYear: true}).datepicker("show");
362 equal(dp.find(".ui-datepicker-year").text(), genRange(2008 - 10, 21), "Year range - changeable default");
363 inp.datepicker("hide").datepicker("option", {yearRange: "c-6:c+2", changeYear: true}).datepicker("show");
364 equal(dp.find(".ui-datepicker-year").text(), genRange(2008 - 6, 9), "Year range - c-6:c+2");
365 inp.datepicker("hide").datepicker("option", {yearRange: "2000:2010", changeYear: true}).datepicker("show");
366 equal(dp.find(".ui-datepicker-year").text(), genRange(2000, 11), "Year range - 2000:2010");
367 inp.datepicker("hide").datepicker("option", {yearRange: "-5:+3", changeYear: true}).datepicker("show");
368 equal(dp.find(".ui-datepicker-year").text(), genRange(curYear - 5, 9), "Year range - -5:+3");
369 inp.datepicker("hide").datepicker("option", {yearRange: "2000:-5", changeYear: true}).datepicker("show");
370 equal(dp.find(".ui-datepicker-year").text(), genRange(2000, curYear - 2004), "Year range - 2000:-5");
371 inp.datepicker("hide").datepicker("option", {yearRange: "", changeYear: true}).datepicker("show");
372 equal(dp.find(".ui-datepicker-year").text(), genRange(curYear, 1), "Year range - -6:+2");
373
374 // Navigation as date format
375 inp.datepicker("option", {showButtonPanel: true});
376 equal(dp.find(".ui-datepicker-prev").text(), "Prev", "Navigation prev - default");
377 equal(dp.find(".ui-datepicker-current").text(), "Today", "Navigation current - default");
378 equal(dp.find(".ui-datepicker-next").text(), "Next", "Navigation next - default");
379 inp.datepicker("hide").datepicker("option", {navigationAsDateFormat: true, prevText: "< M", currentText: "MM", nextText: "M >"}).
380 val("02/04/2008").datepicker("show");
381 longNames = $.datepicker.regional[""].monthNames;
382 shortNames = $.datepicker.regional[""].monthNamesShort;
383 date = new Date();
384 equal(dp.find(".ui-datepicker-prev").text(), "< " + shortNames[0], "Navigation prev - as date format");
385 equal(dp.find(".ui-datepicker-current").text(),
386 longNames[date.getMonth()], "Navigation current - as date format");
387 equal(dp.find(".ui-datepicker-next").text(),
388 shortNames[2] + " >", "Navigation next - as date format");
389 inp.simulate("keydown", {keyCode: $.ui.keyCode.PAGE_DOWN});
390 equal(dp.find(".ui-datepicker-prev").text(),
391 "< " + shortNames[1], "Navigation prev - as date format + pgdn");
392 equal(dp.find(".ui-datepicker-current").text(),
393 longNames[date.getMonth()], "Navigation current - as date format + pgdn");
394 equal(dp.find(".ui-datepicker-next").text(),
395 shortNames[3] + " >", "Navigation next - as date format + pgdn");
396 inp.datepicker("hide").datepicker("option", {gotoCurrent: true}).
397 val("02/04/2008").datepicker("show");
398 equal(dp.find(".ui-datepicker-prev").text(),
399 "< " + shortNames[0], "Navigation prev - as date format + goto current");
400 equal(dp.find(".ui-datepicker-current").text(),
401 longNames[1], "Navigation current - as date format + goto current");
402 equal(dp.find(".ui-datepicker-next").text(),
403 shortNames[2] + " >", "Navigation next - as date format + goto current");
404 });
405
406 test("minMax", function() {
407 expect( 23 );
408 var date,
409 inp = TestHelpers.datepicker.init("#inp"),
410 dp = $("#ui-datepicker-div"),
411 lastYear = new Date(2007, 6 - 1, 4),
412 nextYear = new Date(2009, 6 - 1, 4),
413 minDate = new Date(2008, 2 - 1, 29),
414 maxDate = new Date(2008, 12 - 1, 7);
415 inp.val("06/04/2008").datepicker("show");
416 inp.simulate("keydown", {ctrlKey: true, keyCode: $.ui.keyCode.PAGE_UP}).
417 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
418 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), lastYear,
419 "Min/max - null, null - ctrl+pgup");
420 inp.val("06/04/2008").datepicker("show");
421 inp.simulate("keydown", {ctrlKey: true, keyCode: $.ui.keyCode.PAGE_DOWN}).
422 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
423 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), nextYear,
424 "Min/max - null, null - ctrl+pgdn");
425 inp.datepicker("option", {minDate: minDate}).
426 datepicker("hide").val("06/04/2008").datepicker("show");
427 inp.simulate("keydown", {ctrlKey: true, keyCode: $.ui.keyCode.PAGE_UP}).
428 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
429 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), minDate,
430 "Min/max - 02/29/2008, null - ctrl+pgup");
431 inp.val("06/04/2008").datepicker("show");
432 inp.simulate("keydown", {ctrlKey: true, keyCode: $.ui.keyCode.PAGE_DOWN}).
433 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
434 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), nextYear,
435 "Min/max - 02/29/2008, null - ctrl+pgdn");
436 inp.datepicker("option", {maxDate: maxDate}).
437 datepicker("hide").val("06/04/2008").datepicker("show");
438 inp.simulate("keydown", {ctrlKey: true, keyCode: $.ui.keyCode.PAGE_UP}).
439 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
440 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), minDate,
441 "Min/max - 02/29/2008, 12/07/2008 - ctrl+pgup");
442 inp.val("06/04/2008").datepicker("show");
443 inp.simulate("keydown", {ctrlKey: true, keyCode: $.ui.keyCode.PAGE_DOWN}).
444 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
445 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), maxDate,
446 "Min/max - 02/29/2008, 12/07/2008 - ctrl+pgdn");
447 inp.datepicker("option", {minDate: null}).
448 datepicker("hide").val("06/04/2008").datepicker("show");
449 inp.simulate("keydown", {ctrlKey: true, keyCode: $.ui.keyCode.PAGE_UP}).
450 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
451 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), lastYear,
452 "Min/max - null, 12/07/2008 - ctrl+pgup");
453 inp.val("06/04/2008").datepicker("show");
454 inp.simulate("keydown", {ctrlKey: true, keyCode: $.ui.keyCode.PAGE_DOWN}).
455 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
456 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), maxDate,
457 "Min/max - null, 12/07/2008 - ctrl+pgdn");
458 // Relative dates
459 date = new Date();
460 date.setDate(date.getDate() - 7);
461 inp.datepicker("option", {minDate: "-1w", maxDate: "+1 M +10 D "}).
462 datepicker("hide").val("").datepicker("show");
463 inp.simulate("keydown", {ctrlKey: true, keyCode: $.ui.keyCode.PAGE_UP}).
464 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
465 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date,
466 "Min/max - -1w, +1 M +10 D - ctrl+pgup");
467 date = TestHelpers.datepicker.addMonths(new Date(), 1);
468 date.setDate(date.getDate() + 10);
469 inp.val("").datepicker("show");
470 inp.simulate("keydown", {ctrlKey: true, keyCode: $.ui.keyCode.PAGE_DOWN}).
471 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
472 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date,
473 "Min/max - -1w, +1 M +10 D - ctrl+pgdn");
474 // With existing date
475 inp = TestHelpers.datepicker.init("#inp");
476 inp.val("06/04/2008").datepicker("option", {minDate: minDate});
477 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), new Date(2008, 6 - 1, 4), "Min/max - setDate > min");
478 inp.datepicker("option", {minDate: null}).val("01/04/2008").datepicker("option", {minDate: minDate});
479 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), minDate, "Min/max - setDate < min");
480 inp.datepicker("option", {minDate: null}).val("06/04/2008").datepicker("option", {maxDate: maxDate});
481 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), new Date(2008, 6 - 1, 4), "Min/max - setDate < max");
482 inp.datepicker("option", {maxDate: null}).val("01/04/2009").datepicker("option", {maxDate: maxDate});
483 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), maxDate, "Min/max - setDate > max");
484 inp.datepicker("option", {maxDate: null}).val("01/04/2008").datepicker("option", {minDate: minDate, maxDate: maxDate});
485 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), minDate, "Min/max - setDate < min");
486 inp.datepicker("option", {maxDate: null}).val("06/04/2008").datepicker("option", {minDate: minDate, maxDate: maxDate});
487 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), new Date(2008, 6 - 1, 4), "Min/max - setDate > min, < max");
488 inp.datepicker("option", {maxDate: null}).val("01/04/2009").datepicker("option", {minDate: minDate, maxDate: maxDate});
489 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), maxDate, "Min/max - setDate > max");
490
491 inp.datepicker("option", {yearRange: "-0:+1"}).val("01/01/" + new Date().getFullYear());
492 ok(dp.find(".ui-datepicker-prev").hasClass("ui-state-disabled"), "Year Range Test - previous button disabled at 1/1/minYear");
493 inp.datepicker("setDate", "12/30/" + new Date().getFullYear());
494 ok(dp.find(".ui-datepicker-next").hasClass("ui-state-disabled"), "Year Range Test - next button disabled at 12/30/maxYear");
495
496 inp.datepicker("option", {
497 minDate: new Date(1900, 0, 1),
498 maxDate: "-6Y",
499 yearRange: "1900:-6"
500 }).val( "" );
501 ok(dp.find(".ui-datepicker-next").hasClass("ui-state-disabled"), "Year Range Test - next button disabled");
502 ok(!dp.find(".ui-datepicker-prev").hasClass("ui-state-disabled"), "Year Range Test - prev button enabled");
503
504 inp.datepicker("option", {
505 minDate: new Date(1900, 0, 1),
506 maxDate: "1/25/2007",
507 yearRange: "1900:2007"
508 }).val( "" );
509 ok(dp.find(".ui-datepicker-next").hasClass("ui-state-disabled"), "Year Range Test - next button disabled");
510 ok(!dp.find(".ui-datepicker-prev").hasClass("ui-state-disabled"), "Year Range Test - prev button enabled");
511 });
512
513 test("setDate", function() {
514 expect( 24 );
515 var inl, alt, minDate, maxDate, dateAndTimeToSet, dateAndTimeClone,
516 inp = TestHelpers.datepicker.init("#inp"),
517 date1 = new Date(2008, 6 - 1, 4),
518 date2 = new Date();
519 ok(inp.datepicker("getDate") == null, "Set date - default");
520 inp.datepicker("setDate", date1);
521 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date1, "Set date - 2008-06-04");
522 date1 = new Date();
523 date1.setDate(date1.getDate() + 7);
524 inp.datepicker("setDate", +7);
525 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date1, "Set date - +7");
526 date2.setFullYear(date2.getFullYear() + 2);
527 inp.datepicker("setDate", "+2y");
528 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date2, "Set date - +2y");
529 inp.datepicker("setDate", date1, date2);
530 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date1, "Set date - two dates");
531 inp.datepicker("setDate");
532 ok(inp.datepicker("getDate") == null, "Set date - null");
533 // Relative to current date
534 date1 = new Date();
535 date1.setDate(date1.getDate() + 7);
536 inp.datepicker("setDate", "c +7");
537 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date1, "Set date - c +7");
538 date1.setDate(date1.getDate() + 7);
539 inp.datepicker("setDate", "c+7");
540 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date1, "Set date - c+7");
541 date1.setDate(date1.getDate() - 21);
542 inp.datepicker("setDate", "c -3 w");
543 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date1, "Set date - c -3 w");
544 // Inline
545 inl = TestHelpers.datepicker.init("#inl");
546 date1 = new Date(2008, 6 - 1, 4);
547 date2 = new Date();
548 TestHelpers.datepicker.equalsDate(inl.datepicker("getDate"), date2, "Set date inline - default");
549 inl.datepicker("setDate", date1);
550 TestHelpers.datepicker.equalsDate(inl.datepicker("getDate"), date1, "Set date inline - 2008-06-04");
551 date1 = new Date();
552 date1.setDate(date1.getDate() + 7);
553 inl.datepicker("setDate", +7);
554 TestHelpers.datepicker.equalsDate(inl.datepicker("getDate"), date1, "Set date inline - +7");
555 date2.setFullYear(date2.getFullYear() + 2);
556 inl.datepicker("setDate", "+2y");
557 TestHelpers.datepicker.equalsDate(inl.datepicker("getDate"), date2, "Set date inline - +2y");
558 inl.datepicker("setDate", date1, date2);
559 TestHelpers.datepicker.equalsDate(inl.datepicker("getDate"), date1, "Set date inline - two dates");
560 inl.datepicker("setDate");
561 ok(inl.datepicker("getDate") == null, "Set date inline - null");
562 // Alternate field
563 alt = $("#alt");
564 inp.datepicker("option", {altField: "#alt", altFormat: "yy-mm-dd"});
565 date1 = new Date(2008, 6 - 1, 4);
566 inp.datepicker("setDate", date1);
567 equal(inp.val(), "06/04/2008", "Set date alternate - 06/04/2008");
568 equal(alt.val(), "2008-06-04", "Set date alternate - 2008-06-04");
569 // With minimum/maximum
570 inp = TestHelpers.datepicker.init("#inp");
571 date1 = new Date(2008, 1 - 1, 4);
572 date2 = new Date(2008, 6 - 1, 4);
573 minDate = new Date(2008, 2 - 1, 29);
574 maxDate = new Date(2008, 3 - 1, 28);
575 inp.val("").datepicker("option", {minDate: minDate}).datepicker("setDate", date2);
576 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date2, "Set date min/max - setDate > min");
577 inp.datepicker("setDate", date1);
578 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), minDate, "Set date min/max - setDate < min");
579 inp.val("").datepicker("option", {maxDate: maxDate, minDate: null}).datepicker("setDate", date1);
580 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), date1, "Set date min/max - setDate < max");
581 inp.datepicker("setDate", date2);
582 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), maxDate, "Set date min/max - setDate > max");
583 inp.val("").datepicker("option", {minDate: minDate}).datepicker("setDate", date1);
584 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), minDate, "Set date min/max - setDate < min");
585 inp.datepicker("setDate", date2);
586 TestHelpers.datepicker.equalsDate(inp.datepicker("getDate"), maxDate, "Set date min/max - setDate > max");
587 dateAndTimeToSet = new Date(2008, 3 - 1, 28, 1, 11, 0);
588 dateAndTimeClone = new Date(2008, 3 - 1, 28, 1, 11, 0);
589 inp.datepicker("setDate", dateAndTimeToSet);
590 equal(dateAndTimeToSet.getTime(), dateAndTimeClone.getTime(), "Date object passed should not be changed by setDate");
591 });
592
593 test("altField", function() {
594 expect( 10 );
595 var inp = TestHelpers.datepicker.init("#inp"),
596 alt = $("#alt");
597 // No alternate field set
598 alt.val("");
599 inp.val("06/04/2008").datepicker("show");
600 inp.simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
601 equal(inp.val(), "06/04/2008", "Alt field - dp - enter");
602 equal(alt.val(), "", "Alt field - alt not set");
603 // Alternate field set
604 alt.val("");
605 inp.datepicker("option", {altField: "#alt", altFormat: "yy-mm-dd"}).
606 val("06/04/2008").datepicker("show");
607 inp.simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
608 equal(inp.val(), "06/04/2008", "Alt field - dp - enter");
609 equal(alt.val(), "2008-06-04", "Alt field - alt - enter");
610 // Move from initial date
611 alt.val("");
612 inp.val("06/04/2008").datepicker("show");
613 inp.simulate("keydown", {keyCode: $.ui.keyCode.PAGE_DOWN}).
614 simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
615 equal(inp.val(), "07/04/2008", "Alt field - dp - pgdn");
616 equal(alt.val(), "2008-07-04", "Alt field - alt - pgdn");
617 // Alternate field set - closed
618 alt.val("");
619 inp.val("06/04/2008").datepicker("show");
620 inp.simulate("keydown", {keyCode: $.ui.keyCode.PAGE_DOWN}).
621 simulate("keydown", {keyCode: $.ui.keyCode.ESCAPE});
622 equal(inp.val(), "06/04/2008", "Alt field - dp - pgdn/esc");
623 equal(alt.val(), "", "Alt field - alt - pgdn/esc");
624 // Clear date and alternate
625 alt.val("");
626 inp.val("06/04/2008").datepicker("show");
627 inp.simulate("keydown", {ctrlKey: true, keyCode: $.ui.keyCode.END});
628 equal(inp.val(), "", "Alt field - dp - ctrl+end");
629 equal(alt.val(), "", "Alt field - alt - ctrl+end");
630 });
631
632 test("autoSize", function() {
633 expect( 15 );
634 var inp = TestHelpers.datepicker.init("#inp");
635 equal(inp.prop("size"), 20, "Auto size - default");
636 inp.datepicker("option", "autoSize", true);
637 equal(inp.prop("size"), 10, "Auto size - mm/dd/yy");
638 inp.datepicker("option", "dateFormat", "m/d/yy");
639 equal(inp.prop("size"), 10, "Auto size - m/d/yy");
640 inp.datepicker("option", "dateFormat", "D M d yy");
641 equal(inp.prop("size"), 15, "Auto size - D M d yy");
642 inp.datepicker("option", "dateFormat", "DD, MM dd, yy");
643 equal(inp.prop("size"), 29, "Auto size - DD, MM dd, yy");
644
645 // French
646 inp.datepicker("option", $.extend({autoSize: false}, $.datepicker.regional.fr));
647 equal(inp.prop("size"), 29, "Auto size - fr - default");
648 inp.datepicker("option", "autoSize", true);
649 equal(inp.prop("size"), 10, "Auto size - fr - dd/mm/yy");
650 inp.datepicker("option", "dateFormat", "m/d/yy");
651 equal(inp.prop("size"), 10, "Auto size - fr - m/d/yy");
652 inp.datepicker("option", "dateFormat", "D M d yy");
653 equal(inp.prop("size"), 18, "Auto size - fr - D M d yy");
654 inp.datepicker("option", "dateFormat", "DD, MM dd, yy");
655 equal(inp.prop("size"), 28, "Auto size - fr - DD, MM dd, yy");
656
657 // Hebrew
658 inp.datepicker("option", $.extend({autoSize: false}, $.datepicker.regional.he));
659 equal(inp.prop("size"), 28, "Auto size - he - default");
660 inp.datepicker("option", "autoSize", true);
661 equal(inp.prop("size"), 10, "Auto size - he - dd/mm/yy");
662 inp.datepicker("option", "dateFormat", "m/d/yy");
663 equal(inp.prop("size"), 10, "Auto size - he - m/d/yy");
664 inp.datepicker("option", "dateFormat", "D M d yy");
665 equal(inp.prop("size"), 16, "Auto size - he - D M d yy");
666 inp.datepicker("option", "dateFormat", "DD, MM dd, yy");
667 equal(inp.prop("size"), 23, "Auto size - he - DD, MM dd, yy");
668 });
669
670 test("daylightSaving", function() {
671 expect( 25 );
672 var inp = TestHelpers.datepicker.init("#inp"),
673 dp = $("#ui-datepicker-div");
674 ok(true, "Daylight saving - " + new Date());
675 // Australia, Sydney - AM change, southern hemisphere
676 inp.val("04/01/2008").datepicker("show");
677 $(".ui-datepicker-calendar td:eq(6) a", dp).simulate("click");
678 equal(inp.val(), "04/05/2008", "Daylight saving - Australia 04/05/2008");
679 inp.val("04/01/2008").datepicker("show");
680 $(".ui-datepicker-calendar td:eq(7) a", dp).simulate("click");
681 equal(inp.val(), "04/06/2008", "Daylight saving - Australia 04/06/2008");
682 inp.val("04/01/2008").datepicker("show");
683 $(".ui-datepicker-calendar td:eq(8) a", dp).simulate("click");
684 equal(inp.val(), "04/07/2008", "Daylight saving - Australia 04/07/2008");
685 inp.val("10/01/2008").datepicker("show");
686 $(".ui-datepicker-calendar td:eq(6) a", dp).simulate("click");
687 equal(inp.val(), "10/04/2008", "Daylight saving - Australia 10/04/2008");
688 inp.val("10/01/2008").datepicker("show");
689 $(".ui-datepicker-calendar td:eq(7) a", dp).simulate("click");
690 equal(inp.val(), "10/05/2008", "Daylight saving - Australia 10/05/2008");
691 inp.val("10/01/2008").datepicker("show");
692 $(".ui-datepicker-calendar td:eq(8) a", dp).simulate("click");
693 equal(inp.val(), "10/06/2008", "Daylight saving - Australia 10/06/2008");
694 // Brasil, Brasilia - midnight change, southern hemisphere
695 inp.val("02/01/2008").datepicker("show");
696 $(".ui-datepicker-calendar td:eq(20) a", dp).simulate("click");
697 equal(inp.val(), "02/16/2008", "Daylight saving - Brasil 02/16/2008");
698 inp.val("02/01/2008").datepicker("show");
699 $(".ui-datepicker-calendar td:eq(21) a", dp).simulate("click");
700 equal(inp.val(), "02/17/2008", "Daylight saving - Brasil 02/17/2008");
701 inp.val("02/01/2008").datepicker("show");
702 $(".ui-datepicker-calendar td:eq(22) a", dp).simulate("click");
703 equal(inp.val(), "02/18/2008", "Daylight saving - Brasil 02/18/2008");
704 inp.val("10/01/2008").datepicker("show");
705 $(".ui-datepicker-calendar td:eq(13) a", dp).simulate("click");
706 equal(inp.val(), "10/11/2008", "Daylight saving - Brasil 10/11/2008");
707 inp.val("10/01/2008").datepicker("show");
708 $(".ui-datepicker-calendar td:eq(14) a", dp).simulate("click");
709 equal(inp.val(), "10/12/2008", "Daylight saving - Brasil 10/12/2008");
710 inp.val("10/01/2008").datepicker("show");
711 $(".ui-datepicker-calendar td:eq(15) a", dp).simulate("click");
712 equal(inp.val(), "10/13/2008", "Daylight saving - Brasil 10/13/2008");
713 // Lebanon, Beirut - midnight change, northern hemisphere
714 inp.val("03/01/2008").datepicker("show");
715 $(".ui-datepicker-calendar td:eq(34) a", dp).simulate("click");
716 equal(inp.val(), "03/29/2008", "Daylight saving - Lebanon 03/29/2008");
717 inp.val("03/01/2008").datepicker("show");
718 $(".ui-datepicker-calendar td:eq(35) a", dp).simulate("click");
719 equal(inp.val(), "03/30/2008", "Daylight saving - Lebanon 03/30/2008");
720 inp.val("03/01/2008").datepicker("show");
721 $(".ui-datepicker-calendar td:eq(36) a", dp).simulate("click");
722 equal(inp.val(), "03/31/2008", "Daylight saving - Lebanon 03/31/2008");
723 inp.val("10/01/2008").datepicker("show");
724 $(".ui-datepicker-calendar td:eq(27) a", dp).simulate("click");
725 equal(inp.val(), "10/25/2008", "Daylight saving - Lebanon 10/25/2008");
726 inp.val("10/01/2008").datepicker("show");
727 $(".ui-datepicker-calendar td:eq(28) a", dp).simulate("click");
728 equal(inp.val(), "10/26/2008", "Daylight saving - Lebanon 10/26/2008");
729 inp.val("10/01/2008").datepicker("show");
730 $(".ui-datepicker-calendar td:eq(29) a", dp).simulate("click");
731 equal(inp.val(), "10/27/2008", "Daylight saving - Lebanon 10/27/2008");
732 // US, Eastern - AM change, northern hemisphere
733 inp.val("03/01/2008").datepicker("show");
734 $(".ui-datepicker-calendar td:eq(13) a", dp).simulate("click");
735 equal(inp.val(), "03/08/2008", "Daylight saving - US 03/08/2008");
736 inp.val("03/01/2008").datepicker("show");
737 $(".ui-datepicker-calendar td:eq(14) a", dp).simulate("click");
738 equal(inp.val(), "03/09/2008", "Daylight saving - US 03/09/2008");
739 inp.val("03/01/2008").datepicker("show");
740 $(".ui-datepicker-calendar td:eq(15) a", dp).simulate("click");
741 equal(inp.val(), "03/10/2008", "Daylight saving - US 03/10/2008");
742 inp.val("11/01/2008").datepicker("show");
743 $(".ui-datepicker-calendar td:eq(6) a", dp).simulate("click");
744 equal(inp.val(), "11/01/2008", "Daylight saving - US 11/01/2008");
745 inp.val("11/01/2008").datepicker("show");
746 $(".ui-datepicker-calendar td:eq(7) a", dp).simulate("click");
747 equal(inp.val(), "11/02/2008", "Daylight saving - US 11/02/2008");
748 inp.val("11/01/2008").datepicker("show");
749 $(".ui-datepicker-calendar td:eq(8) a", dp).simulate("click");
750 equal(inp.val(), "11/03/2008", "Daylight saving - US 11/03/2008");
751 });
752
753 var beforeShowThis = null,
754 beforeShowInput = null,
755 beforeShowInst = null,
756 beforeShowDayThis = null,
757 beforeShowDayOK = true;
758
759
760 function beforeAll(input, inst) {
761 beforeShowThis = this;
762 beforeShowInput = input;
763 beforeShowInst = inst;
764 return {currentText: "Current"};
765 }
766
767 function beforeDay(date) {
768 beforeShowDayThis = this;
769 beforeShowDayOK &= (date > new Date(2008, 1 - 1, 26) &&
770 date < new Date(2008, 3 - 1, 6));
771 return [(date.getDate() % 2 === 0), (date.getDate() % 10 === 0 ? "day10" : ""),
772 (date.getDate() % 3 === 0 ? "Divisble by 3" : "")];
773 }
774
775 test("callbacks", function() {
776 expect( 13 );
777 // Before show
778 var dp, day20, day21,
779 inp = TestHelpers.datepicker.init("#inp", {beforeShow: beforeAll}),
780 inst = $.data(inp[0], "datepicker");
781 equal($.datepicker._get(inst, "currentText"), "Today", "Before show - initial");
782 inp.val("02/04/2008").datepicker("show");
783 equal($.datepicker._get(inst, "currentText"), "Current", "Before show - changed");
784 ok(beforeShowThis.id === inp[0].id, "Before show - this OK");
785 ok(beforeShowInput.id === inp[0].id, "Before show - input OK");
786 deepEqual(beforeShowInst, inst, "Before show - inst OK");
787 inp.datepicker("hide").datepicker("destroy");
788 // Before show day
789 inp = TestHelpers.datepicker.init("#inp", {beforeShowDay: beforeDay});
790 dp = $("#ui-datepicker-div");
791 inp.val("02/04/2008").datepicker("show");
792 ok(beforeShowDayThis.id === inp[0].id, "Before show day - this OK");
793 ok(beforeShowDayOK, "Before show day - dates OK");
794 day20 = dp.find(".ui-datepicker-calendar td:contains('20')");
795 day21 = dp.find(".ui-datepicker-calendar td:contains('21')");
796 ok(!day20.is(".ui-datepicker-unselectable"), "Before show day - unselectable 20");
797 ok(day21.is(".ui-datepicker-unselectable"), "Before show day - unselectable 21");
798 ok(day20.is(".day10"), "Before show day - CSS 20");
799 ok(!day21.is(".day10"), "Before show day - CSS 21");
800 ok(!day20.attr("title"), "Before show day - title 20");
801 ok(day21.attr("title") === "Divisble by 3", "Before show day - title 21");
802 inp.datepicker("hide").datepicker("destroy");
803 });
804
805 test("beforeShowDay - tooltips with quotes", function() {
806 expect( 1 );
807 var inp, dp;
808 inp = TestHelpers.datepicker.init("#inp", {
809 beforeShowDay: function() {
810 return [ true, "", "'" ];
811 }
812 });
813 dp = $("#ui-datepicker-div");
814
815 inp.datepicker("show");
816 equal( dp.find( ".ui-datepicker-calendar td:contains('9')").attr( "title" ), "'" );
817 inp.datepicker("hide").datepicker("destroy");
818 });
819
820 test("localisation", function() {
821 expect( 24 );
822 var dp, month, day, date,
823 inp = TestHelpers.datepicker.init("#inp", $.datepicker.regional.fr);
824 inp.datepicker("option", {dateFormat: "DD, d MM yy", showButtonPanel:true, changeMonth:true, changeYear:true}).val("").datepicker("show");
825 dp = $("#ui-datepicker-div");
826 equal($(".ui-datepicker-close", dp).text(), "Fermer", "Localisation - close");
827 $(".ui-datepicker-close", dp).simulate("mouseover");
828 equal($(".ui-datepicker-prev", dp).text(), "Précédent", "Localisation - previous");
829 equal($(".ui-datepicker-current", dp).text(), "Aujourd'hui", "Localisation - current");
830 equal($(".ui-datepicker-next", dp).text(), "Suivant", "Localisation - next");
831 month = 0;
832 $(".ui-datepicker-month option", dp).each(function() {
833 equal($(this).text(), $.datepicker.regional.fr.monthNamesShort[month],
834 "Localisation - month " + month);
835 month++;
836 });
837 day = 1;
838 $(".ui-datepicker-calendar th", dp).each(function() {
839 equal($(this).text(), $.datepicker.regional.fr.dayNamesMin[day],
840 "Localisation - day " + day);
841 day = (day + 1) % 7;
842 });
843 inp.simulate("keydown", {keyCode: $.ui.keyCode.ENTER});
844 date = new Date();
845 equal(inp.val(), $.datepicker.regional.fr.dayNames[date.getDay()] + ", " +
846 date.getDate() + " " + $.datepicker.regional.fr.monthNames[date.getMonth()] +
847 " " + date.getFullYear(), "Localisation - formatting");
848 });
849
850 test("noWeekends", function() {
851 expect( 31 );
852 var i, date;
853 for (i = 1; i <= 31; i++) {
854 date = new Date(2001, 1 - 1, i);
855 deepEqual($.datepicker.noWeekends(date), [(i + 1) % 7 >= 2, ""],
856 "No weekends " + date);
857 }
858 });
859
860 test("iso8601Week", function() {
861 expect( 12 );
862 var date = new Date(2000, 12 - 1, 31);
863 equal($.datepicker.iso8601Week(date), 52, "ISO 8601 week " + date);
864 date = new Date(2001, 1 - 1, 1);
865 equal($.datepicker.iso8601Week(date), 1, "ISO 8601 week " + date);
866 date = new Date(2001, 1 - 1, 7);
867 equal($.datepicker.iso8601Week(date), 1, "ISO 8601 week " + date);
868 date = new Date(2001, 1 - 1, 8);
869 equal($.datepicker.iso8601Week(date), 2, "ISO 8601 week " + date);
870 date = new Date(2003, 12 - 1, 28);
871 equal($.datepicker.iso8601Week(date), 52, "ISO 8601 week " + date);
872 date = new Date(2003, 12 - 1, 29);
873 equal($.datepicker.iso8601Week(date), 1, "ISO 8601 week " + date);
874 date = new Date(2004, 1 - 1, 4);
875 equal($.datepicker.iso8601Week(date), 1, "ISO 8601 week " + date);
876 date = new Date(2004, 1 - 1, 5);
877 equal($.datepicker.iso8601Week(date), 2, "ISO 8601 week " + date);
878 date = new Date(2009, 12 - 1, 28);
879 equal($.datepicker.iso8601Week(date), 53, "ISO 8601 week " + date);
880 date = new Date(2010, 1 - 1, 3);
881 equal($.datepicker.iso8601Week(date), 53, "ISO 8601 week " + date);
882 date = new Date(2010, 1 - 1, 4);
883 equal($.datepicker.iso8601Week(date), 1, "ISO 8601 week " + date);
884 date = new Date(2010, 1 - 1, 10);
885 equal($.datepicker.iso8601Week(date), 1, "ISO 8601 week " + date);
886 });
887
888 test("parseDate", function() {
889 expect( 26 );
890 TestHelpers.datepicker.init("#inp");
891 var currentYear, gmtDate, fr, settings, zh;
892 ok($.datepicker.parseDate("d m y", "") == null, "Parse date empty");
893 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("d m y", "3 2 01"),
894 new Date(2001, 2 - 1, 3), "Parse date d m y");
895 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("dd mm yy", "03 02 2001"),
896 new Date(2001, 2 - 1, 3), "Parse date dd mm yy");
897 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("d m y", "13 12 01"),
898 new Date(2001, 12 - 1, 13), "Parse date d m y");
899 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("dd mm yy", "13 12 2001"),
900 new Date(2001, 12 - 1, 13), "Parse date dd mm yy");
901 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("y-o", "01-34"),
902 new Date(2001, 2 - 1, 3), "Parse date y-o");
903 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("yy-oo", "2001-347"),
904 new Date(2001, 12 - 1, 13), "Parse date yy-oo");
905 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("oo yy", "348 2004"),
906 new Date(2004, 12 - 1, 13), "Parse date oo yy");
907 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("D d M y", "Sat 3 Feb 01"),
908 new Date(2001, 2 - 1, 3), "Parse date D d M y");
909 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("d MM DD yy", "3 February Saturday 2001"),
910 new Date(2001, 2 - 1, 3), "Parse date dd MM DD yy");
911 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("DD, MM d, yy", "Saturday, February 3, 2001"),
912 new Date(2001, 2 - 1, 3), "Parse date DD, MM d, yy");
913 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("'day' d 'of' MM (''DD''), yy",
914 "day 3 of February ('Saturday'), 2001"), new Date(2001, 2 - 1, 3),
915 "Parse date 'day' d 'of' MM (''DD''), yy");
916 currentYear = new Date().getFullYear();
917 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("y-m-d", (currentYear - 2000) + "-02-03"),
918 new Date(currentYear, 2 - 1, 3), "Parse date y-m-d - default cutuff");
919 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("y-m-d", (currentYear - 2000 + 10) + "-02-03"),
920 new Date(currentYear+10, 2 - 1, 3), "Parse date y-m-d - default cutuff");
921 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("y-m-d", (currentYear - 2000 + 11) + "-02-03"),
922 new Date(currentYear-89, 2 - 1, 3), "Parse date y-m-d - default cutuff");
923 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("y-m-d", "80-02-03", {shortYearCutoff: 80}),
924 new Date(2080, 2 - 1, 3), "Parse date y-m-d - cutoff 80");
925 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("y-m-d", "81-02-03", {shortYearCutoff: 80}),
926 new Date(1981, 2 - 1, 3), "Parse date y-m-d - cutoff 80");
927 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("y-m-d", (currentYear - 2000 + 60) + "-02-03", {shortYearCutoff: "+60"}),
928 new Date(currentYear + 60, 2 - 1, 3), "Parse date y-m-d - cutoff +60");
929 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("y-m-d", (currentYear - 2000 + 61) + "-02-03", {shortYearCutoff: "+60"}),
930 new Date(currentYear - 39, 2 - 1, 3), "Parse date y-m-d - cutoff +60");
931 gmtDate = new Date(2001, 2 - 1, 3);
932 gmtDate.setMinutes(gmtDate.getMinutes() - gmtDate.getTimezoneOffset());
933 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("@", "981158400000"), gmtDate, "Parse date @");
934 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("!", "631167552000000000"), gmtDate, "Parse date !");
935
936 fr = $.datepicker.regional.fr;
937 settings = {dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames,
938 monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames};
939 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("D d M y", "Lun. 9 Avril 01", settings),
940 new Date(2001, 4 - 1, 9), "Parse date D M y with settings");
941 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("d MM DD yy", "9 Avril Lundi 2001", settings),
942 new Date(2001, 4 - 1, 9), "Parse date d MM DD yy with settings");
943 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("DD, MM d, yy", "Lundi, Avril 9, 2001", settings),
944 new Date(2001, 4 - 1, 9), "Parse date DD, MM d, yy with settings");
945 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("'jour' d 'de' MM (''DD''), yy", "jour 9 de Avril ('Lundi'), 2001", settings),
946 new Date(2001, 4 - 1, 9), "Parse date 'jour' d 'de' MM (''DD''), yy with settings");
947
948 zh = $.datepicker.regional["zh-CN"];
949 TestHelpers.datepicker.equalsDate($.datepicker.parseDate("yy M d", "2011 十一月 22", zh),
950 new Date(2011, 11 - 1, 22), "Parse date yy M d with zh-CN");
951 });
952
953 test("parseDateErrors", function() {
954 expect( 17 );
955 TestHelpers.datepicker.init("#inp");
956 var fr, settings;
957 function expectError(expr, value, error) {
958 try {
959 expr();
960 ok(false, "Parsed error " + value);
961 }
962 catch (e) {
963 equal(e, error, "Parsed error " + value);
964 }
965 }
966 expectError(function() { $.datepicker.parseDate(null, "Sat 2 01"); },
967 "Sat 2 01", "Invalid arguments");
968 expectError(function() { $.datepicker.parseDate("d m y", null); },
969 "null", "Invalid arguments");
970 expectError(function() { $.datepicker.parseDate("d m y", "Sat 2 01"); },
971 "Sat 2 01 - d m y", "Missing number at position 0");
972 expectError(function() { $.datepicker.parseDate("dd mm yy", "Sat 2 01"); },
973 "Sat 2 01 - dd mm yy", "Missing number at position 0");
974 expectError(function() { $.datepicker.parseDate("d m y", "3 Feb 01"); },
975 "3 Feb 01 - d m y", "Missing number at position 2");
976 expectError(function() { $.datepicker.parseDate("dd mm yy", "3 Feb 01"); },
977 "3 Feb 01 - dd mm yy", "Missing number at position 2");
978 expectError(function() { $.datepicker.parseDate("d m y", "3 2 AD01"); },
979 "3 2 AD01 - d m y", "Missing number at position 4");
980 expectError(function() { $.datepicker.parseDate("d m yy", "3 2 AD01"); },
981 "3 2 AD01 - dd mm yy", "Missing number at position 4");
982 expectError(function() { $.datepicker.parseDate("y-o", "01-D01"); },
983 "2001-D01 - y-o", "Missing number at position 3");
984 expectError(function() { $.datepicker.parseDate("yy-oo", "2001-D01"); },
985 "2001-D01 - yy-oo", "Missing number at position 5");
986 expectError(function() { $.datepicker.parseDate("D d M y", "D7 3 Feb 01"); },
987 "D7 3 Feb 01 - D d M y", "Unknown name at position 0");
988 expectError(function() { $.datepicker.parseDate("D d M y", "Sat 3 M2 01"); },
989 "Sat 3 M2 01 - D d M y", "Unknown name at position 6");
990 expectError(function() { $.datepicker.parseDate("DD, MM d, yy", "Saturday- Feb 3, 2001"); },
991 "Saturday- Feb 3, 2001 - DD, MM d, yy", "Unexpected literal at position 8");
992 expectError(function() { $.datepicker.parseDate("'day' d 'of' MM (''DD''), yy",
993 "day 3 of February (\"Saturday\"), 2001"); },
994 "day 3 of Mon2 ('Day7'), 2001", "Unexpected literal at position 19");
995 expectError(function() { $.datepicker.parseDate("d m y", "29 2 01"); },
996 "29 2 01 - d m y", "Invalid date");
997 fr = $.datepicker.regional.fr;
998 settings = {dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames,
999 monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames};
1000 expectError(function() { $.datepicker.parseDate("D d M y", "Mon 9 Avr 01", settings); },
1001 "Mon 9 Avr 01 - D d M y", "Unknown name at position 0");
1002 expectError(function() { $.datepicker.parseDate("D d M y", "Lun. 9 Apr 01", settings); },
1003 "Lun. 9 Apr 01 - D d M y", "Unknown name at position 7");
1004 });
1005
1006 test("Ticket #7244: date parser does not fail when too many numbers are passed into the date function", function() {
1007 expect( 4 );
1008 var date;
1009 try{
1010 date = $.datepicker.parseDate("dd/mm/yy", "18/04/19881");
1011 ok(false, "Did not properly detect an invalid date");
1012 }catch(e){
1013 ok("invalid date detected");
1014 }
1015
1016 try {
1017 date = $.datepicker.parseDate("dd/mm/yy", "18/04/1988 @ 2:43 pm");
1018 equal(date.getDate(), 18);
1019 equal(date.getMonth(), 3);
1020 equal(date.getFullYear(), 1988);
1021 } catch(e) {
1022 ok(false, "Did not properly parse date with extra text separated by whitespace");
1023 }
1024 });
1025
1026 test("formatDate", function() {
1027 expect( 16 );
1028 TestHelpers.datepicker.init("#inp");
1029 var gmtDate, fr, settings;
1030 equal($.datepicker.formatDate("d m y", new Date(2001, 2 - 1, 3)),
1031 "3 2 01", "Format date d m y");
1032 equal($.datepicker.formatDate("dd mm yy", new Date(2001, 2 - 1, 3)),
1033 "03 02 2001", "Format date dd mm yy");
1034 equal($.datepicker.formatDate("d m y", new Date(2001, 12 - 1, 13)),
1035 "13 12 01", "Format date d m y");
1036 equal($.datepicker.formatDate("dd mm yy", new Date(2001, 12 - 1, 13)),
1037 "13 12 2001", "Format date dd mm yy");
1038 equal($.datepicker.formatDate("yy-o", new Date(2001, 2 - 1, 3)),
1039 "2001-34", "Format date yy-o");
1040 equal($.datepicker.formatDate("yy-oo", new Date(2001, 2 - 1, 3)),
1041 "2001-034", "Format date yy-oo");
1042 equal($.datepicker.formatDate("D M y", new Date(2001, 2 - 1, 3)),
1043 "Sat Feb 01", "Format date D M y");
1044 equal($.datepicker.formatDate("DD MM yy", new Date(2001, 2 - 1, 3)),
1045 "Saturday February 2001", "Format date DD MM yy");
1046 equal($.datepicker.formatDate("DD, MM d, yy", new Date(2001, 2 - 1, 3)),
1047 "Saturday, February 3, 2001", "Format date DD, MM d, yy");
1048 equal($.datepicker.formatDate("'day' d 'of' MM (''DD''), yy",
1049 new Date(2001, 2 - 1, 3)), "day 3 of February ('Saturday'), 2001",
1050 "Format date 'day' d 'of' MM ('DD'), yy");
1051 gmtDate = new Date(2001, 2 - 1, 3);
1052 gmtDate.setMinutes(gmtDate.getMinutes() - gmtDate.getTimezoneOffset());
1053 equal($.datepicker.formatDate("@", gmtDate), "981158400000", "Format date @");
1054 equal($.datepicker.formatDate("!", gmtDate), "631167552000000000", "Format date !");
1055 fr = $.datepicker.regional.fr;
1056 settings = {dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames,
1057 monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames};
1058 equal($.datepicker.formatDate("D M y", new Date(2001, 4 - 1, 9), settings),
1059 "Lun. Avril 01", "Format date D M y with settings");
1060 equal($.datepicker.formatDate("DD MM yy", new Date(2001, 4 - 1, 9), settings),
1061 "Lundi Avril 2001", "Format date DD MM yy with settings");
1062 equal($.datepicker.formatDate("DD, MM d, yy", new Date(2001, 4 - 1, 9), settings),
1063 "Lundi, Avril 9, 2001", "Format date DD, MM d, yy with settings");
1064 equal($.datepicker.formatDate("'jour' d 'de' MM (''DD''), yy",
1065 new Date(2001, 4 - 1, 9), settings), "jour 9 de Avril ('Lundi'), 2001",
1066 "Format date 'jour' d 'de' MM (''DD''), yy with settings");
1067 });
1068
1069 test("Ticket 6827: formatDate day of year calculation is wrong during day lights savings time", function(){
1070 expect( 1 );
1071 var time = $.datepicker.formatDate("oo", new Date("2010/03/30 12:00:00 CDT"));
1072 equal(time, "089");
1073 });
1074
1075 test( "Ticket 7602: Stop datepicker from appearing with beforeShow event handler", function() {
1076 expect( 3 );
1077
1078 var inp, dp;
1079
1080 inp = TestHelpers.datepicker.init( "#inp", {
1081 beforeShow: function() {
1082 }
1083 });
1084 dp = $( "#ui-datepicker-div" );
1085 inp.datepicker( "show" );
1086 equal( dp.css( "display" ), "block", "beforeShow returns nothing" );
1087 inp.datepicker( "hide" ).datepicker( "destroy" );
1088
1089 inp = TestHelpers.datepicker.init( "#inp", {
1090 beforeShow: function() {
1091 return true;
1092 }
1093 });
1094 dp = $( "#ui-datepicker-div" );
1095 inp.datepicker( "show" );
1096 equal( dp.css( "display" ), "block", "beforeShow returns true" );
1097 inp.datepicker( "hide" );
1098 inp.datepicker( "destroy" );
1099
1100 inp = TestHelpers.datepicker.init( "#inp", {
1101 beforeShow: function() {
1102 return false;
1103 }
1104 });
1105 dp = $( "#ui-datepicker-div" );
1106 inp.datepicker( "show" );
1107 equal( dp.css( "display" ), "none","beforeShow returns false" );
1108 inp.datepicker( "destroy" );
1109 });
1110
1111 })(jQuery);

  ViewVC Help
Powered by ViewVC 1.1.20