diff options
Diffstat (limited to 'public/bower_components/bootstrap-datepicker/tests/suites/options.js')
-rw-r--r-- | public/bower_components/bootstrap-datepicker/tests/suites/options.js | 1802 |
1 files changed, 1802 insertions, 0 deletions
diff --git a/public/bower_components/bootstrap-datepicker/tests/suites/options.js b/public/bower_components/bootstrap-datepicker/tests/suites/options.js new file mode 100644 index 0000000..5a22c9f --- /dev/null +++ b/public/bower_components/bootstrap-datepicker/tests/suites/options.js @@ -0,0 +1,1802 @@ +module('Options', { + setup: function(){}, + teardown: function(){ + $('#qunit-fixture *').each(function(){ + var t = $(this); + if ('datepicker' in t.data()) + t.datepicker('remove'); + }); + } +}); + +test('Autoclose', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + autoclose: true + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + + input.focus(); + ok(picker.is(':visible'), 'Picker is visible'); + target = picker.find('.datepicker-days tbody td:nth(7)'); + equal(target.text(), '4'); // Mar 4 + + target.click(); + ok(picker.is(':not(:visible)'), 'Picker is hidden'); + datesEqual(dp.dates[0], UTCDate(2012, 2, 4)); + datesEqual(dp.viewDate, UTCDate(2012, 2, 4)); +}); + +test('Custom date formatter functions', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2015-09-18T00:00:00.000Z') + .datepicker({ + format: { + /* + Say our UI should display a week ahead, + but textbox should store the actual date. + This is useful if we need UI to select local dates, + but store in UTC + */ + toDisplay: function (date, format, language) { + var d = new Date(date); + d.setDate(d.getDate() - 7); + return d.toISOString(); + }, + toValue: function (date, format, language) { + var d = new Date(date); + d.setDate(d.getDate() + 7); + return new Date(d); + } + }, + autoclose: true + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + //Value is ISO format and is 7 days older than UI + equal(input.val(), '2015-09-18T00:00:00.000Z'); + datesEqual(dp.dates[0], UTCDate(2015, 8, 25)); + datesEqual(dp.viewDate, UTCDate(2015, 8, 25)); + + input.focus(); + ok(picker.is(':visible'), 'Picker is visible'); + target = picker.find('.datepicker-days tbody td:nth(5)'); + equal(target.text(), '4'); // Sep 4 + + target.click(); + ok(picker.is(':not(:visible)'), 'Picker is hidden'); + //Value is now 28th Aug 2015 in ISO format + //and is 7 days older than UI + equal(input.val(), '2015-08-28T00:00:00.000Z'); + datesEqual(dp.dates[0], UTCDate(2015, 8, 4)); + datesEqual(dp.viewDate, UTCDate(2015, 8, 4)); +}); + +test('Startview: year view (integer)', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + startView: 1 + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); + ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible'); + ok(picker.find('.datepicker-years').is(':not(:visible)'), 'Years view hidden'); + ok(picker.find('.datepicker-decades').is(':not(:visible)'), 'Decades view hidden'); + ok(picker.find('.datepicker-centuries').is(':not(:visible)'), 'Centuries view hidden'); +}); + +test('Startview: year view (string)', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + startView: 'year' + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); + ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible'); + ok(picker.find('.datepicker-years').is(':not(:visible)'), 'Years view hidden'); + ok(picker.find('.datepicker-decades').is(':not(:visible)'), 'Decades view hidden'); + ok(picker.find('.datepicker-centuries').is(':not(:visible)'), 'Centuries view hidden'); +}); + +test('Startview: decade view (integer)', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + startView: 2 + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); + ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden'); + ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible'); + ok(picker.find('.datepicker-decades').is(':not(:visible)'), 'Decades view hidden'); + ok(picker.find('.datepicker-centuries').is(':not(:visible)'), 'Centuries view hidden'); +}); + +test('Startview: decade view (string)', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + startView: 'decade' + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); + ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden'); + ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible'); + ok(picker.find('.datepicker-decades').is(':not(:visible)'), 'Decades view hidden'); + ok(picker.find('.datepicker-centuries').is(':not(:visible)'), 'Centuries view hidden'); +}); + +test('Startview: century view (integer)', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + startView: 3 + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); + ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden'); + ok(picker.find('.datepicker-years').is(':not(:visible)'), 'Years view hidden'); + ok(picker.find('.datepicker-decades').is(':visible'), 'Decades view visible'); + ok(picker.find('.datepicker-centuries').is(':not(:visible)'), 'Centuries view hidden'); +}); + +test('Startview: century view (string)', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + startView: 'century' + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); + ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden'); + ok(picker.find('.datepicker-years').is(':not(:visible)'), 'Years view hidden'); + ok(picker.find('.datepicker-decades').is(':visible'), 'Decades view visible'); + ok(picker.find('.datepicker-centuries').is(':not(:visible)'), 'Centuries view hidden'); +}); + +test('Startview: millennium view (integer)', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + startView: 4 + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); + ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden'); + ok(picker.find('.datepicker-years').is(':not(:visible)'), 'Years view hidden'); + ok(picker.find('.datepicker-decades').is(':not(:visible)'), 'Decades view hidden'); + ok(picker.find('.datepicker-centuries').is(':visible'), 'Centuries view visible'); +}); + +test('Startview: millennium view (string)', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + startView: 'millennium' + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); + ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden'); + ok(picker.find('.datepicker-years').is(':not(:visible)'), 'Years view hidden'); + ok(picker.find('.datepicker-decades').is(':not(:visible)'), 'Decades view hidden'); + ok(picker.find('.datepicker-centuries').is(':visible'), 'Centuries view visible'); +}); + +test('Today Button: today button not default', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd' + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); + ok(picker.find('.datepicker-days tfoot .today').is(':not(:visible)'), 'Today button not visible'); +}); + +test('Today Button: today visibility when enabled', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + todayBtn: true + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); + ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible'); + + picker.find('.datepicker-days thead th.datepicker-switch').click(); + ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible'); + ok(picker.find('.datepicker-months tfoot .today').is(':visible'), 'Today button visible'); + + picker.find('.datepicker-months thead th.datepicker-switch').click(); + ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible'); + ok(picker.find('.datepicker-years tfoot .today').is(':visible'), 'Today button visible'); +}); + +test('Today Button: data-api', function(){ + var input = $('<input data-date-today-btn="true" />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd' + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); + ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible'); +}); + +test('Today Button: moves to today\'s date', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + todayBtn: true + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); + ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible'); + + target = picker.find('.datepicker-days tfoot .today'); + target.click(); + + var d = new Date(), + today = UTCDate(d.getFullYear(), d.getMonth(), d.getDate()); + datesEqual(dp.viewDate, today); + datesEqual(dp.dates[0], UTCDate(2012, 2, 5)); +}); + +test('Today Button: moves to days view', function(){ + var viewModes = $.fn.datepicker.DPGlobal.viewModes; + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + startView: viewModes.length - 1, + todayBtn: true + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + target = picker.find('tfoot .today').filter(':visible'); + + target.click(); + ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible'); +}); + +test('Today Button: "linked" selects today\'s date', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + todayBtn: "linked" + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); + ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible'); + + target = picker.find('.datepicker-days tfoot .today'); + target.click(); + + var d = new Date(), + today = UTCDate(d.getFullYear(), d.getMonth(), d.getDate()); + datesEqual(dp.viewDate, today); + datesEqual(dp.dates[0], today); +}); + +test('Today Highlight: today\'s date is not highlighted by default', patch_date(function(Date){ + Date.now = UTCDate(2012, 2, 15); + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd' + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); + equal(picker.find('.datepicker-days thead .datepicker-switch').text(), 'March 2012', 'Title is "March 2012"'); + + target = picker.find('.datepicker-days tbody td:contains(15)'); + ok(!target.hasClass('today'), 'Today is not marked with "today" class'); + target = picker.find('.datepicker-days tbody td:contains(14)'); + ok(!target.hasClass('today'), 'Yesterday is not marked with "today" class'); + target = picker.find('.datepicker-days tbody td:contains(16)'); + ok(!target.hasClass('today'), 'Tomorrow is not marked with "today" class'); +})); + +test('Today Highlight: today\'s date is highlighted when not active', patch_date(function(Date){ + Date.now = new Date(2012, 2, 15); + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + todayHighlight: true + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); + equal(picker.find('.datepicker-days thead .datepicker-switch').text(), 'March 2012', 'Title is "March 2012"'); + + target = picker.find('.datepicker-days tbody td:contains(15)'); + ok(target.hasClass('today'), 'Today is marked with "today" class'); + target = picker.find('.datepicker-days tbody td:contains(14)'); + ok(!target.hasClass('today'), 'Yesterday is not marked with "today" class'); + target = picker.find('.datepicker-days tbody td:contains(16)'); + ok(!target.hasClass('today'), 'Tomorrow is not marked with "today" class'); +})); + +test('Clear Button: clear visibility when enabled', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + clearBtn: true + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); + ok(picker.find('.datepicker-days tfoot .clear').is(':visible'), 'Clear button visible'); + + picker.find('.datepicker-days thead th.datepicker-switch').click(); + ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible'); + ok(picker.find('.datepicker-months tfoot .clear').is(':visible'), 'Clear button visible'); + + picker.find('.datepicker-months thead th.datepicker-switch').click(); + ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible'); + ok(picker.find('.datepicker-years tfoot .clear').is(':visible'), 'Clear button visible'); +}); + +test('Clear Button: clears input value', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + clearBtn: true + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); + ok(picker.find('.datepicker-days tfoot .clear').is(':visible'), 'Today button visible'); + + target = picker.find('.datepicker-days tfoot .clear'); + target.click(); + + equal(input.val(),'',"Input value has been cleared."); + ok(picker.is(':visible'), 'Picker is visible'); +}); + +test('Clear Button: hides datepicker if autoclose is on', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + clearBtn: true, + autoclose: true + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); + ok(picker.find('.datepicker-days tfoot .clear').is(':visible'), 'Today button visible'); + + target = picker.find('.datepicker-days tfoot .clear'); + target.click(); + + equal(input.val(),'',"Input value has been cleared."); + ok(picker.is(':not(:visible)'), 'Picker is hidden'); +}); + +test('Active Toggle Default: when active date is selected it is not unset', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd' + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + // open our datepicker + input.focus(); + + // Initial value is selected + ok(dp.dates.contains(UTCDate(2012, 2, 5)) !== -1, '2012-03-05 selected'); + + // click on our active date + target = picker.find('.datepicker-days .day.active'); + target.click(); + + // make sure it's still set + equal(input.val(), '2012-03-05', "Input value has not been cleared."); +}); + +test('Active Toggle Enabled (single date): when active date is selected it is unset', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + toggleActive: true + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + // open our datepicker + input.focus(); + + // Initial value is selected + ok(dp.dates.contains(UTCDate(2012, 2, 5)) !== -1, '2012-03-05 selected'); + + // click on our active date + target = picker.find('.datepicker-days .day.active'); + target.click(); + + // make sure it's no longer set + equal(input.val(), '', "Input value has been cleared."); +}); + +test('Active Toggle Multidate Default: when one of the active dates is selected it is unset', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + multidate: true + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + // open our datepicker + input.focus(); + + // Initial value is selected + ok(dp.dates.contains(UTCDate(2012, 2, 5)) !== -1, '2012-03-05 in dates'); + + // Select additional date + target = picker.find('.datepicker-days tbody td:nth(7)'); + target.click(); + datesEqual(dp.dates.get(-1), UTCDate(2012, 2, 4), '2012-03-04 in dates'); + datesEqual(dp.viewDate, UTCDate(2012, 2, 4)); + equal(input.val(), '2012-03-05,2012-03-04'); + + // Unselect additional date + target = picker.find('.datepicker-days tbody td:nth(7)'); + target.click(); + ok(dp.dates.contains(UTCDate(2012, 2, 4)) === -1, '2012-03-04 no longer in dates'); + datesEqual(dp.viewDate, UTCDate(2012, 2, 4)); + equal(input.val(), '2012-03-05'); +}); + +test('Active Toggle Disabled: when active date is selected it remains', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + toggleActive: false + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + // open our datepicker + input.focus(); + + // Initial value is selected + ok(dp.dates.contains(UTCDate(2012, 2, 5)) !== -1, '2012-03-05 selected'); + + // click on our active date + target = picker.find('.datepicker-days .day.active'); + target.click(); + + // make sure it's still set + ok(dp.dates.contains(UTCDate(2012, 2, 5)) !== -1, '2012-03-05 still selected'); + datesEqual(dp.viewDate, UTCDate(2012, 2, 5)); + equal(input.val(), '2012-03-05'); +}); + +test('Active Toggle Multidate Disabled: when activeToggle is set to false, but multidate is set, the option is ignored and selecting an active date it is unset', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + multidate: true, + toggleActive: false + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + // open our datepicker + input.focus(); + + // Initial value is selected + ok(dp.dates.contains(UTCDate(2012, 2, 5)) !== -1, '2012-03-05 in dates'); + + // Select additional date + target = picker.find('.datepicker-days tbody td:nth(7)'); + target.click(); + datesEqual(dp.dates.get(-1), UTCDate(2012, 2, 4), '2012-03-04 in dates'); + datesEqual(dp.viewDate, UTCDate(2012, 2, 4)); + equal(input.val(), '2012-03-05,2012-03-04'); + + // Unselect additional date + target = picker.find('.datepicker-days tbody td:nth(7)'); + target.click(); + ok(dp.dates.contains(UTCDate(2012, 2, 4)) === -1, '2012-03-04 no longer in dates'); + datesEqual(dp.viewDate, UTCDate(2012, 2, 4)); + equal(input.val(), '2012-03-05'); +}); + +test('DaysOfWeekDisabled', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-10-26') + .datepicker({ + format: 'yyyy-mm-dd', + daysOfWeekDisabled: '1,5' + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + target = picker.find('.datepicker-days tbody td:nth(22)'); + ok(target.hasClass('disabled'), 'Day of week is disabled'); + target = picker.find('.datepicker-days tbody td:nth(24)'); + ok(!target.hasClass('disabled'), 'Day of week is enabled'); + target = picker.find('.datepicker-days tbody td:nth(26)'); + ok(target.hasClass('disabled'), 'Day of week is disabled'); +}); + +test('DaysOfWeekHighlighted', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-10-26') + .datepicker({ + format: 'yyyy-mm-dd', + startDate: '2012-10-02', + daysOfWeekHighlighted: '1,5' + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + target = picker.find('.datepicker-days tbody td:nth(0)'); + ok(!target.hasClass('highlighted'), 'Day of week is not highlighted'); + target = picker.find('.datepicker-days tbody td:nth(22)'); + ok(target.hasClass('highlighted'), 'Day of week is highlighted'); + target = picker.find('.datepicker-days tbody td:nth(24)'); + ok(!target.hasClass('highlighted'), 'Day of week is not highlighted'); + target = picker.find('.datepicker-days tbody td:nth(26)'); + ok(target.hasClass('highlighted'), 'Day of week is highlighted'); +}); + +test('DatesDisabled', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-10-26') + .datepicker({ + format: 'yyyy-mm-dd', + datesDisabled: ['2012-10-1', '2012-10-10', '2012-10-20'] + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + target = picker.find('.datepicker-days tbody td:nth(1)'); + ok(target.hasClass('disabled'), 'Day of week is disabled'); + ok(target.hasClass('disabled-date'), 'Date is disabled'); + target = picker.find('.datepicker-days tbody td:nth(2)'); + ok(!target.hasClass('disabled'), 'Day of week is enabled'); + target = picker.find('.datepicker-days tbody td:nth(10)'); + ok(target.hasClass('disabled'), 'Day of week is disabled'); + ok(target.hasClass('disabled-date'), 'Date is disabled'); + target = picker.find('.datepicker-days tbody td:nth(11)'); + ok(!target.hasClass('disabled'), 'Day of week is enabled'); + target = picker.find('.datepicker-days tbody td:nth(20)'); + ok(target.hasClass('disabled'), 'Day of week is disabled'); + ok(target.hasClass('disabled-date'), 'Date is disabled'); + target = picker.find('.datepicker-days tbody td:nth(21)'); + ok(!target.hasClass('disabled'), 'Day of week is enabled'); +}); + +test('DatesDisabled as attribute', function(){ + var input = $('<input data-date-dates-disabled="2012-10-1,2012-10-10,2012-10-20" />') + .appendTo('#qunit-fixture') + .val('2012-10-26') + .datepicker({ + format: 'yyyy-mm-dd' + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + target = picker.find('.datepicker-days tbody td:nth(1)'); + ok(target.hasClass('disabled'), 'Day of week is disabled'); + ok(target.hasClass('disabled-date'), 'Date is disabled'); + target = picker.find('.datepicker-days tbody td:nth(2)'); + ok(!target.hasClass('disabled'), 'Day of week is enabled'); + target = picker.find('.datepicker-days tbody td:nth(10)'); + ok(target.hasClass('disabled'), 'Day of week is disabled'); + ok(target.hasClass('disabled-date'), 'Date is disabled'); + target = picker.find('.datepicker-days tbody td:nth(11)'); + ok(!target.hasClass('disabled'), 'Day of week is enabled'); + target = picker.find('.datepicker-days tbody td:nth(20)'); + ok(target.hasClass('disabled'), 'Day of week is disabled'); + ok(target.hasClass('disabled-date'), 'Date is disabled'); + target = picker.find('.datepicker-days tbody td:nth(21)'); + ok(!target.hasClass('disabled'), 'Day of week is enabled'); +}); + +test('BeforeShowDay', function(){ + + var beforeShowDay = function(date) { + switch (date.getDate()){ + case 25: + return { + tooltip: 'Example tooltip', + classes: 'active' + }; + case 26: + return "test26"; + case 27: + return {enabled: false, classes: 'test27'}; + case 28: + return false; + case 30: + return { content: "foo" + date.getDate() } + } + }; + + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-10-26') + .datepicker({ + format: 'yyyy-mm-dd', + beforeShowDay: beforeShowDay + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + target = picker.find('.datepicker-days tbody td:nth(25)'); + equal(target.attr('title'), 'Example tooltip', '25th has tooltip'); + ok(!target.hasClass('disabled'), '25th is enabled'); + target = picker.find('.datepicker-days tbody td:nth(26)'); + ok(target.hasClass('test26'), '26th has test26 class'); + ok(!target.hasClass('disabled'), '26th is enabled'); + target = picker.find('.datepicker-days tbody td:nth(27)'); + ok(target.hasClass('test27'), '27th has test27 class'); + ok(target.hasClass('disabled'), '27th is disabled'); + target = picker.find('.datepicker-days tbody td:nth(28)'); + ok(target.hasClass('disabled'), '28th is disabled'); + target = picker.find('.datepicker-days tbody td:nth(29)'); + ok(!target.hasClass('disabled'), '29th is enabled'); + target = picker.find('.datepicker-days tbody td:nth(30)'); + ok(target.text() == "foo30", '30th has custom content'); +}); + +test('BeforeShowMonth regress .day content', function() { + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-10-26') + .datepicker({ + format: 'yyyy-mm-dd', + beforeShowDay: function(date) { + return { + content: '<strong>foo123</strong>' + }; + } + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + target = picker.find('.datepicker-days tbody td:nth(30)'); + target.trigger('click'); + datesEqual(dp.viewDate, UTCDate(2012, 9, 30)); +}); + +test('BeforeShowMonth', function () { + + var beforeShowMonth = function (date) { + switch (date.getMonth()) { + case 0: + return { + tooltip: 'Example tooltip', + classes: 'active' + }; + case 2: + return "testMarch"; + case 4: + return {enabled: false, classes: 'testMay'}; + case 5: + return false; + } + }; + + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-10-26') + .datepicker({ + format: 'yyyy-mm-dd', + beforeShowMonth: beforeShowMonth + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + target = picker.find('.datepicker-months tbody span:nth(0)'); + equal(target.attr('title'), 'Example tooltip', '1st has tooltip'); + ok(!target.hasClass('disabled'), 'January is enabled'); + target = picker.find('.datepicker-months tbody span:nth(2)'); + ok(target.hasClass('testMarch'), 'March has testMarch class'); + ok(!target.hasClass('disabled'), 'March enabled'); + target = picker.find('.datepicker-months tbody span:nth(4)'); + ok(target.hasClass('testMay'), 'May has testMay class'); + ok(target.hasClass('disabled'), 'May is disabled'); + target = picker.find('.datepicker-months tbody span:nth(5)'); + ok(target.hasClass('disabled'), 'June is disabled'); + target = picker.find('.datepicker-months tbody span:nth(6)'); + ok(!target.hasClass('disabled'), 'July is enabled'); +}); + + +test('BeforeShowYear', function () { + + var beforeShowYear = function (date) { + switch (date.getFullYear()) { + case 2013: + return { + tooltip: 'Example tooltip', + classes: 'active' + }; + case 2014: + return "test2014"; + case 2015: + return {enabled: false, classes: 'test2015'}; + case 2016: + return false; + } + }; + + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-10-26') + .datepicker({ + format: 'yyyy-mm-dd', + beforeShowYear: beforeShowYear + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + target = picker.find('.datepicker-years tbody span:nth(4)'); + equal(target.attr('title'), 'Example tooltip', '5th has tooltip'); + ok(!target.hasClass('disabled'), '2013, 5th is enabled'); + target = picker.find('.datepicker-years tbody span:nth(5)'); + ok(target.hasClass('test2014'), '6th has test2014 class'); + ok(!target.hasClass('disabled'), '2014, 6th is enabled'); + target = picker.find('.datepicker-years tbody span:nth(6)'); + ok(target.hasClass('test2015'), '2015, 7th has test2015 class'); + ok(target.hasClass('disabled'), '2015, 7th is disabled'); + target = picker.find('.datepicker-years tbody span:nth(7)'); + ok(target.hasClass('disabled'), '2016, 8th is disabled'); + target = picker.find('.datepicker-years tbody span:nth(8)'); + ok(!target.hasClass('disabled'), '2017, 9th is enabled'); +}); + +test('beforeShowDecade', function () { + var beforeShowDecade = function (date) { + switch (date.getFullYear()) { + case 2030: + return { + tooltip: 'Example tooltip', + classes: 'active' + }; + case 2040: + return "test2040"; + case 2050: + return {enabled: false, classes: 'test2050'}; + case 2060: + return false; + } + }; + + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('03/05/2012') + .datepicker({ beforeShowDecade: beforeShowDecade }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + target = picker.find('.datepicker-decades tbody span:nth(4)'); + equal(target.attr('title'), 'Example tooltip', '5th has tooltip'); + ok(!target.hasClass('disabled'), '2030, 5th is enabled'); + + target = picker.find('.datepicker-decades tbody span:nth(5)'); + ok(target.hasClass('test2040'), '6th has test2040 class'); + ok(!target.hasClass('disabled'), '2040, 6th is enabled'); + + target = picker.find('.datepicker-decades tbody span:nth(6)'); + ok(target.hasClass('test2050'), '2050, 7th has test2050 class'); + ok(target.hasClass('disabled'), '2050, 7th is disabled'); + + target = picker.find('.datepicker-decades tbody span:nth(7)'); + ok(target.hasClass('disabled'), '2060, 8th is disabled'); + + target = picker.find('.datepicker-decades tbody span:nth(8)'); + ok(!target.hasClass('disabled'), '2070, 9th is enabled'); +}); + +test('beforeShowCentury', function () { + var beforeShowCentury = function (date) { + switch (date.getFullYear()) { + case 2300: + return { + tooltip: 'Example tooltip', + classes: 'active' + }; + case 2400: + return "test2400"; + case 2500: + return {enabled: false, classes: 'test2500'}; + case 2600: + return false; + } + }; + + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('03/05/2012') + .datepicker({ beforeShowCentury: beforeShowCentury }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + target = picker.find('.datepicker-centuries tbody span:nth(4)'); + equal(target.attr('title'), 'Example tooltip', '5th has tooltip'); + ok(!target.hasClass('disabled'), '2300, 5th is enabled'); + + target = picker.find('.datepicker-centuries tbody span:nth(5)'); + ok(target.hasClass('test2400'), '6th has test2400 class'); + ok(!target.hasClass('disabled'), '2400, 6th is enabled'); + + target = picker.find('.datepicker-centuries tbody span:nth(6)'); + ok(target.hasClass('test2500'), '2500, 7th has test2500 class'); + ok(target.hasClass('disabled'), '2500, 7th is disabled'); + + target = picker.find('.datepicker-centuries tbody span:nth(7)'); + ok(target.hasClass('disabled'), '2600, 8th is disabled'); + + target = picker.find('.datepicker-centuries tbody span:nth(8)'); + ok(!target.hasClass('disabled'), '2700, 9th is enabled'); +}); + +test('Orientation: values are parsed correctly', function(){ + + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-10-26') + .datepicker({ + format: 'yyyy-mm-dd' + }), + dp = input.data('datepicker'); + + equal(dp.o.orientation.x, 'auto'); + equal(dp.o.orientation.y, 'auto'); + + dp._process_options({orientation: ''}); + equal(dp.o.orientation.x, 'auto', 'Empty value'); + equal(dp.o.orientation.y, 'auto', 'Empty value'); + + dp._process_options({orientation: 'left'}); + equal(dp.o.orientation.x, 'left', '"left"'); + equal(dp.o.orientation.y, 'auto', '"left"'); + + dp._process_options({orientation: 'right'}); + equal(dp.o.orientation.x, 'right', '"right"'); + equal(dp.o.orientation.y, 'auto', '"right"'); + + dp._process_options({orientation: 'top'}); + equal(dp.o.orientation.x, 'auto', '"top"'); + equal(dp.o.orientation.y, 'top', '"top"'); + + dp._process_options({orientation: 'bottom'}); + equal(dp.o.orientation.x, 'auto', '"bottom"'); + equal(dp.o.orientation.y, 'bottom', '"bottom"'); + + dp._process_options({orientation: 'left top'}); + equal(dp.o.orientation.x, 'left', '"left top"'); + equal(dp.o.orientation.y, 'top', '"left top"'); + + dp._process_options({orientation: 'left bottom'}); + equal(dp.o.orientation.x, 'left', '"left bottom"'); + equal(dp.o.orientation.y, 'bottom', '"left bottom"'); + + dp._process_options({orientation: 'right top'}); + equal(dp.o.orientation.x, 'right', '"right top"'); + equal(dp.o.orientation.y, 'top', '"right top"'); + + dp._process_options({orientation: 'right bottom'}); + equal(dp.o.orientation.x, 'right', '"right bottom"'); + equal(dp.o.orientation.y, 'bottom', '"right bottom"'); + + dp._process_options({orientation: 'left right'}); + equal(dp.o.orientation.x, 'left', '"left right"'); + equal(dp.o.orientation.y, 'auto', '"left right"'); + + dp._process_options({orientation: 'right left'}); + equal(dp.o.orientation.x, 'right', '"right left"'); + equal(dp.o.orientation.y, 'auto', '"right left"'); + + dp._process_options({orientation: 'top bottom'}); + equal(dp.o.orientation.x, 'auto', '"top bottom"'); + equal(dp.o.orientation.y, 'top', '"top bottom"'); + + dp._process_options({orientation: 'bottom top'}); + equal(dp.o.orientation.x, 'auto', '"bottom top"'); + equal(dp.o.orientation.y, 'bottom', '"bottom top"'); + + dp._process_options({orientation: 'foo bar'}); + equal(dp.o.orientation.x, 'auto', '"foo bar"'); + equal(dp.o.orientation.y, 'auto', '"foo bar"'); + + dp._process_options({orientation: 'foo left'}); + equal(dp.o.orientation.x, 'left', '"foo left"'); + equal(dp.o.orientation.y, 'auto', '"foo left"'); + + dp._process_options({orientation: 'top bar'}); + equal(dp.o.orientation.x, 'auto', '"top bar"'); + equal(dp.o.orientation.y, 'top', '"top bar"'); +}); + +test('startDate', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-10-26') + .datepicker({ + format: 'yyyy-mm-dd', + startDate: new Date(2012, 9, 26) + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + target = picker.find('.datepicker-days tbody td:nth(25)'); + ok(target.hasClass('disabled'), 'Previous day is disabled'); + target = picker.find('.datepicker-days tbody td:nth(26)'); + ok(!target.hasClass('disabled'), 'Specified date is enabled'); + target = picker.find('.datepicker-days tbody td:nth(27)'); + ok(!target.hasClass('disabled'), 'Next day is enabled'); +}); + +test('endDate', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-10-26') + .datepicker({ + format: 'yyyy-mm-dd', + endDate: new Date(2012, 9, 26) + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + target = picker.find('.datepicker-days tbody td:nth(25)'); + ok(!target.hasClass('disabled'), 'Previous day is enabled'); + target = picker.find('.datepicker-days tbody td:nth(26)'); + ok(!target.hasClass('disabled'), 'Specified date is enabled'); + target = picker.find('.datepicker-days tbody td:nth(27)'); + ok(target.hasClass('disabled'), 'Next day is disabled'); +}); + +test('Multidate', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + multidate: true + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + + // Initial value is selected + ok(dp.dates.contains(UTCDate(2012, 2, 5)) !== -1, '2012-03-05 (initial date) in dates'); + + // Select first + target = picker.find('.datepicker-days tbody td:nth(7)'); + equal(target.text(), '4'); // Mar 4 + + target.click(); + datesEqual(dp.dates.get(-1), UTCDate(2012, 2, 4), '2012-03-04 in dates'); + datesEqual(dp.viewDate, UTCDate(2012, 2, 4)); + equal(input.val(), '2012-03-05,2012-03-04'); + + // Select second + target = picker.find('.datepicker-days tbody td:nth(15)'); + equal(target.text(), '12'); // Mar 12 + + target.click(); + datesEqual(dp.dates.get(-1), UTCDate(2012, 2, 12), '2012-03-12 in dates'); + datesEqual(dp.viewDate, UTCDate(2012, 2, 12)); + equal(input.val(), '2012-03-05,2012-03-04,2012-03-12'); + + // Deselect first + target = picker.find('.datepicker-days tbody td:nth(7)'); + equal(target.text(), '4'); // Mar 4 + + target.click(); + ok(dp.dates.contains(UTCDate(2012, 2, 4)) === -1, '2012-03-04 no longer in dates'); + datesEqual(dp.viewDate, UTCDate(2012, 2, 4)); + equal(input.val(), '2012-03-05,2012-03-12'); +}); + +test('Multidate with limit', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + multidate: 2 + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + + // Initial value is selected + ok(dp.dates.contains(UTCDate(2012, 2, 5)) !== -1, '2012-03-05 (initial date) in dates'); + + // Select first + target = picker.find('.datepicker-days tbody td:nth(7)'); + equal(target.text(), '4'); // Mar 4 + + target.click(); + datesEqual(dp.dates.get(-1), UTCDate(2012, 2, 4), '2012-03-04 in dates'); + datesEqual(dp.viewDate, UTCDate(2012, 2, 4)); + equal(input.val(), '2012-03-05,2012-03-04'); + + // Select second + target = picker.find('.datepicker-days tbody td:nth(15)'); + equal(target.text(), '12'); // Mar 12 + + target.click(); + datesEqual(dp.dates.get(-1), UTCDate(2012, 2, 12), '2012-03-12 in dates'); + datesEqual(dp.viewDate, UTCDate(2012, 2, 12)); + equal(input.val(), '2012-03-04,2012-03-12'); + + // Select third + target = picker.find('.datepicker-days tbody td:nth(20)'); + equal(target.text(), '17'); // Mar 17 + + target.click(); + datesEqual(dp.dates.get(-1), UTCDate(2012, 2, 17), '2012-03-17 in dates'); + ok(dp.dates.contains(UTCDate(2012, 2, 4)) === -1, '2012-03-04 no longer in dates'); + datesEqual(dp.viewDate, UTCDate(2012, 2, 17)); + equal(input.val(), '2012-03-12,2012-03-17'); +}); + +test('Multidate Separator', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + multidate: true, + multidateSeparator: ' ' + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + + // Select first + target = picker.find('.datepicker-days tbody td:nth(7)'); + equal(target.text(), '4'); // Mar 4 + + target.click(); + equal(input.val(), '2012-03-05 2012-03-04'); + + // Select second + target = picker.find('.datepicker-days tbody td:nth(15)'); + equal(target.text(), '12'); // Mar 12 + + target.click(); + equal(input.val(), '2012-03-05 2012-03-04 2012-03-12'); +}); + + +test("Picker is shown on input focus when showOnFocus is not defined", function () { + + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2014-01-01') + .datepicker({ + }), + dp = input.data('datepicker'), + picker = dp.picker; + + input.focus(); + + ok(picker.is(":visible"), "Datepicker is visible"); + +}); + +test("Picker is shown on input focus when showOnFocus is true", function () { + + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2014-01-01') + .datepicker({ + showOnFocus: true + }), + dp = input.data('datepicker'), + picker = dp.picker; + + input.focus(); + + ok(picker.is(":visible"), "Datepicker is visible"); + +}); + +test("Picker is hidden on input focus when showOnFocus is false", function () { + + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2014-01-01') + .datepicker({ + showOnFocus: false + }), + dp = input.data('datepicker'), + picker = dp.picker; + + input.focus(); + + ok(picker.is(":hidden"), "Datepicker is hidden"); + +}); + +test('Container', function(){ + var testContainer = $('<div class="date-picker-container"/>') + .appendTo('#qunit-fixture'), + input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-10-26') + .datepicker({ + format: 'yyyy-mm-dd', + container: '.date-picker-container', + startDate: new Date(2012, 9, 26) + }), + dp = input.data('datepicker'), + target = dp.picker; + input.focus(); + equal(target.parent()[0], testContainer[0], 'Container is not the testContainer that was specificed'); +}); + +test('Default View Date (Object)', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .datepicker({ + format: 'yyyy-mm-dd', + defaultViewDate: { year: 1977, month: 04, day: 25 } + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + + equal(picker.find('.datepicker-days thead .datepicker-switch').text(), 'May 1977'); +}); + +test('Default View Date (Date)', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .datepicker({ + format: 'yyyy-mm-dd', + defaultViewDate: new Date(1977, 4, 25) + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + + equal(picker.find('.datepicker-days thead .datepicker-switch').text(), 'May 1977'); +}); + +test('Default View Date (String)', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .datepicker({ + format: 'yyyy-mm-dd', + defaultViewDate: "1977-05-24" + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + + equal(picker.find('.datepicker-days thead .datepicker-switch').text(), 'May 1977'); +}); + +test('Immediate Updates', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2014-01-01') + .datepicker({ + format: 'yyyy-mm-dd', + immediateUpdates: true + }), + dp = input.data('datepicker'), + picker = dp.picker; + + // Change month + input.focus(); + picker.find('.datepicker-days .next').click(); + equal(input.val(), '2014-02-01'); + + // Change year + picker.find('.datepicker-days .datepicker-switch').click(); + picker.find('.datepicker-months .next').click(); + equal(input.val(), '2015-02-01'); + + // Change decade set (doesn't update input) + picker.find('.datepicker-months .datepicker-switch').click(); + picker.find('.datepicker-years .next').click(); + equal(input.val(), '2015-02-01'); + + // Change century set (doesn't update input) + picker.find('.datepicker-years .datepicker-switch').click(); + picker.find('.datepicker-decades .next').click(); + equal(input.val(), '2015-02-01'); + + // Change millennium set (doesn't update input) + picker.find('.datepicker-decades .datepicker-switch').click(); + picker.find('.datepicker-centuries .next').click(); + equal(input.val(), '2015-02-01'); +}); + +test('forceParse: false on enter on invalid date', function () { + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('123456789') + .datepicker({forceParse: false}) + .focus(); + + input.trigger({ + type: 'keydown', + keyCode: 13, + shiftKey: false + }); + + equal(input.val(), '123456789', 'date not parsed'); +}); + +test('forceParse: false on mousedown on invalid date', function () { + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('123456789') + .datepicker({forceParse: false}) + .focus(); + + $(document).trigger({ + type: 'mousedown' + }); + + equal(input.val(), '123456789', 'date not parsed'); +}); + +//datepicker-dropdown + +test('Enable on readonly options (default)', function(){ + var input = $('<input readonly="readonly" />') + .appendTo('#qunit-fixture') + .datepicker({format: "dd-mm-yyyy"}), + dp = input.data('datepicker'), + picker = dp.picker; + + ok(!picker.is(':visible')); + input.focus(); + ok(picker.is(':visible')); +}); + +test('Enable on readonly options (false)', function(){ + var input = $('<input readonly="readonly" />') + .appendTo('#qunit-fixture') + .datepicker({ + format: "dd-mm-yyyy", + enableOnReadonly: false + }), + dp = input.data('datepicker'), + picker = dp.picker; + + ok(!picker.is(':visible')); + input.focus(); + ok(!picker.is(':visible')); +}); + +test('Startview: year view visible after date pick', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .datepicker({ + startView: 2, + minViewMode: 1, + autoclose: true + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); + ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden'); + ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible'); + + target = picker.find('.datepicker-years tbody td:nth(7)'); + target.click(); + target = picker.find('.datepicker-years tbody td:nth(4)'); + target.click(); + target = picker.find('.datepicker-years tbody td:nth(20)'); + target.click(); + + input.focus(); + ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); + ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden'); + ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible'); +}); + +test('Title: none', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .datepicker({ + format: 'yyyy-mm-dd' + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.is(':visible'), 'Picker is visible'); + + target = picker.find('.datepicker-days thead .datepicker-title'); + ok(target.is(':not(:visible)'), 'Title is hidden'); +}); + +test('Title: with value', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .datepicker({ + format: 'yyyy-mm-dd', + title: 'Some Title' + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.is(':visible'), 'Picker is visible'); + + target = picker.find('.datepicker-days thead .datepicker-title'); + ok(target.is(':visible'), 'Title is visible'); + equal(target.text(), 'Some Title'); +}); + +test('i18n: Leverage i18n titleFormat when available.', patch_date(function(Date){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2015年04月21日') + .datepicker({ + language: 'zh-CN' + }), + dp = input.data('datepicker'), + picker = dp.picker; + + input.focus(); + equal(picker.find('.datepicker-days thead .datepicker-switch').text(), '2015年04月', 'Title is in Chinese: 2015年04月'); +})); + +test('i18n: Leverage English (default) i18n titleFormat when translation key for specified language is not available.', patch_date(function(Date){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('04/21/2015') + .datepicker({ + language: 'aa-BB' + }), + dp = input.data('datepicker'), + picker = dp.picker; + + input.focus(); + equal(picker.find('.datepicker-days thead .datepicker-switch').text(), 'April 2015', 'Title is in default format: April 2015'); +})); + +test('Z-index Offset: none', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .datepicker(), + dp = input.data('datepicker'), + picker = dp.picker; + + input.parent().css('z-index', 234); + input.focus(); + + equal(dp.o.zIndexOffset, 10, 'Z-index offset option defaults to 10.'); + equal(picker.css('z-index'), 244, 'Picker Z-index offset is respected.'); +}); + +test('Z-index Offset: with value', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .datepicker({ + zIndexOffset: 1000 + }), + dp = input.data('datepicker'), + picker = dp.picker; + + input.parent().css('z-index', 234); + input.focus(); + + equal(dp.o.zIndexOffset, 1000, 'Z-index offset option is accepted.'); + equal(picker.css('z-index'), 1234, 'Picker Z-index offset is respected.'); +}); + +test('templates', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .datepicker({ + templates: { + leftArrow: '<span class="glyphicon glyphicon-arrow-left"></span>', + rightArrow: '</table>' + } + }), + dp = input.data('datepicker'), + picker = dp.picker; + + input.focus(); + equal(picker.find('.datepicker-days .prev').prop('innerHTML'), '<span class="glyphicon glyphicon-arrow-left"></span>'); + equal(picker.find('.datepicker-days .next').prop('innerHTML'), $('<div>').html('»').text()); +}); + +test('Nav arrow html templates with span tag', function () { + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-10-26') + .datepicker({ + format: 'yyyy-mm-dd', + templates: { + leftArrow: '<span></span>', + rightArrow: '<span></span>' + } + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + target = picker.find('.datepicker-months tbody span:nth(9)'); + ok(target.hasClass('active'), 'Month is selected'); +}); + +test('Nav arrow html templates .prev click', function () { + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-10-26') + .datepicker({ + format: 'yyyy-mm-dd', + startView: 1, + templates: { + leftArrow: '<i></i>' + } + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + picker.find('.datepicker-months thead .prev i').trigger('click'); + target = picker.find('.datepicker-months thead .datepicker-switch'); + equal(target.text(), '2011'); +}); + +test('Visibility of the prev and next arrows for year/decade/century/millenium views with startDate and endDate', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('01/01/2015') + .datepicker({ + format: 'dd/mm/yyyy', + startView: 1, + startDate: '01/12/2014', + endDate: '01/12/2016' + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + + target = picker.find('.datepicker-months thead th.prev'); + ok(!target.hasClass('disabled'), 'Prev switcher is not hidden'); + target = picker.find('.datepicker-months thead th.next'); + ok(!target.hasClass('disabled'), 'Next switcher is not hidden'); + + picker.find('.datepicker-months thead th.datepicker-switch').click(); + target = picker.find('.datepicker-years thead th.prev'); + ok(target.hasClass('disabled'), 'Prev switcher is hidden'); + target = picker.find('.datepicker-years thead th.next'); + ok(target.hasClass('disabled'), 'Next switcher is hidden'); + + picker.find('.datepicker-years thead th.datepicker-switch').click(); + target = picker.find('.datepicker-decades thead th.prev'); + ok(target.hasClass('disabled'), 'Prev switcher is hidden'); + target = picker.find('.datepicker-decades thead th.next'); + ok(target.hasClass('disabled'), 'Next switcher is hidden'); + + picker.find('.datepicker-decades thead th.datepicker-switch').click(); + target = picker.find('.datepicker-centuries thead th.prev'); + ok(target.hasClass('disabled'), 'Prev switcher is hidden'); + target = picker.find('.datepicker-centuries thead th.next'); + ok(target.hasClass('disabled'), 'Next switcher is hidden'); +}); + +test('date cells (outdated)', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .datepicker(), + dp = input.data('datepicker'), + picker = dp.picker; + + input.focus(); + picker.find('.datepicker-days .day').each(function(){ + ok(this.hasAttribute('data-date')); + }); +}); + +test('keepEmptyValues: none (default is false)', function() { + var proxy_element = $('<div />').appendTo('#qunit-fixture'), + input_from = $('<input />').val('2016-04-01').appendTo('#qunit-fixture'), + input_to = $('<input />').appendTo('#qunit-fixture'), + dp = proxy_element.datepicker({ + format: 'yyyy-mm-dd', + inputs: [input_from, input_to] + }), + input_from_dp = input_from.data('datepicker'); + + input_from.focus(); + input_from_dp.picker.find('.old.day').eq(0).click(); + + equal(input_from.val(), '2016-03-27'); + equal(input_to.val(), '2016-03-27', 'Input_from value should be distributed.'); +}); + +test('keepEmptyValues: true', function() { + var proxy_element = $('<div />').appendTo('#qunit-fixture'), + input_from = $('<input />').val('2016-04-01').appendTo('#qunit-fixture'), + input_to = $('<input />').appendTo('#qunit-fixture'), + dp = proxy_element.datepicker({ + format: 'yyyy-mm-dd', + inputs: [input_from, input_to], + keepEmptyValues: true + }), + input_from_dp = input_from.data('datepicker'); + + input_from.focus(); + input_from_dp.picker.find('.old.day').eq(0).click(); + + equal(input_from.val(), '2016-03-27'); + equal(input_to.val(), '', 'Input_from value should not be distributed.'); +}); + +test('maxViewMode and navigation switch', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .datepicker({ + maxViewMode: 0 + }), + dp = input.data('datepicker'), + picker = dp.picker; + + input.focus(); + + picker.find('.datepicker-days thead th.datepicker-switch').click(); + ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); +}); + +test('updateViewDate', function() { + expect(8); + + var input = $('<input value="08/03/1990"/>') + .appendTo('#qunit-fixture') + .datepicker({ + defaultViewDate: { + year: 1945, + month: 4, + day: 8 + }, + updateViewDate: false + }) + .on('changeMonth', function() { + var msg = shouldTriggerChangeMonth ? 'changeMonth must be triggered' : 'changeMonth must not be triggered'; + ok(shouldTriggerChangeMonth, msg); + }) + .on('changeYear', function() { + var msg = shouldTriggerChangeYear ? 'changeYear must be triggered' : 'changeYear must not be triggered'; + ok(shouldTriggerChangeYear, msg); + }), + dp = input.data('datepicker'), + picker = dp.picker, + shouldTriggerChangeMonth = false, + shouldTriggerChangeYear = false, + monthShown = picker.find('.datepicker-days thead th.datepicker-switch'); + + equal(monthShown.text(), "May 1945", 'uses defaultViewDate on initialization'); + input.datepicker('setDate', new Date(1945, 8, 2)); + equal(monthShown.text(), "May 1945", 'does not change viewDate on `setDate` method'); + input.focus(); + picker.find('.datepicker-days tbody tr td.day.new:first').click(); + equal(monthShown.text(), "May 1945", 'does not change viewDate if a day in next month is selected'); + shouldTriggerChangeMonth = true; + picker.find('.datepicker-days thead th.next').click(); + equal(monthShown.text(), 'June 1945', 'changing month must still be possible'); // and must trigger `changeMonth` event + shouldTriggerChangeYear = true; + picker.find('.datepicker-days thead th.datepicker-switch').click(); + picker.find('.datepicker-months thead th.next').click(); + picker.find('.datepicker-months tbody .month:first').click(); + equal(monthShown.text(), 'January 1946', 'changing year must still be possible'); // and must trigger `changeYear` and `changeMonth` events +}); +test('Week Days: Week days default visibility (or enabled)', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd' + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.dow').length > 0, 'Week days added to view'); +}); +test('Week Days: Week days visibility when disabled', function(){ + var input = $('<input />') + .appendTo('#qunit-fixture') + .val('2012-03-05') + .datepicker({ + format: 'yyyy-mm-dd', + showWeekDays: false + }), + dp = input.data('datepicker'), + picker = dp.picker, + target; + + input.focus(); + ok(picker.find('.dow').length === 0, 'Week days not added to view'); +}); |