mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-11-04 09:12:11 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			191 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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'
 | 
						|
  );
 | 
						|
}); |