974 lines
31 KiB
JavaScript
974 lines
31 KiB
JavaScript
describe('Options', function () {
|
||
|
||
var assert = chai.assert,
|
||
expect = chai.expect,
|
||
destroy = true,
|
||
$altInput,
|
||
$input, dp;
|
||
|
||
before(function () {
|
||
$input = $('<input>').appendTo('#container');
|
||
$altInput = $('<input class="alt-field">').appendTo('#container');
|
||
});
|
||
|
||
afterEach(function () {
|
||
if (dp && destroy) {
|
||
dp.destroy();
|
||
}
|
||
|
||
destroy = true;
|
||
});
|
||
|
||
after(function () {
|
||
$input.remove();
|
||
$altInput.remove();
|
||
});
|
||
|
||
describe('classes', function () {
|
||
it('should add extra classes to datepicker', function () {
|
||
dp = $input.datepicker({
|
||
classes: 'custom-class'
|
||
}).data('datepicker');
|
||
|
||
expect(dp.$datepicker.attr('class')).to.have.string('custom-class')
|
||
|
||
})
|
||
});
|
||
|
||
describe('inline', function () {
|
||
it('if true, should be always visible', function () {
|
||
dp = $input.datepicker({
|
||
inline: true
|
||
}).data('datepicker');
|
||
|
||
expect(dp.$datepicker.parent().attr('class')).to.have.string('datepicker-inline');
|
||
});
|
||
it('if false, should be hidden', function () {
|
||
dp = $input.datepicker({
|
||
inline: false
|
||
}).data('datepicker');
|
||
|
||
expect(dp.$datepicker.parent().attr('class')).to.have.string('datepickers-container');
|
||
})
|
||
});
|
||
|
||
describe('language', function () {
|
||
it('should change language to English if it `en`', function () {
|
||
dp = $input.datepicker({
|
||
language: 'en'
|
||
}).data('datepicker');
|
||
|
||
expect(dp.loc.days).to.eql($.fn.datepicker.language.en.days);
|
||
});
|
||
it('should change language to custom if object is passed', function () {
|
||
var daysMin = ['В','П','В','С','Ч','П','С'];
|
||
dp = $input.datepicker({
|
||
language: {
|
||
daysMin: daysMin
|
||
}
|
||
}).data('datepicker');
|
||
|
||
expect(dp.loc.daysMin).to.eql(daysMin);
|
||
expect(dp.loc.days).to.eql($.fn.datepicker.language.ru.days);
|
||
})
|
||
});
|
||
|
||
describe('startDate', function () {
|
||
it('should change initial viewing date', function () {
|
||
dp = $input.datepicker({
|
||
startDate: new Date(2014,11,12)
|
||
}).data('datepicker');
|
||
|
||
expect(dp.$nav.text()).to.have.string('Декабрь');
|
||
expect(dp.$nav.text()).to.have.string('2014');
|
||
|
||
})
|
||
});
|
||
|
||
describe('firstDay', function () {
|
||
it('should change first day of week', function () {
|
||
dp = $input.datepicker({
|
||
firstDay: 2
|
||
}).data('datepicker');
|
||
|
||
var firstCell = $('.datepicker--days-names .datepicker--day-name', dp.$datepicker).eq(0);
|
||
|
||
assert.equal(firstCell.text(),'Вт')
|
||
})
|
||
it('should change first day of week to `Воскресенье` if it `0`', function () {
|
||
dp = $input.datepicker({
|
||
firstDay: 0
|
||
}).data('datepicker');
|
||
|
||
var firstCell = $('.datepicker--days-names .datepicker--day-name', dp.$datepicker).eq(0);
|
||
|
||
assert.equal(firstCell.text(),'Вс')
|
||
})
|
||
});
|
||
|
||
describe('weekends', function () {
|
||
it('should change days, which should considered to be weekends', function () {
|
||
dp = $input.datepicker({
|
||
weekends: [0, 2],
|
||
firstDay: 0
|
||
}).data('datepicker');
|
||
|
||
var $cells = $('.datepicker--cell-day', dp.$datepicker);
|
||
|
||
expect($cells.eq(0).attr('class')).to.have.string('-weekend-')
|
||
expect($cells.eq(2).attr('class')).to.have.string('-weekend-')
|
||
})
|
||
});
|
||
|
||
describe('dateFormat', function () {
|
||
var date = new Date(2015, 6, 4, 11, 5),
|
||
formats = {
|
||
'@': date.getTime(),
|
||
'aa': 'am',
|
||
'AA': 'AM',
|
||
'h': 11,
|
||
'hh': 11,
|
||
'i': 5,
|
||
'ii': '05',
|
||
'dd': '04',
|
||
'd': 4,
|
||
'DD': 'Суббота',
|
||
'D': 'Суб',
|
||
'mm': '07',
|
||
'm': 7,
|
||
'MM': 'Июль',
|
||
'M': 'Июл',
|
||
'yyyy' : 2015,
|
||
'yy': 15,
|
||
'yyyy1': 2010,
|
||
'yyyy2': 2019
|
||
};
|
||
|
||
for (var format in formats) {
|
||
(function (format) {
|
||
it(format, function () {
|
||
dp = $input.datepicker({
|
||
dateFormat: 'Selected date: ' + format
|
||
}).data('datepicker');
|
||
|
||
dp.selectDate(date);
|
||
assert.equal(dp.$el.val(), 'Selected date: ' + formats[format]);
|
||
})
|
||
}(format))
|
||
}
|
||
|
||
it('should work with special characters', function () {
|
||
dp = $input.datepicker({
|
||
language: 'de',
|
||
dateFormat: 'Month is MM'
|
||
}).data('datepicker');
|
||
dp.selectDate(new Date(2016, 2, 1));
|
||
expect(dp.$el.val()).to.be.equal('Month is März');
|
||
})
|
||
});
|
||
|
||
describe('altField', function () {
|
||
it('should define `$altField` if selector or jQuery object is passed', function () {
|
||
dp = $input.datepicker({
|
||
altField: '.alt-field'
|
||
}).data('datepicker');
|
||
|
||
assert(dp.$altField.length);
|
||
})
|
||
})
|
||
|
||
describe('altFieldFormat', function () {
|
||
it('should define date format for alternative field', function () {
|
||
var date = new Date(2015, 11, 17);
|
||
|
||
dp = $input.datepicker({
|
||
altField: '.alt-field',
|
||
altFieldDateFormat: 'dd-mm-yyyy'
|
||
}).data('datepicker');
|
||
|
||
dp.selectDate(date);
|
||
|
||
assert.equal(dp.$altField.val(), '17-12-2015');
|
||
});
|
||
|
||
it('should support 24 hour mode, even if main date format is in 12', function () {
|
||
var date = new Date(2015, 11, 17, 22, 47);
|
||
|
||
dp = $input.datepicker({
|
||
timepicker: true,
|
||
timeFormat: 'hh:ii aa',
|
||
altField: '.alt-field',
|
||
altFieldDateFormat: 'dd-mm-yyyy hh:ii'
|
||
}).data('datepicker');
|
||
|
||
dp.selectDate(date);
|
||
|
||
assert.equal(dp.$altField.val(), '17-12-2015 22:47');
|
||
});
|
||
|
||
it('should support 12 hour mode', function () {
|
||
var date = new Date(2015, 11, 17, 22, 47);
|
||
|
||
dp = $input.datepicker({
|
||
timepicker: true,
|
||
timeFormat: 'hh:ii',
|
||
altField: '.alt-field',
|
||
altFieldDateFormat: 'dd-mm-yyyy hh:ii aa'
|
||
}).data('datepicker');
|
||
|
||
dp.selectDate(date);
|
||
|
||
assert.equal(dp.$altField.val(), '17-12-2015 10:47 pm');
|
||
})
|
||
});
|
||
|
||
describe('toggleSelected', function () {
|
||
it('when true, click on selected cells should remove selection', function () {
|
||
var date = new Date(2015, 11, 17);
|
||
|
||
dp = $input.datepicker().data('datepicker');
|
||
|
||
dp.selectDate(date);
|
||
dp._getCell(date, 'day').click();
|
||
|
||
expect(dp.selectedDates).to.have.length(0)
|
||
});
|
||
|
||
it('when false, click on selected cell must do nothing', function () {
|
||
var date = new Date(2015, 11, 17);
|
||
|
||
dp = $input.datepicker({
|
||
toggleSelected: false
|
||
}).data('datepicker');
|
||
|
||
dp.selectDate(date);
|
||
dp._getCell(date, 'day').click();
|
||
|
||
expect(dp.selectedDates).to.have.length(1)
|
||
})
|
||
});
|
||
|
||
describe('keyboardNav', function () {
|
||
var year = 2015,
|
||
month = 10,
|
||
day = 18,
|
||
date = new Date(year, month, day),
|
||
cases = [
|
||
{
|
||
it: '→: should focus next cell',
|
||
keys: [39],
|
||
validDate: new Date(year, month, day + 1)
|
||
},
|
||
{
|
||
it: '←: should focus previous cell',
|
||
keys: [37],
|
||
validDate: new Date(year, month, day - 1)
|
||
},
|
||
{
|
||
it: '↑: should focus +7 day cell',
|
||
keys: [40],
|
||
validDate: new Date(year, month, day + 7)
|
||
},
|
||
{
|
||
it: '↓: should focus -7 day cell',
|
||
keys: [38],
|
||
validDate: new Date(year, month, day - 7)
|
||
},
|
||
{
|
||
it: 'Ctrl + →: should focus next month',
|
||
keys: [17, 39],
|
||
validDate: new Date(year, month + 1, day)
|
||
},
|
||
{
|
||
it: 'Ctrl + ←: should focus previous month',
|
||
keys: [17, 37],
|
||
validDate: new Date(year, month - 1, day)
|
||
},
|
||
{
|
||
it: 'Shift + →: should focus next year',
|
||
keys: [16, 39],
|
||
validDate: new Date(year + 1, month, day)
|
||
},
|
||
{
|
||
it: 'Shift + ←: should focus previous year',
|
||
keys: [16, 37],
|
||
validDate: new Date(year - 1, month, day)
|
||
},
|
||
{
|
||
it: 'Alt + →: should focus on +10 year cell',
|
||
keys: [18, 39],
|
||
validDate: new Date(year + 10, month, day)
|
||
},
|
||
{
|
||
it: 'Alt + ←: should focus on -10 year cell',
|
||
keys: [18, 37],
|
||
validDate: new Date(year - 10, month, day)
|
||
},
|
||
{
|
||
it: 'Ctrl + Shift + ↑: should change view to months',
|
||
keys: [16, 17, 38],
|
||
view: 'months'
|
||
}
|
||
];
|
||
|
||
cases.forEach(function (currentCase) {
|
||
var keys = currentCase.keys,
|
||
valid = currentCase.validDate;
|
||
|
||
it(currentCase.it, function () {
|
||
dp = $input.datepicker().data('datepicker');
|
||
dp.selectDate(date);
|
||
|
||
keys.forEach(function (key) {
|
||
$input.trigger($.Event('keydown', {which: key}));
|
||
});
|
||
|
||
var focused = dp.focused;
|
||
|
||
|
||
if (currentCase.validDate) {
|
||
assert.equal(valid.getFullYear(), focused.getFullYear());
|
||
assert.equal(valid.getMonth(), focused.getMonth());
|
||
assert.equal(valid.getDate(), focused.getDate());
|
||
}
|
||
|
||
if (currentCase.view) {
|
||
assert.equal(currentCase.view, dp.view)
|
||
}
|
||
})
|
||
|
||
});
|
||
});
|
||
|
||
describe('position', function () {
|
||
var iDims, dpDims,
|
||
offset;
|
||
|
||
function prepare (position) {
|
||
dp = $input.datepicker({position: position}).data('datepicker');
|
||
$input.focus();
|
||
|
||
iDims = {
|
||
width: $input.outerWidth(),
|
||
height: $input.outerHeight(),
|
||
left: $input.offset().left,
|
||
top: $input.offset().top
|
||
};
|
||
|
||
dpDims = {
|
||
width: dp.$datepicker.outerWidth(),
|
||
height: dp.$datepicker.outerHeight(),
|
||
left: dp.$datepicker.offset().left,
|
||
top: dp.$datepicker.offset().top
|
||
};
|
||
|
||
offset = dp.opts.offset;
|
||
}
|
||
|
||
it('should set `bottom left` position', function () {
|
||
prepare('bottom left');
|
||
|
||
assert.equal(iDims.top + iDims.height + offset, dpDims.top);
|
||
assert.equal(iDims.left, dpDims.left);
|
||
});
|
||
it('should set `top right` position', function () {
|
||
prepare('top right');
|
||
|
||
assert.equal(iDims.top, dpDims.top + dpDims.height + offset);
|
||
assert.equal(iDims.left + iDims.width, dpDims.left + dpDims.width);
|
||
});
|
||
it('should set `right bottom` position', function () {
|
||
prepare('right bottom');
|
||
|
||
assert.equal(iDims.left + iDims.width + offset, dpDims.left);
|
||
assert.equal(iDims.top + iDims.height, dpDims.top + dpDims.height);
|
||
});
|
||
it('should set `left center` position', function () {
|
||
prepare('left center');
|
||
|
||
assert.equal(iDims.left - offset, dpDims.left + dpDims.width);
|
||
assert.equal(iDims.top + iDims.height/2, dpDims.top + dpDims.height/2);
|
||
});
|
||
it('should set `bottom center` position', function () {
|
||
prepare('bottom center');
|
||
|
||
assert.equal(iDims.top + iDims.height + offset, dpDims.top);
|
||
assert.equal(iDims.left + iDims.width/2, dpDims.left + dpDims.width/2);
|
||
})
|
||
});
|
||
|
||
describe('offset', function () {
|
||
var iDims, dpDims,
|
||
offset;
|
||
|
||
var i = 0;
|
||
while(i < 5) {
|
||
offset = Math.round(Math.random() * 50);
|
||
|
||
(function (offset) {
|
||
it('should set offset ' + offset + ' from main axis', function () {
|
||
dp = $input.datepicker({
|
||
offset: offset
|
||
}).data('datepicker');
|
||
$input.focus();
|
||
|
||
iDims = {
|
||
width: $input.outerWidth(),
|
||
height: $input.outerHeight(),
|
||
left: $input.offset().left,
|
||
top: $input.offset().top
|
||
};
|
||
|
||
dpDims = {
|
||
width: dp.$datepicker.outerWidth(),
|
||
height: dp.$datepicker.outerHeight(),
|
||
left: dp.$datepicker.offset().left,
|
||
top: dp.$datepicker.offset().top
|
||
};
|
||
|
||
assert.equal(iDims.top + iDims.height + offset, dpDims.top);
|
||
});
|
||
})(offset);
|
||
|
||
i++;
|
||
}
|
||
});
|
||
|
||
describe('view', function () {
|
||
it('should set initial datepicker view to `months`', function () {
|
||
dp = $input.datepicker({view: 'months'}).data('datepicker');
|
||
assert.equal('months', dp.view)
|
||
});
|
||
it('should set initial datepicker view to `years`', function () {
|
||
dp = $input.datepicker({view: 'years'}).data('datepicker');
|
||
assert.equal('years', dp.view)
|
||
})
|
||
});
|
||
|
||
describe('minView', function () {
|
||
it('should set minimum possible view', function () {
|
||
dp = $input.datepicker({
|
||
view: 'months',
|
||
minView: 'months'
|
||
}).data('datepicker');
|
||
|
||
$('.datepicker--cell-month', dp.$datepicker).eq(0).click();
|
||
assert.equal('months', dp.view)
|
||
});
|
||
|
||
});
|
||
|
||
describe('showOtherMonths', function () {
|
||
var date = new Date(2015, 11, 22);
|
||
|
||
it('if `true` should show days from other months', function () {
|
||
dp = $input.datepicker().data('datepicker');
|
||
dp.date = date;
|
||
|
||
var $cell = $('.datepicker--cell-day.-other-month-', dp.$datepicker).eq(0);
|
||
|
||
assert($cell.text(), 'must have text')
|
||
});
|
||
|
||
it('if `false` should hide days from other months', function () {
|
||
dp = $input.datepicker({showOtherMonths: false}).data('datepicker');
|
||
dp.date = date;
|
||
|
||
var $cell = $('.datepicker--cell-day.-other-month-', dp.$datepicker).eq(0);
|
||
|
||
expect($cell.text()).to.be.empty;
|
||
});
|
||
|
||
});
|
||
|
||
describe('selectOtherMonths', function () {
|
||
var date = new Date(2015, 11, 22);
|
||
|
||
it('if `true` you can select cells from other months', function () {
|
||
dp = $input.datepicker().data('datepicker');
|
||
dp.date = date;
|
||
|
||
var $cell = $('.datepicker--cell-day.-other-month-', dp.$datepicker).eq(0);
|
||
$cell.click();
|
||
expect(dp.selectedDates).to.have.length(1)
|
||
});
|
||
|
||
it('if `false` you can not select cells from other months ', function () {
|
||
dp = $input.datepicker({selectOtherMonths: false}).data('datepicker');
|
||
dp.date = date;
|
||
|
||
var $cell = $('.datepicker--cell-day.-other-month-', dp.$datepicker).eq(0);
|
||
$cell.click();
|
||
expect(dp.selectedDates).to.have.length(0)
|
||
});
|
||
|
||
});
|
||
|
||
describe('moveToOtherMonthsOnSelect', function () {
|
||
var date = new Date(2015, 11, 22);
|
||
|
||
it('if `true` datepicker will translate to other month if date from other month is selected', function () {
|
||
dp = $input.datepicker().data('datepicker');
|
||
dp.date = date;
|
||
|
||
var $cell = $('.datepicker--cell-day.-other-month-', dp.$datepicker).eq(0);
|
||
$cell.click();
|
||
|
||
assert.equal(dp.date.getMonth(), 10)
|
||
|
||
});
|
||
|
||
it('if `false` datepicker will stay on same month when selecting dates from other month', function () {
|
||
dp = $input.datepicker({moveToOtherMonthsOnSelect: false}).data('datepicker');
|
||
dp.date = date;
|
||
|
||
var $cell = $('.datepicker--cell-day.-other-month-', dp.$datepicker).eq(0);
|
||
$cell.click();
|
||
|
||
assert.equal(dp.date.getMonth(), 11)
|
||
});
|
||
|
||
});
|
||
|
||
describe('showOtherYears', function () {
|
||
var date = new Date(2015, 11, 22);
|
||
it('if `true` should show years from other decades', function () {
|
||
dp = $input.datepicker({
|
||
view: 'years'
|
||
}).data('datepicker');
|
||
dp.date = date;
|
||
|
||
var $cell = $('.datepicker--cell-year.-other-decade-', dp.$datepicker).eq(0);
|
||
|
||
assert($cell.text(), 'must have text')
|
||
});
|
||
|
||
it('if `false` should hide years from other decades', function () {
|
||
destroy = false;
|
||
dp = $input.datepicker({
|
||
view: 'years',
|
||
showOtherYears: false
|
||
}).data('datepicker');
|
||
dp.date = date;
|
||
|
||
var $cell = $('.datepicker--cell-year.-other-decade-', dp.$datepicker).eq(0);
|
||
|
||
expect($cell.text()).to.be.empty;
|
||
});
|
||
|
||
});
|
||
|
||
describe('selectOtherYears', function () {
|
||
var date = new Date(2015, 11, 22);
|
||
|
||
it('if `true` you can select cells from other decades', function () {
|
||
dp = $input.datepicker({
|
||
view: 'years',
|
||
minView: 'years',
|
||
selectOtherYears: true
|
||
}).data('datepicker');
|
||
dp.date = date;
|
||
|
||
var $cell = $('.datepicker--cell-year.-other-decade-', dp.$datepicker).eq(0);
|
||
$cell.click();
|
||
expect(dp.selectedDates).to.have.length(1)
|
||
});
|
||
|
||
it('if `false` you can not select cells from other months ', function () {
|
||
dp = $input.datepicker({
|
||
view: 'years',
|
||
minView: 'years',
|
||
selectOtherYears: false
|
||
}).data('datepicker');
|
||
dp.date = date;
|
||
|
||
var $cell = $('.datepicker--cell-year.-other-decade-', dp.$datepicker).eq(0);
|
||
$cell.click();
|
||
expect(dp.selectedDates).to.have.length(0)
|
||
});
|
||
|
||
});
|
||
|
||
describe('moveToOtherYearsOnSelect', function () {
|
||
var date = new Date(2015, 11, 22);
|
||
|
||
it('if `true` datepicker will translate to other decade if date from other decade is selected', function () {
|
||
dp = $input.datepicker({
|
||
view: 'years',
|
||
minView: 'years',
|
||
moveToOtherYearsOnSelect: true
|
||
}).data('datepicker');
|
||
dp.date = date;
|
||
|
||
var $cell = $('.datepicker--cell-year.-other-decade-', dp.$datepicker).eq(0);
|
||
$cell.click();
|
||
|
||
assert.equal(dp.date.getFullYear(), 2009)
|
||
|
||
});
|
||
|
||
it('if `false` datepicker will stay on same decade when selecting dates from other decade', function () {
|
||
dp = $input.datepicker({
|
||
view: 'years',
|
||
minView: 'years',
|
||
moveToOtherYearsOnSelect: false
|
||
}).data('datepicker');
|
||
dp.date = date;
|
||
|
||
var $cell = $('.datepicker--cell-year.-other-decade-', dp.$datepicker).eq(0);
|
||
$cell.click();
|
||
|
||
assert.equal(dp.date.getFullYear(), 2015)
|
||
});
|
||
});
|
||
|
||
describe('minDate', function () {
|
||
it('should set minimum possible date to choose', function () {
|
||
var date = new Date(2015, 11, 30);
|
||
|
||
dp = $input.datepicker({
|
||
minDate: date
|
||
}).data('datepicker');
|
||
|
||
dp.date = date;
|
||
|
||
var $cell = $('.datepicker--cell-day[data-year="2015"][data-month="11"][data-date="30"]', dp.$datepicker);
|
||
|
||
expect($cell.prev().attr('class')).to.have.string('-disabled-')
|
||
})
|
||
});
|
||
|
||
describe('maxDate', function () {
|
||
it('should set maximum possible date to choose', function () {
|
||
var date = new Date(2015, 11, 30);
|
||
|
||
dp = $input.datepicker({
|
||
maxDate: date
|
||
}).data('datepicker');
|
||
|
||
dp.date = date;
|
||
|
||
var $cell = $('.datepicker--cell-day[data-year="2015"][data-month="11"][data-date="30"]', dp.$datepicker);
|
||
|
||
expect($cell.next().attr('class')).to.have.string('-disabled-')
|
||
})
|
||
});
|
||
|
||
describe('disableNavWhenOutOfRange', function () {
|
||
it('if `true` then navigation buttons will be disabled if there is no more possible dates to select to in next or prev month', function () {
|
||
var date = new Date(2015, 11, 30);
|
||
|
||
dp = $input.datepicker({
|
||
minDate: date,
|
||
inline: true
|
||
}).data('datepicker');
|
||
|
||
dp.date = date;
|
||
|
||
var $prev = $('.datepicker--nav-action[data-action="prev"]', dp.$datepicker);
|
||
|
||
expect($prev.attr('class')).to.have.string('-disabled-')
|
||
})
|
||
});
|
||
|
||
describe('multipleDates', function () {
|
||
it('if `true` then one can select multiple dates', function () {
|
||
dp = $input.datepicker({
|
||
multipleDates: true
|
||
}).data('datepicker');
|
||
|
||
dp.selectDate(new Date(2016, 0, 7));
|
||
dp.selectDate(new Date(2016, 0, 8));
|
||
dp.selectDate(new Date(2016, 0, 9));
|
||
|
||
expect(dp.selectedDates).to.have.length(3)
|
||
});
|
||
|
||
it('if `number` should limit length of selected dates by its value', function () {
|
||
dp = $input.datepicker({
|
||
multipleDates: 3
|
||
}).data('datepicker');
|
||
|
||
dp.selectDate(new Date(2016, 0, 7));
|
||
dp.selectDate(new Date(2016, 0, 8));
|
||
dp.selectDate(new Date(2016, 0, 9));
|
||
dp.selectDate(new Date(2016, 0, 10));
|
||
dp.selectDate(new Date(2016, 0, 11));
|
||
|
||
expect(dp.selectedDates).to.have.length(3)
|
||
})
|
||
});
|
||
|
||
describe('multipleDatesSeparator', function () {
|
||
it('defines multiple dates separator sign', function () {
|
||
dp = $input.datepicker({
|
||
multipleDates: true,
|
||
multipleDatesSeparator: ' separator '
|
||
}).data('datepicker');
|
||
|
||
dp.selectDate(new Date(2016, 0, 12));
|
||
dp.selectDate(new Date(2016, 0, 13))
|
||
|
||
expect($input.val()).to.have.string(' separator ')
|
||
})
|
||
});
|
||
|
||
describe('todayButton', function () {
|
||
it('should add "today" button if true', function () {
|
||
|
||
dp = $input.datepicker({
|
||
todayButton: true
|
||
}).data('datepicker');
|
||
|
||
var $button = $('.datepicker--button', dp.$datepicker);
|
||
|
||
expect($button.length).to.be.equal(1);
|
||
expect($button.data('action')).to.be.equal('today');
|
||
|
||
})
|
||
});
|
||
|
||
describe('clearButton', function () {
|
||
it('should add "clear" button if true', function () {
|
||
|
||
dp = $input.datepicker({
|
||
clearButton: true
|
||
}).data('datepicker');
|
||
|
||
var $button = $('.datepicker--button', dp.$datepicker);
|
||
|
||
expect($button.length).to.be.equal(1);
|
||
expect($button.data('action')).to.be.equal('clear');
|
||
|
||
})
|
||
});
|
||
|
||
describe('showEvent', function () {
|
||
it('should define event type on which datepicker will be shown', function () {
|
||
dp = $input.datepicker({
|
||
showEvent: 'click'
|
||
}).data('datepicker');
|
||
|
||
$input.click();
|
||
|
||
expect(dp.visible).to.be.equal(true)
|
||
|
||
})
|
||
});
|
||
|
||
|
||
describe('autoClose', function () {
|
||
it('if true, when datepicker will close after date was selected', function () {
|
||
dp = $input.datepicker({
|
||
autoClose: true
|
||
}).data('datepicker');
|
||
|
||
dp.show();
|
||
dp.selectDate(new Date());
|
||
|
||
expect(dp.visible).to.be.equal(false)
|
||
|
||
});
|
||
|
||
it('if false, when datepicker will not close after date was selected', function () {
|
||
dp = $input.datepicker({
|
||
autoClose: false
|
||
}).data('datepicker');
|
||
|
||
dp.show();
|
||
dp.selectDate(new Date());
|
||
|
||
expect(dp.visible).to.be.equal(true)
|
||
|
||
})
|
||
});
|
||
|
||
describe('monthsField', function () {
|
||
it('defines which field from localization must be used as source for months name in "months view"', function () {
|
||
dp = $input.datepicker({
|
||
monthsField: 'months',
|
||
view: 'months'
|
||
}).data('datepicker');
|
||
|
||
var $cell = $('.datepicker--cell-month').eq(0);
|
||
|
||
expect($cell.text()).to.be.equal('Январь');
|
||
});
|
||
});
|
||
|
||
describe('prevHtml', function () {
|
||
it('defines html which should be used in "previous" button', function () {
|
||
dp = $input.datepicker({
|
||
prevHtml: 'previous'
|
||
}).data('datepicker');
|
||
|
||
var $prev = $('[data-action="prev"]', dp.$datepicker);
|
||
|
||
expect($prev.html()).to.be.equal('previous');
|
||
});
|
||
});
|
||
|
||
describe('nextHtml', function () {
|
||
it('defines html which should be used in "next" button', function () {
|
||
dp = $input.datepicker({
|
||
nextHtml: 'next'
|
||
}).data('datepicker');
|
||
|
||
var $next = $('[data-action="next"]', dp.$datepicker);
|
||
|
||
expect($next.html()).to.be.equal('next');
|
||
});
|
||
});
|
||
|
||
describe('navTitles', function () {
|
||
it('defines datepicker titles', function () {
|
||
dp = $input.datepicker({
|
||
navTitles: {
|
||
days: 'Days',
|
||
months: 'Months',
|
||
years: 'Years'
|
||
}
|
||
}).data('datepicker');
|
||
|
||
var $title = $('.datepicker--nav-title', dp.$datepicker);
|
||
expect($title.html()).to.have.string('Days');
|
||
|
||
dp.view = 'months';
|
||
$title = $('.datepicker--nav-title', dp.$datepicker);
|
||
expect($title.html()).to.have.string('Months');
|
||
|
||
dp.view = 'years';
|
||
$title = $('.datepicker--nav-title', dp.$datepicker);
|
||
expect($title.html()).to.have.string('Years');
|
||
|
||
});
|
||
});
|
||
|
||
describe('timepicker', function () {
|
||
it('should add timepicker to calendar', function () {
|
||
dp = $input.datepicker({
|
||
timepicker: true
|
||
}).data('datepicker');
|
||
|
||
var $time = $('.datepicker--time', dp.$datepicker);
|
||
expect($time).to.have.length(1)
|
||
|
||
})
|
||
});
|
||
|
||
describe('onlyTimepicker', function () {
|
||
it('only timepicker should be visible', function () {
|
||
dp = $input.datepicker({
|
||
timepicker: true,
|
||
onlyTimepicker: true
|
||
}).data('datepicker');
|
||
|
||
var $time = $('.datepicker--time', dp.$datepicker),
|
||
$cells = $('.datepicker--cells', dp.$datepicker),
|
||
$nav = $('.datepicker--nav-title', dp.$datepicker),
|
||
_class = dp.$datepicker.hasClass('-only-timepicker-');
|
||
|
||
expect($time).to.have.length(1);
|
||
expect($cells).to.have.length(0);
|
||
expect($nav).to.have.length(0);
|
||
expect(_class).to.be.equal(true);
|
||
|
||
})
|
||
});
|
||
|
||
describe('dateTimeSeparator', function () {
|
||
it('should define separator between date string and time', function () {
|
||
var date = new Date(2016,2,9,11,24);
|
||
dp = $input.datepicker({
|
||
timepicker: true,
|
||
onSelect: function (fd, d) {
|
||
expect(fd).to.be.equal('09.03.2016 time separator 11:24')
|
||
},
|
||
dateTimeSeparator: ' time separator '
|
||
}).data('datepicker');
|
||
|
||
dp.selectDate(date);
|
||
|
||
})
|
||
});
|
||
|
||
describe('timeFormat', function () {
|
||
it('should define time format', function () {
|
||
var date = new Date(2016,2,9,9,4);
|
||
dp = $input.datepicker({
|
||
timepicker: true,
|
||
timeFormat: 'h - ii',
|
||
onSelect: function (fd, d) {
|
||
expect(fd).to.be.equal('09.03.2016 9 - 04')
|
||
}
|
||
}).data('datepicker');
|
||
|
||
dp.selectDate(date);
|
||
})
|
||
});
|
||
|
||
describe('minHours', function () {
|
||
it('should set minimum hours value', function () {
|
||
var date = new Date();
|
||
date.setHours(9);
|
||
dp = $input.datepicker({
|
||
timepicker: true,
|
||
minHours: 10,
|
||
onSelect: function (fd, d) {
|
||
var hours = d.getHours();
|
||
expect(hours).to.be.equal(10)
|
||
}
|
||
}).data('datepicker');
|
||
dp.selectDate(date);
|
||
})
|
||
});
|
||
|
||
describe('minMinutes', function () {
|
||
it('should set minimum minutes value', function () {
|
||
var date = new Date();
|
||
date.setMinutes(20);
|
||
dp = $input.datepicker({
|
||
timepicker: true,
|
||
minMinutes: 30,
|
||
onSelect: function (fd, d) {
|
||
var minutes = d.getMinutes();
|
||
expect(minutes).to.be.equal(30)
|
||
}
|
||
}).data('datepicker');
|
||
dp.selectDate(date);
|
||
})
|
||
});
|
||
|
||
describe('maxHours', function () {
|
||
it('should set maximum hours value', function () {
|
||
var date = new Date();
|
||
date.setHours(20);
|
||
dp = $input.datepicker({
|
||
timepicker: true,
|
||
maxHours: 18,
|
||
onSelect: function (fd, d) {
|
||
var hours = d.getHours();
|
||
expect(hours).to.be.equal(18)
|
||
}
|
||
}).data('datepicker');
|
||
dp.selectDate(date);
|
||
})
|
||
});
|
||
|
||
describe('maxMinutes', function () {
|
||
it('should set maximum minutes value', function () {
|
||
var date = new Date();
|
||
date.setMinutes(50);
|
||
dp = $input.datepicker({
|
||
timepicker: true,
|
||
maxMinutes: 30,
|
||
onSelect: function (fd, d) {
|
||
var minutes = d.getMinutes();
|
||
expect(minutes).to.be.equal(30)
|
||
}
|
||
}).data('datepicker');
|
||
dp.selectDate(date);
|
||
})
|
||
})
|
||
});
|