|
@@ -0,0 +1,218 @@
|
|
|
+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 SinglePlaceholder = Utils.Decorate(
|
|
|
+ Utils.Decorate(SingleSelection, Placeholder),
|
|
|
+ AllowClear
|
|
|
+);
|
|
|
+
|
|
|
+var options = 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 SinglePlaceholder(
|
|
|
+ $('#qunit-fixture .single'),
|
|
|
+ options
|
|
|
+ );
|
|
|
+
|
|
|
+ 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 SinglePlaceholder(
|
|
|
+ $('#qunit-fixture .single'),
|
|
|
+ options
|
|
|
+ );
|
|
|
+
|
|
|
+ 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 SinglePlaceholder(
|
|
|
+ $('#qunit-fixture .single'),
|
|
|
+ options
|
|
|
+ );
|
|
|
+
|
|
|
+ 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');
|
|
|
+
|
|
|
+ var selection = new SinglePlaceholder(
|
|
|
+ $element,
|
|
|
+ options
|
|
|
+ );
|
|
|
+ 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) {
|
|
|
+ expect(3);
|
|
|
+
|
|
|
+ var $element = $('#qunit-fixture .single');
|
|
|
+
|
|
|
+ var selection = new SinglePlaceholder(
|
|
|
+ $element,
|
|
|
+ options
|
|
|
+ );
|
|
|
+ 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');
|
|
|
+
|
|
|
+ var selection = new SinglePlaceholder(
|
|
|
+ $element,
|
|
|
+ options
|
|
|
+ );
|
|
|
+ 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');
|
|
|
+
|
|
|
+ var selection = new SinglePlaceholder(
|
|
|
+ $element,
|
|
|
+ options
|
|
|
+ );
|
|
|
+ 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'
|
|
|
+ );
|
|
|
+});
|