| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 | module('Selection containers - Placeholders - Allow clear');var Placeholder = require('select2/selection/placeholder');var AllowClear = require('select2/selection/allowClear');var SingleSelection = require('select2/selection/single');var $ = require('jquery');var Options = require('select2/options');var Utils = require('select2/utils');var AllowClearPlaceholder = Utils.Decorate(  Utils.Decorate(SingleSelection, Placeholder),  AllowClear);var allowClearOptions = new Options({  placeholder: {    id: 'placeholder',    text: 'This is the placeholder'  },  allowClear: true});test('clear is not displayed for single placeholder', function (assert) {  var selection = new AllowClearPlaceholder(    $('#qunit-fixture .single-with-placeholder'),    allowClearOptions  );  var $selection = selection.render();  selection.update([{    id: 'placeholder'  }]);  assert.equal(    $selection.find('.select2-selection__clear').length,    0,    'The clear icon should not be displayed'  );});test('clear is not displayed for multiple placeholder', function (assert) {  var selection = new AllowClearPlaceholder(    $('#qunit-fixture .single-with-placeholder'),    allowClearOptions  );  var $selection = selection.render();  selection.update([]);  assert.equal(    $selection.find('.select2-selection__clear').length,    0,    'The clear icon should not be displayed'  );});test('clear is displayed for placeholder', function (assert) {  var selection = new AllowClearPlaceholder(    $('#qunit-fixture .single-with-placeholder'),    allowClearOptions  );  var $selection = selection.render();  selection.update([{    id: 'one',    test: 'one'  }]);  assert.equal(    $selection.find('.select2-selection__clear').length,    1,    'The clear icon should be displayed'  );});test('clicking clear will set the placeholder value', function (assert) {  var $element = $('#qunit-fixture .single-with-placeholder');  var selection = new AllowClearPlaceholder(    $element,    allowClearOptions  );  var container = new MockContainer();  var $selection = selection.render();  selection.bind(container, $('<div></div'));  $element.val('One');  selection.update([{    id: 'One',    text: 'One'  }]);  var $remove = $selection.find('.select2-selection__clear');  $remove.trigger('mousedown');  assert.equal(    $element.val(),    'placeholder',    'The value should have been reset to the placeholder'  );});test('clicking clear will trigger the unselect event', function (assert) {  assert.expect(3);  var $element = $('#qunit-fixture .single-with-placeholder');  var selection = new AllowClearPlaceholder(    $element,    allowClearOptions  );  var container = new MockContainer();  var $selection = selection.render();  selection.bind(container, $('<div></div'));  $element.val('One');  selection.update([{    id: 'One',    text: 'One'  }]);  selection.on('unselect', function (ev) {    assert.ok(      'data' in ev && ev.data,      'The event should have been triggered with the data property'    );    assert.ok(      $.isPlainObject(ev.data),      'The data should be an object'    );    assert.equal(      ev.data.id,      'One',      'The previous object should be unselected'    );  });  var $remove = $selection.find('.select2-selection__clear');  $remove.trigger('mousedown');});test('preventing the unselect event cancels the clearing', function (assert) {  var $element = $('#qunit-fixture .single-with-placeholder');  var selection = new AllowClearPlaceholder(    $element,    allowClearOptions  );  var container = new MockContainer();  var $selection = selection.render();  selection.bind(container, $('<div></div'));  $element.val('One');  selection.update([{    id: 'One',    text: 'One'  }]);  selection.on('unselect', function (ev) {    ev.prevented = true;  });  var $remove = $selection.find('.select2-selection__clear');  $remove.trigger('mousedown');  assert.equal(    $element.val(),    'One',    'The placeholder should not have been set'  );});test('clear does not work when disabled', function (assert) {  var $element = $('#qunit-fixture .single-with-placeholder');  var selection = new AllowClearPlaceholder(    $element,    allowClearOptions  );  var container = new MockContainer();  var $selection = selection.render();  selection.bind(container, $('<div></div'));  selection.update([{    id: 'One',    text: 'One'  }]);  $element.val('One');  selection.options.set('disabled', true);  var $remove = $selection.find('.select2-selection__clear');  $remove.trigger('mousedown');  assert.equal(    $element.val(),    'One',    'The placeholder should not have been set'  );});
 |