123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- module('Selection containers - Inline search');
- var MultipleSelection = require('select2/selection/multiple');
- var InlineSearch = require('select2/selection/search');
- var $ = require('jquery');
- var Options = require('select2/options');
- var Utils = require('select2/utils');
- var options = new Options({});
- test('backspace will remove a choice', function (assert) {
- assert.expect(3);
- var KEYS = require('select2/keys');
- var $container = $('#qunit-fixture .event-container');
- var container = new MockContainer();
- var CustomSelection = Utils.Decorate(MultipleSelection, InlineSearch);
- var $element = $('#qunit-fixture .multiple');
- var selection = new CustomSelection($element, options);
- var $selection = selection.render();
- selection.bind(container, $container);
- // The unselect event should be triggered at some point
- selection.on('unselect', function () {
- assert.ok(true, 'A choice was unselected');
- });
- // Add some selections and render the search
- selection.update([
- {
- id: '1',
- text: 'One'
- }
- ]);
- var $search = $selection.find('input');
- var $choices = $selection.find('.select2-selection__choice');
- assert.equal($search.length, 1, 'The search was visible');
- assert.equal($choices.length, 1, 'The choice was rendered');
- // Trigger the backspace on the search
- var backspace = $.Event('keydown', {
- which: KEYS.BACKSPACE
- });
- $search.trigger(backspace);
- });
- test('backspace will set the search text', function (assert) {
- assert.expect(3);
- var KEYS = require('select2/keys');
- var $container = $('#qunit-fixture .event-container');
- var container = new MockContainer();
- var CustomSelection = Utils.Decorate(MultipleSelection, InlineSearch);
- var $element = $('#qunit-fixture .multiple');
- var selection = new CustomSelection($element, options);
- var $selection = selection.render();
- selection.bind(container, $container);
- // Add some selections and render the search
- selection.update([
- {
- id: '1',
- text: 'One'
- }
- ]);
- var $search = $selection.find('input');
- var $choices = $selection.find('.select2-selection__choice');
- assert.equal($search.length, 1, 'The search was visible');
- assert.equal($choices.length, 1, 'The choice was rendered');
- // Trigger the backspace on the search
- var backspace = $.Event('keydown', {
- which: KEYS.BACKSPACE
- });
- $search.trigger(backspace);
- assert.equal($search.val(), 'One', 'The search text was set');
- });
- test('updating selection does not shift the focus', function (assert) {
- // Check for IE 8, which triggers a false negative during testing
- if (window.attachEvent && !window.addEventListener) {
- // We must expect 0 assertions or the test will fail
- assert.expect(0);
- return;
- }
- var $container = $('#qunit-fixture .event-container');
- var container = new MockContainer();
- var CustomSelection = Utils.Decorate(MultipleSelection, InlineSearch);
- var $element = $('#qunit-fixture .multiple');
- var selection = new CustomSelection($element, options);
- var $selection = selection.render();
- selection.bind(container, $container);
- // Update the selection so the search is rendered
- selection.update([]);
- // Make it visible so the browser can place focus on the search
- $container.append($selection);
- var $search = $selection.find('input');
- $search.trigger('focus');
- assert.equal($search.length, 1, 'The search was not visible');
- assert.equal(
- document.activeElement,
- $search[0],
- 'The search did not have focus originally'
- );
- // Trigger an update, this should redraw the search box
- selection.update([]);
- assert.equal($search.length, 1, 'The search box disappeared');
- assert.equal(
- document.activeElement,
- $search[0],
- 'The search did not have focus after the selection was updated'
- );
- });
- test('the focus event shifts the focus', function (assert) {
- // Check for IE 8, which triggers a false negative during testing
- if (window.attachEvent && !window.addEventListener) {
- // We must expect 0 assertions or the test will fail
- assert.expect(0);
- return;
- }
- var $container = $('#qunit-fixture .event-container');
- var container = new MockContainer();
- var CustomSelection = Utils.Decorate(MultipleSelection, InlineSearch);
- var $element = $('#qunit-fixture .multiple');
- var selection = new CustomSelection($element, options);
- var $selection = selection.render();
- selection.bind(container, $container);
- // Update the selection so the search is rendered
- selection.update([]);
- // Make it visible so the browser can place focus on the search
- $container.append($selection);
- // The search should not be automatically focused
- var $search = $selection.find('input');
- assert.notEqual(
- document.activeElement,
- $search[0],
- 'The search had focus originally'
- );
- assert.equal($search.length, 1, 'The search was not visible');
- // Focus the container
- container.trigger('focus');
- // Make sure it focuses the search
- assert.equal($search.length, 1, 'The search box disappeared');
- assert.equal(
- document.activeElement,
- $search[0],
- 'The search did not have focus originally'
- );
- });
|