surt
Version:
Smart suggest widget
1,325 lines (1,140 loc) • 63.2 kB
JavaScript
describe('События.', function() {
beforeEach(function() {
$('.wrapper_common').html(originalHTML);
$('.wrapper_input').html(simpleHTML);
});
it('Параметр change', function() {
var x = 0;
function callback() {
x++;
}
var suggest = $('.surt').surt({
input: '.surt__input',
change: callback
});
var e = $.Event('keyup');
// charCode of print-character, other keyCodes don't cause change event
e.keyCode = 65;
$('.surt__input').trigger(e);
suggest.dispose();
assert(x == 1);
suggest.dispose();
});
describe('Автокомплит.', function() {
it('При не крайне правой позиции курсора нажатие стрелки вправо не приводит к автокомплиту (html mode)', function() {
function test(params) {
var suggest = $(params.root).surt(params);
suggest.set({
kit: [{
text: 'Ре',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}]]
});
var e = jQuery.Event('keydown'),
html = $('.wrapper_common .surt__input').html();
suggest.restoreCursor(1);
e.keyCode = 39;
$('.surt__input').trigger(e);
var text = $('.wrapper_common .surt__input').html();
assert(html == text, 'Значение в инпуте совпадает со значением до нажатия вправо');
suggest.dispose();
}
test({
root: '.wrapper_common .surt',
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete'
});
});
it('При не крайне правой позиции курсора нажатие стрелки вправо не приводит к автокомплиту (text mode & input)', function() {
var completed;
var suggest = $('.wrapper_input .surt').surt({
input: '.surt__input',
inputMode: 'text',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete',
readyCls: 'surt_ready_true',
stateFocusCls: '_focus',
delimiter: ',',
complete: function() {
completed = true;
}
});
suggest.set({
kit: [{
text: 'Ре',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}]]
});
$('.wrapper_input .surt__input').val('Ре');
var e = jQuery.Event('keydown'),
html = $('.wrapper_input .surt__input').val();
suggest.restoreCursor(1);
e.keyCode = 39;
$('.wrapper_input .surt__input').trigger(e);
var text = $('.wrapper_input .surt__input').val();
// assert(html == text);
// Странные дела, перед этой правкой complete должен был вызываться
assert(!completed, 'Был вызван метод complete');
suggest.dispose();
});
it('При крайне правой позиции курсора нажатие стрелки вправо приводит к автокомплиту', function() {
var suggest = $('.surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete'
});
suggest.set({
kit: [{
text: 'Ре',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}]]
});
var e = jQuery.Event('keydown');
e.keyCode = 39;
$('.surt__input').trigger(e);
assert($('.surt__input').html() == '<div class="surt__token _type_rubric">Ресторан</div>');
suggest.dispose();
});
it('При нажатии вправо автокомплит подставляется а курсор уходит в крайне правое положение', function() {
var suggest = $('.wrapper_common .surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete'
});
suggest.set({
kit: [{
text: 'Ре',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}]]
});
var e = jQuery.Event('keydown');
e.keyCode = 39;
$('.wrapper_common .surt__input').trigger(e);
var pos = suggest.getCursor(),
html = $('.wrapper_common .surt__input').html(),
complete = $('.wrapper_common .surt__clone-main').html();
assert(pos == $('.surt__input').text().length, 'Позиция выставилась в крайне правое положение ' + pos + '|' + $('.surt__input').text().length);
assert(html == '<div class="surt__token _type_rubric">Ресторан</div>', 'В инпут попадает первый сагест');
suggest.dispose();
});
it('При вызове метода submit автокомплит изчезает', function() {
var suggest = $('.surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete'
});
suggest.set({
kit: [{
text: 'Ре',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}]]
});
var e = jQuery.Event('keydown');
e.keyCode = 13;
$('.surt__input').trigger(e);
var pos = suggest.getCursor(),
text = $('.surt__input').text(),
complete = $('.surt__clone-hint').html();
assert(pos == $('.surt__input').text().length);
assert(text == 'Ре', 'В инпуте остался текст');
assert(!$('.wrapper_common .surt').hasClass('_autocomplete'), 'Комплит спрятан');
suggest.dispose();
});
it('Нажатие вниз приводит к заполнению в автокомплите второго сагеста', function() {
var suggest = $('.wrapper_common .surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete'
});
suggest.set({
kit: [{
text: 'Ре',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'Рестораны и кафе',
type: 'filter'
}]]
});
// var e = jQuery.Event('keydown');
e = jQuery.Event('keydown'); e.keyCode = 40; $('.surt__input').trigger(e); // Down
e = jQuery.Event('keydown'); e.keyCode = 40; $('.surt__input').trigger(e); // Down
assert($('.wrapper_common .surt__clone-hint').html() == 'стораны и кафе');
e = jQuery.Event('keydown'); e.keyCode = 39; $('.surt__input').trigger(e); // Right
assert($('.wrapper_common .surt__input').html() == '<div class="surt__token _type_filter">Рестораны и кафе</div>', 'В инпут выставился именно второй сагест');
suggest.dispose();
});
it('Выбор сагеста и нажатие вправо приводит к его попаданию в поле даже когда не начинается с текста в инпуте', function() {
var suggest = $('.wrapper_common .surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete'
});
suggest.set({
kit: [{
text: 'ест',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'Рестораны и кафе',
type: 'filter'
}]]
});
// var e = jQuery.Event('keydown');
e = jQuery.Event('keydown'); e.keyCode = 40; $('.surt__input').trigger(e); // Down
e = jQuery.Event('keydown'); e.keyCode = 40; $('.surt__input').trigger(e); // Down
// assert($('.wrapper_common .surt__clone-hint').html() == '', 'В автокомплите нет текста');
e = jQuery.Event('keydown'); e.keyCode = 39; $('.surt__input').trigger(e); // Right
assert($('.wrapper_common .surt__input').html() == '<div class="surt__token _type_filter">Рестораны и кафе</div>', 'В инпут выставился именно второй сагест ' + $('.wrapper_common .surt__input').html());
suggest.dispose();
});
it('При удалении текста модификатор автокомплита не выставляется', function() {
var suggest = $('.wrapper_common .surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete'
});
suggest.set({
kit: [{
text: 'ест',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'Рестораны и кафе',
type: 'filter'
}]]
});
$('.surt__input').text('');
$('.wrapper_simple .surt__input').focus();
$('.wrapper_common .surt__input').focus();
var e;
e = jQuery.Event('keyup'); $('.surt__input').trigger(e);
assert(!$('.wrapper_common .surt').hasClass('_autocomplete'), 'Класса автокомплита не должно быть');
suggest.dispose();
});
it('Если первый сагест не начинается с текста в инпуте - класс автокомплита не выставляется, текст тоже', function() {
var suggest = $('.wrapper_common .surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete'
});
suggest.set({
kit: [{
text: 'ест',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'Рестораны и кафе',
type: 'filter'
}]]
});
$('.wrapper_simple .surt__input').focus();
$('.wrapper_common .surt__input').focus();
assert(!$('.wrapper_common .surt').hasClass('_autocomplete'), 'Класса автокомплита не должно быть');
assert(!$('.wrapper_common .surt__clone-hint').text(), 'Текста в автокомплите не должно быть');
suggest.dispose();
});
it('Если сагесты есть, есть активный сагест, но он не подходит для автокомплита, нажатие вправо не приводит к автокомплиту', function() {
var suggest = $('.wrapper_input .surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete'
});
suggest.set({
kit: [{
text: 'ест',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'Рестораны и кафе',
type: 'filter'
}]]
});
var e = jQuery.Event('keydown');
e.keyCode = 39; // Right arrow
$('.surt__input').trigger(e);
assert($('.wrapper_input .surt__input').val() == 'ест', 'Текст в инпуте не изменился');
suggest.dispose();
});
it('В автокомплит не выводится ничего если суммарно текст длиннее aunt', function() {
var suggest = $('.wrapper_input .surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete',
aunt: 3
});
suggest.set({
kit: [{
text: 'Ре',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'Рестораны и кафе',
type: 'filter'
}]]
});
var e = jQuery.Event('keydown');
e.keyCode = 40; // Down
$('.surt__input').trigger(e);
e = jQuery.Event('keydown');
e.keyCode = 40; // Down
$('.surt__input').trigger(e);
assert($('.wrapper_input .surt__clone-hint').text() == '', 'Текста в автокомплитере нет');
suggest.dispose();
});
});
describe('Выбор сагестов.', function() {
it('Нажатие вниз + enter приводит к выбору первого сагеста и сабмиту', function() {
var x = 0,
y = 0,
submit = false,
shown,
suggest = $('.surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete',
submit: function() {
x += y + 1;
},
pick: function(kit, c) {
y += 10;
submit = c;
},
show: function(s) {
shown = s;
}
});
suggest.set({
kit: [{
text: 'Ре',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'wifi',
type: 'filter'
}]]
});
var e = jQuery.Event('keydown');
e.keyCode = 40;
$('.surt__input').trigger(e); // Down
e = jQuery.Event('keydown');
e.keyCode = 13;
$('.surt__input').trigger(e); // Enter
assert($('.surt__input').html() == '<div class="surt__token _type_rubric">Ресторан</div>');
assert(y == 10, 'Был вызван метод pick');
assert(submit, 'Был вызван метод pick причем второй аргумент был true');
assert(x == 11, 'Был вызван метод submit');
assert(submit === true, 'Был вызван метод show');
suggest.dispose();
});
it('Удаление сагестов и их повторное заполнение приводит к повторному срабатыванию show', function() {
var shown = 0,
suggest = $('.surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete',
show: function(s) {
if (s) {
shown++;
}
}
});
$('.surt__input').focus();
suggest.set({
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'wifi',
type: 'filter'
}]]
});
assert(shown === 1, 'Был вызван метод show 1 раз: ' + shown);
suggest.set({
suggest: []
});
suggest.set({
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'wifi',
type: 'filter'
}]]
});
assert(shown === 2, 'Был вызван метод show второй раз');
suggest.dispose();
});
it('Фокус на поле при пустом сагесте не приводит к show', function() {
var x = 0,
y = 0,
submit = false,
shown = 0,
suggest = $('.surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete',
show: function(s) {
if (s) {
shown++;
}
}
});
$('.surt__input').focus();
suggest.set({
suggest: []
});
$('.surt__input').blur().focus();
assert(shown === 0, 'show не был вызван ни разу');
suggest.dispose();
});
it('Установка сагеста [] приводит к его удалению', function() {
var shown,
suggest = $('.wrapper_common .surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete',
show: function(e) {
shown = e;
}
});
suggest.set({
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'wifi',
type: 'filter'
}]]
});
assert($('.wrapper_common .surt__suggests-item').length > 0, 'После установки есть два итема сагеста ' + $('.wrapper_common .surt__suggests-item').length);
assert(shown, 'Был вызван show с параметром true');
suggest.set({
suggest: []
});
assert($('.wrapper_common .surt__suggests-item').length == 0, 'После установки [] у сагеста нет ни одного итема (мы удалили их) ' + $('.wrapper_common .surt__suggests-item').length);
assert(!shown, 'Был вызван show с параметром false');
suggest.dispose();
});
it('2 нажатия вниз + enter приводит к выбору второго сагеста', function() {
var suggest = $('.wrapper_common .surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete'
});
suggest.set({
kit: [{
text: 'Ре',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'wifi',
type: 'filter'
}]]
});
$('.wrapper_common .surt .surt__suggests').append('dima');
var e = jQuery.Event('keydown');
e = jQuery.Event('keydown');
e.keyCode = 40;
$('.surt__input').trigger(e); // Down
e = jQuery.Event('keydown');
e.keyCode = 40;
$('.surt__input').trigger(e); // Down
e = jQuery.Event('keydown');
e.keyCode = 13;
$('.surt__input').trigger(e); // Enter
assert($('.wrapper_common .surt__input').html() == '<div class="surt__token _type_filter">wifi</div>', 'В инпут помещен html из второго сагеста');
assert($('.wrapper_common .surt__suggests').html() == '<li class="surt__suggests-item"><div class="surt__token _type_rubric">Ресторан</div></li><li class="surt__suggests-item"><div class="surt__token _type_filter">wifi</div></li>dima', 'HTML из сагестов не перезаписан (производительность)');
suggest.dispose();
});
it('2 нажатия вниз + нажатие вверх + enter приводит к выбору первого сагеста', function() {
var x = 0,
suggest = $('.surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete',
change: function() {
x++;
}
});
suggest.set({
kit: [{
text: 'Ре',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'wifi',
type: 'filter'
}]]
});
$('.wrapper_common .surt .surt__suggests').append('dima');
var e = jQuery.Event('keydown');
// debugger
e = jQuery.Event('keydown'); e.keyCode = 40; $('.surt__input').trigger(e); // Down
e = jQuery.Event('keydown'); e.keyCode = 40; $('.surt__input').trigger(e); // Down keydown
e = jQuery.Event('keydown'); e.keyCode = 40; $('.surt__input').trigger(e); // Down
e = jQuery.Event('keydown'); e.keyCode = 40; $('.surt__input').trigger(e); // Down keydown
e = jQuery.Event('keydown'); e.keyCode = 38; $('.surt__input').trigger(e); // Up keydown
e = jQuery.Event('keyup'); e.keyCode = 38; $('.surt__input').trigger(e); // Up keyup
assert(x === 0, 'change при нажатии вверх-вниз не вызвался');
e = jQuery.Event('keydown');
e.keyCode = 13;
$('.surt__input').trigger(e); // Enter
assert($('.surt__input').html() == '<div class="surt__token _type_rubric">Ресторан</div>', 'HTML совпадает: ' + $('.surt__input').html());
assert($('.wrapper_common .surt__suggests').html() == '<li class="surt__suggests-item"><div class="surt__token _type_rubric">Ресторан</div></li><li class="surt__suggests-item"><div class="surt__token _type_filter">wifi</div></li>dima', 'HTML из сагестов не перезаписан');
suggest.dispose();
});
it('Вниз + вверх + вниз + enter приводит к выбору первого сагеста', function() {
var suggest = $('.surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete'
});
suggest.set({
kit: [{
text: 'Ре',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'wifi',
type: 'filter'
}]]
});
var e = jQuery.Event('keydown');
e = jQuery.Event('keydown');
e.keyCode = 40;
$('.surt__input').trigger(e); // Down
e = jQuery.Event('keydown');
e.keyCode = 38;
$('.surt__input').trigger(e); // Up
e = jQuery.Event('keydown');
e.keyCode = 40;
$('.surt__input').trigger(e); // Down
e = jQuery.Event('keydown');
e.keyCode = 13;
$('.surt__input').trigger(e); // Enter
assert($('.surt__input').html() == '<div class="surt__token _type_rubric">Ресторан</div>');
suggest.dispose();
});
it('Клик по первому сагесту приводит к его выбору, а второй аргумент в pick - false', function() {
var submit,
suggest = $('.surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete',
pick: function(a, c) {
submit = c;
}
});
suggest.set({
kit: [{
text: 'Ре',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'wifi',
type: 'filter'
}]]
});
var e;
e = jQuery.Event('mousedown');
$('.surt__suggests-item').eq(0).trigger(e); // Click
assert($('.surt__input').html() == '<div class="surt__token _type_rubric">Ресторан</div>');
assert(!submit, 'Второй аргумент в pick - false');
suggest.dispose();
});
it('Клик по второму сагесту приводит к его выбору', function() {
var suggest = $('.surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete'
});
suggest.set({
kit: [{
text: 'Ре',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'wifi',
type: 'filter'
}], [{
text: 'Кафе',
type: 'attr'
}]
]});
var e;
e = jQuery.Event('mousedown');
$('.surt__suggests-item').eq(1).trigger(e); // Click
assert($('.surt__input').html() == '<div class="surt__token _type_filter">wifi</div>');
suggest.dispose();
});
it('Клик по первому сагесту, когда текст в инпуте совпадает с ним, приводит к его выбору', function() {
function test(params) {
var suggest = $(params.root).surt(params);
suggest.set({
kit: [{
text: 'Рестора',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}]
]}, true);
var text = $('.surt__input').text();
assert($('.wrapper_common .surt').hasClass('_dropdown'), 'Выпадашка открылась');
assert(!$('.wrapper_delimiter .surt').hasClass('_dropdown'), 'Выпадашка на соседнем инпуте не открылась');
var e;
e = jQuery.Event('mousedown');
$('.wrapper_common .surt__suggests-item').eq(0).trigger(e); // Click
text = $('.surt__input').text();
assert(text == 'Ресторан', 'after: В инпуте text = ' + text);
assert(!$('.wrapper_common .surt').hasClass('_dropdown'), 'Выпадашка закрылась');
suggest.dispose();
}
test({
root: '.wrapper_common .surt',
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint'
});
// В текстовом режиме
test({
root: '.wrapper_common .surt',
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
inputMode: 'text'
});
});
it('Клик по enter не приводит к вызову change', function() {
var x,
suggest = $('.surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete',
change: function() {
x++;
}
});
var e;
e = jQuery.Event('keyup');
e.keyCode = 13; // Enter
x = 0;
$('.surt__input').trigger(e);
assert(x === 0, 'Функция change не выполнилась');
suggest.dispose();
});
it('Клико-выбор сагеста приводит к вызову change', function() {
var x,
suggest = $('.wrapper_common .surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete',
change: function() {
x++;
}
});
suggest.set({
kit: [{
text: 'Рестора',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}]
]}, true);
x = 0;
var e;
e = jQuery.Event('mousedown');
$('.surt__suggests-item').eq(0).trigger(e); // Click
assert(x === 1, 'Функция change выполнилась');
suggest.dispose();
});
it('Нажатие кнопки вниз когда сагеста нет', function() {
var x,
suggest = $('.wrapper_common .surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete',
change: function() {
x++;
}
});
suggest._activeSuggest = 0; // Не установлено при каких обстоятельствах на начальном этапе оно выставляется, но факт
x = 0;
var e;
e = jQuery.Event('keydown');
e.keyCode = 40; // Down
$('.wrapper_common .surt__input').trigger(e);
e = jQuery.Event('keydown');
e.keyCode = 39; // Down
$('.wrapper_common .surt__input').trigger(e);
e = jQuery.Event('keydown');
e.keyCode = 38; // Down
$('.wrapper_common .surt__input').trigger(e);
suggest.dispose();
});
// it('Нажатие вниз 1 раз + наведение мышью на второй сагест приводит к его активации и деактивации первого', function() {
// var suggest = surt({
// root: '.surt',
// input: '.surt__input',
// suggest: '.surt__suggests',
// suggestItemCls: 'surt__suggests-item',
// suggestItemCurrentCls: 'surt__suggests-item_state_current',
// suggestCls: '_dropdown',
// tokenCls: 'surt__token',
// textCls: 'surt__text',
// clone: '.surt__clone-main',
// hint: '.surt__clone-hint',
// autocompleteCls: '_autocomplete'
// });
// suggest.set({
// kit: [{
// text: 'Ре',
// type: 'text'
// }],
// suggest: [[{
// text: 'Ресторан',
// type: 'rubric'
// }], [{
// text: 'Резиденция',
// type: 'rubric'
// }], [{
// text: 'Река',
// type: 'rubric'
// }]]
// });
// var e = jQuery.Event('keydown');
// e.keyCode = 40;
// $('.surt__input').trigger(e); // Down
// assert($('.surt__suggests-item').eq(0).hasClass('surt__suggests-item_state_current'), 'После нажатия вниз самый первый сагест становится активным');
// assert($('.surt__clone-hint').text() == 'сторан', 'Автокомплит принадлежит первому сагесту');
// e = jQuery.Event('mousemove');
// $('.surt__suggests-item').eq(1).trigger(e); // Hover
// assert(!$('.surt__suggests-item').eq(0).hasClass('surt__suggests-item_state_current'), 'После ховера первый сагест перестает быть активным');
// assert($('.surt__suggests-item').eq(1).hasClass('surt__suggests-item_state_current'), 'После ховера второй сагест становится активным');
// assert($('.surt__clone-hint').text() == 'зиденция', 'Автокомплит принадлежит второму сагесту');
// suggest.dispose();
// });
// it('Наведение мыши на второй сагест + нажатие вниз приводит к активации третьего сагеста', function() {
// var suggest = surt({
// root: '.surt',
// input: '.surt__input',
// suggest: '.surt__suggests',
// suggestItemCls: 'surt__suggests-item',
// suggestItemCurrentCls: 'surt__suggests-item_state_current',
// suggestCls: '_dropdown',
// tokenCls: 'surt__token',
// textCls: 'surt__text',
// clone: '.surt__clone-main',
// hint: '.surt__clone-hint',
// autocompleteCls: '_autocomplete'
// });
// suggest.set({
// kit: [{
// text: 'Ре',
// type: 'text'
// }],
// suggest: [[{
// text: 'Ресторан',
// type: 'rubric'
// }], [{
// text: 'Резиденция',
// type: 'rubric'
// }], [{
// text: 'Река',
// type: 'rubric'
// }]]
// });
// var e;
// e = jQuery.Event('mousemove');
// $('.surt__suggests-item').eq(1).trigger(e); // Hover
// assert($('.surt__suggests-item').eq(1).hasClass('surt__suggests-item_state_current'), 'После ховера на второй, второй активируется');
// assert(!$('.surt__suggests-item').eq(0).hasClass('surt__suggests-item_state_current'), 'После ховера на второй, первый деактивируется');
// assert(!$('.surt__suggests-item').eq(2).hasClass('surt__suggests-item_state_current'), 'После ховера на второй, третий деактивируется');
// assert($('.surt__clone-hint').text() == 'зиденция', 'Автокомплит принадлежит второму сагесту');
// e = jQuery.Event('keydown');
// e.keyCode = 40;
// $('.surt__input').trigger(e); // Down
// assert(!$('.surt__suggests-item').eq(0).hasClass('surt__suggests-item_state_current'), 'После нажатия внис со второго на третий, первый деактивируется');
// assert(!$('.surt__suggests-item').eq(1).hasClass('surt__suggests-item_state_current'), 'После нажатия внис со второго на третий, второй деактивируется');
// assert($('.surt__suggests-item').eq(2).hasClass('surt__suggests-item_state_current'), 'После нажатия внис со второго на третий, третий активируется');
// assert($('.surt__clone-hint').text() == 'ка', 'Автокомплит принадлежит третьему сагесту');
// suggest.dispose();
// });
it('Наведение мыши на второй сагест + enter приводит к сабмиту второг сагеста', function() {
var submit,
suggest = $('.surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete',
submit: function(data) {
submit = true;
}
});
suggest.set({
kit: [{
text: 'Ре',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'Резиденция',
type: 'rubric'
}], [{
text: 'Река',
type: 'rubric'
}]]
});
var e;
e = jQuery.Event('mousemove');
$('.surt__suggests-item').eq(1).trigger(e); // Hover
e = jQuery.Event('keydown');
e.keyCode = 13;
$('.surt__input').trigger(e); // Enter
assert(submit, 'Был вызван сабмит');
suggest.dispose();
});
it('Если дошли до сагеста и продолжили ввод - сагест должен подставиться + пробел', function() {
var suggest = $('.surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete'
});
suggest.set({
kit: [{
text: 'Ре',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'Резиденция',
type: 'rubric'
}], [{
text: 'Река',
type: 'rubric'
}]]
});
var e = jQuery.Event('keydown');
e.keyCode = 40;
$('.surt__input').trigger(e); // Down
e = jQuery.Event('keyup');
e.keyCode = 65; // a
$('.surt__input').trigger(e); // Up
text = $('.surt__input').text();
assert(text == 'Ресторан е', 'сагест подставился');
suggest.dispose();
});
it('Если дошли до сагеста и продолжили ввод - сагест должен подставиться + пробел, но на backspace реакции быть не должно', function() {
var suggest = $('.surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete'
});
suggest.set({
kit: [{
text: 'Ре',
type: 'text'
}],
suggest: [[{
text: 'Ресторан',
type: 'rubric'
}], [{
text: 'Резиденция',
type: 'rubric'
}], [{
text: 'Река',
type: 'rubric'
}]]
});
var e = jQuery.Event('keydown');
e.keyCode = 40;
$('.surt__input').trigger(e); // Down
e = jQuery.Event('keyup');
e.keyCode = 8; // Backspace
$('.surt__input').trigger(e);
text = $('.surt__input').text();
assert(text == 'Ре', 'сагест не подставился, текст в инпуте: ' + text);
suggest.dispose();
});
});
describe('Набор текста.', function() {
it('keyup по cmd должен инициировать обновление кита', function() {
var suggest = $('.surt').surt({
input: '.surt__input',
suggest: '.surt__suggests',
suggestItemCls: 'surt__suggests-item',
suggestItemCurrentCls: 'surt__suggests-item_state_current',
suggestCls: '_dropdown',
tokenCls: 'surt__token',
textCls: 'surt__text',
clone: '.surt__clone-main',
hint: '.surt__clone-hint',
autocompleteCls: '_autocomplete'
});
var e;
// CMD
$('.surt__input').text('рестораны');
e = jQuery.Event('keyup');
e.keyCode = 91;
$('.surt__input').eq(0).trigger(e);
assert(suggest.kit.length == 1);
$('.surt__input').text('');
e = jQuery.Event(