123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- 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'
- );
- });
-
- test('search box without text should propagate click', function (assert) {
- assert.expect(1);
-
- 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);
-
- $selection.on('click', function () {
- assert.ok(true, 'The click event should not have been trapped');
- });
-
- var $search = $selection.find('input');
- $search.trigger('click');
- });
-
- test('search box with text should not propagate click', function (assert) {
- assert.expect(0);
-
- 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);
-
- $selection.on('click', function () {
- assert.ok(false, 'The click event should have been trapped');
- });
-
- var $search = $selection.find('input');
- $search.val('test');
- $search.trigger('click');
- });
-
- test('search box with text should not close dropdown', function (assert) {
- assert.expect(0);
-
- 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);
-
- container.on('close', function () {
- assert.ok(false, 'The dropdown should not have closed');
- });
-
- var $search = $selection.find('input');
- $search.val('test');
- $search.trigger('click');
- });
|