aboutsummaryrefslogtreecommitdiffhomepage
path: root/public/bower_components/select2/tests/data
diff options
context:
space:
mode:
authorMarvin Borner2018-07-13 19:06:45 +0200
committerMarvin Borner2018-07-13 19:06:45 +0200
commit6fcfb7c04d32e1c8b26a312295bf7ac3ec2d2ad7 (patch)
treedbc87ef16fa01d5d99116de283592b8fe5e02944 /public/bower_components/select2/tests/data
parentdfd839f27146df0ad0494e11734fc7d310c70ebf (diff)
Fixed many permissions and began admin interface
Diffstat (limited to 'public/bower_components/select2/tests/data')
-rw-r--r--public/bower_components/select2/tests/data/array-tests.js318
-rw-r--r--public/bower_components/select2/tests/data/base-tests.js29
-rw-r--r--public/bower_components/select2/tests/data/inputData-tests.js158
-rw-r--r--public/bower_components/select2/tests/data/maximumInputLength-tests.js138
-rw-r--r--public/bower_components/select2/tests/data/maximumSelectionLength-tests.js202
-rw-r--r--public/bower_components/select2/tests/data/minimumInputLength-tests.js138
-rw-r--r--public/bower_components/select2/tests/data/select-tests.js489
-rw-r--r--public/bower_components/select2/tests/data/tags-tests.js276
-rw-r--r--public/bower_components/select2/tests/data/tokenizer-tests.js219
9 files changed, 1967 insertions, 0 deletions
diff --git a/public/bower_components/select2/tests/data/array-tests.js b/public/bower_components/select2/tests/data/array-tests.js
new file mode 100644
index 0000000..65a6e32
--- /dev/null
+++ b/public/bower_components/select2/tests/data/array-tests.js
@@ -0,0 +1,318 @@
+module('Data adapters - Array');
+
+var ArrayData = require('select2/data/array');
+var $ = require('jquery');
+var Options = require('select2/options');
+
+var arrayOptions = new Options({
+ data: [
+ {
+ id: 'default',
+ text: 'Default'
+ },
+ {
+ id: '1',
+ text: 'One'
+ },
+ {
+ id: '2',
+ text: '2'
+ }
+ ]
+});
+
+var extraOptions = new Options ({
+ data: [
+ {
+ id: 'default',
+ text: 'Default',
+ extra: true
+ },
+ {
+ id: 'One',
+ text: 'One',
+ extra: true
+ }
+ ]
+});
+
+var nestedOptions = new Options({
+ data: [
+ {
+ text: 'Default',
+ children: [
+ {
+ text: 'Next',
+ children: [
+ {
+ id: 'a',
+ text: 'Option'
+ }
+ ]
+ }
+ ]
+ }
+ ]
+});
+
+test('current gets default for single', function (assert) {
+ var $select = $('#qunit-fixture .single-empty');
+
+ var data = new ArrayData($select, arrayOptions);
+
+ data.current(function (val) {
+ assert.equal(
+ val.length,
+ 1,
+ 'There should always be a selected item for array data.'
+ );
+
+ var item = val[0];
+
+ assert.equal(
+ item.id,
+ 'default',
+ 'The first item should be selected'
+ );
+ });
+});
+
+test('current gets default for multiple', function (assert) {
+ var $select = $('#qunit-fixture .multiple');
+
+ var data = new ArrayData($select, arrayOptions);
+
+ data.current(function (val) {
+ assert.equal(
+ val.length,
+ 0,
+ 'There should be no default selection.'
+ );
+ });
+});
+
+test('current works with existing selections', function (assert) {
+ var $select = $('#qunit-fixture .multiple');
+
+ var data = new ArrayData($select, arrayOptions);
+
+ $select.val(['One']);
+
+ data.current(function (val) {
+ assert.equal(
+ val.length,
+ 1,
+ 'There should only be one existing selection.'
+ );
+
+ var option = val[0];
+
+ assert.equal(
+ option.id,
+ 'One',
+ 'The id should be equal to the value of the option tag.'
+ );
+
+ assert.equal(
+ option.text,
+ 'One',
+ 'The text should be equal to the text of the option tag.'
+ );
+ });
+});
+
+test('current works with selected data', function (assert) {
+ var $select = $('#qunit-fixture .single-empty');
+
+ var data = new ArrayData($select, arrayOptions);
+
+ data.select({
+ id: '2',
+ text: '2'
+ });
+
+ data.current(function (val) {
+ assert.equal(
+ val.length,
+ 1,
+ 'There should only be one option selected.'
+ );
+
+ var option = val[0];
+
+ assert.equal(
+ option.id,
+ '2',
+ 'The id should match the original id from the array.'
+ );
+
+ assert.equal(
+ option.text,
+ '2',
+ 'The text should match the original text from the array.'
+ );
+ });
+});
+
+test('select works for single', function (assert) {
+ var $select = $('#qunit-fixture .single-empty');
+
+ var data = new ArrayData($select, arrayOptions);
+
+ assert.equal(
+ $select.val(),
+ 'default',
+ 'There should already be a selection'
+ );
+
+ data.select({
+ id: '1',
+ text: 'One'
+ });
+
+ assert.equal(
+ $select.val(),
+ '1',
+ 'The selected value should be the same as the selected id'
+ );
+});
+
+test('multiple sets the value', function (assert) {
+ var $select = $('#qunit-fixture .multiple');
+
+ var data = new ArrayData($select, arrayOptions);
+
+ assert.equal($select.val(), null);
+
+ data.select({
+ id: 'default',
+ text: 'Default'
+ });
+
+ assert.deepEqual($select.val(), ['default']);
+});
+
+test('multiple adds to the old value', function (assert) {
+ var $select = $('#qunit-fixture .multiple');
+
+ var data = new ArrayData($select, arrayOptions);
+
+ $select.val(['One']);
+
+ assert.deepEqual($select.val(), ['One']);
+
+ data.select({
+ id: 'default',
+ text: 'Default'
+ });
+
+ assert.deepEqual($select.val(), ['One', 'default']);
+});
+
+test('option tags are automatically generated', function (assert) {
+ var $select = $('#qunit-fixture .single-empty');
+
+ var data = new ArrayData($select, arrayOptions);
+
+ assert.equal(
+ $select.find('option').length,
+ 3,
+ 'An <option> element should be created for each object'
+ );
+});
+
+test('option tags can receive new data', function(assert) {
+ var $select = $('#qunit-fixture .single');
+
+ var data = new ArrayData($select, extraOptions);
+
+ assert.equal(
+ $select.find('option').length,
+ 2,
+ 'Only one more <option> element should be created'
+ );
+
+ data.select({
+ id: 'default'
+ });
+
+ assert.ok(
+ $select.find(':selected').data('data').extra,
+ '<option> default should have new data'
+ );
+
+ data.select({
+ id: 'One'
+ });
+
+ assert.ok(
+ $select.find(':selected').data('data').extra,
+ '<option> One should have new data'
+ );
+});
+
+test('optgroup tags can also be generated', function (assert) {
+ var $select = $('#qunit-fixture .single-empty');
+
+ var data = new ArrayData($select, nestedOptions);
+
+ assert.equal(
+ $select.find('option').length,
+ 1,
+ 'An <option> element should be created for the one selectable object'
+ );
+
+ assert.equal(
+ $select.find('optgroup').length,
+ 2,
+ 'An <optgroup> element should be created for the two with children'
+ );
+});
+
+test('optgroup tags have the right properties', function (assert) {
+ var $select = $('#qunit-fixture .single-empty');
+
+ var data = new ArrayData($select, nestedOptions);
+
+ var $group = $select.children('optgroup');
+
+ assert.equal(
+ $group.prop('label'),
+ 'Default',
+ 'An `<optgroup>` label should match the text property'
+ );
+
+ assert.equal(
+ $group.children().length,
+ 1,
+ 'The <optgroup> should have one child under it'
+ );
+});
+
+test('existing selections are respected on initialization', function (assert) {
+ var $select = $(
+ '<select>' +
+ '<option>First</option>' +
+ '<option selected>Second</option>' +
+ '</select>'
+ );
+
+ var options = new Options({
+ data: [
+ {
+ id: 'Second',
+ text: 'Second'
+ },
+ {
+ id: 'Third',
+ text: 'Third'
+ }
+ ]
+ });
+
+ assert.equal($select.val(), 'Second');
+
+ var data = new ArrayData($select, options);
+
+ assert.equal($select.val(), 'Second');
+}); \ No newline at end of file
diff --git a/public/bower_components/select2/tests/data/base-tests.js b/public/bower_components/select2/tests/data/base-tests.js
new file mode 100644
index 0000000..b90158f
--- /dev/null
+++ b/public/bower_components/select2/tests/data/base-tests.js
@@ -0,0 +1,29 @@
+module('Data adapters - Base');
+
+var BaseData = require('select2/data/base');
+var $ = require('jquery');
+var Options = require('select2/options');
+
+var options = new Options({});
+
+test('current is required', function (assert) {
+ var data = new BaseData($('#qunit-fixture select'), options);
+
+ assert.throws(
+ function () {
+ data.current(function () {});
+ },
+ 'current has no default implementation'
+ );
+});
+
+test('query is required', function (assert) {
+ var data = new BaseData($('#qunit-fixture select'), options);
+
+ assert.throws(
+ function () {
+ data.query({}, function () {});
+ },
+ 'query has no default implementation'
+ );
+});
diff --git a/public/bower_components/select2/tests/data/inputData-tests.js b/public/bower_components/select2/tests/data/inputData-tests.js
new file mode 100644
index 0000000..f2124ef
--- /dev/null
+++ b/public/bower_components/select2/tests/data/inputData-tests.js
@@ -0,0 +1,158 @@
+module('Data adapters - <input> compatibility');
+
+var $ = require('jquery');
+
+var Options = require('select2/options');
+var Utils = require('select2/utils');
+
+var ArrayData = require('select2/data/array');
+var InputData = require('select2/compat/inputData');
+
+var InputAdapter = Utils.Decorate(ArrayData, InputData);
+
+test('test that options can be selected', function (assert) {
+ var options = new Options({
+ data: [
+ {
+ id: 'test',
+ text: 'Test'
+ }
+ ]
+ });
+ var $element = $('<input />');
+
+ var adapter = new InputAdapter($element, options);
+
+ adapter.select({
+ id: 'test'
+ });
+
+ assert.equal(
+ $element.val(),
+ 'test',
+ 'The id of the item should be the value'
+ );
+});
+
+test('unselect the single selected option clears the value', function (assert) {
+ var options = new Options({
+ data: [
+ {
+ id: 'test',
+ text: 'Test',
+ selected: true
+ }
+ ]
+ });
+ var $element = $('<input />');
+
+ var adapter = new InputAdapter($element, options);
+
+ adapter.unselect({
+ id: 'test'
+ });
+
+ assert.equal(
+ $element.val(),
+ '',
+ 'The id should no longer be in the value'
+ );
+});
+
+test('options can be unselected individually', function (assert) {
+ var options = new Options({
+ data: [
+ {
+ id: 'test',
+ text: 'Test'
+ },
+ {
+ id: 'test2',
+ text: 'Test2'
+ },
+ {
+ id: 'test3',
+ text: 'Test3'
+ }
+ ]
+ });
+ var $element = $('<input />');
+ $element.val('test,test2,test3');
+
+ var adapter = new InputAdapter($element, options);
+
+ adapter.unselect({
+ id: 'test2'
+ });
+
+ assert.equal(
+ $element.val(),
+ 'test,test3',
+ 'The value should contain all the still selected options'
+ );
+});
+
+test('default values can be set', function (assert) {
+ assert.expect(4);
+
+ var options = new Options({
+ data: [
+ {
+ id: 'test',
+ text: 'Test'
+ }
+ ]
+ });
+ var $element = $('<input value="test" />');
+
+ var adapter = new InputAdapter($element, options);
+
+ adapter.current(function (data) {
+ assert.equal(
+ data.length,
+ 1,
+ 'There should only be a single selected option'
+ );
+
+ var item = data[0];
+
+ assert.equal(item.id, 'test');
+ assert.equal(item.text, 'Test');
+ });
+
+ assert.equal(
+ $element.val(),
+ 'test',
+ 'The value should not have been altered'
+ );
+});
+
+test('no default value', function (assert) {
+ assert.expect(2);
+
+ var options = new Options({
+ data: [
+ {
+ id: 'test',
+ text: 'Test'
+ }
+ ]
+ });
+ var $element = $('<input />');
+
+ var adapter = new InputAdapter($element, options);
+
+ adapter.current(function (data) {
+ assert.equal(
+ data.length,
+ 0,
+ 'There should be no selected options'
+ );
+ });
+
+ assert.equal(
+ $element.val(),
+ '',
+ 'The value should not have been altered'
+ );
+});
diff --git a/public/bower_components/select2/tests/data/maximumInputLength-tests.js b/public/bower_components/select2/tests/data/maximumInputLength-tests.js
new file mode 100644
index 0000000..e855713
--- /dev/null
+++ b/public/bower_components/select2/tests/data/maximumInputLength-tests.js
@@ -0,0 +1,138 @@
+module('Data adapters - Maximum input length');
+
+var MaximumInputLength = require('select2/data/maximumInputLength');
+var $ = require('jquery');
+var Options = require('select2/options');
+var Utils = require('select2/utils');
+
+function MaximumInputStub () {
+ this.called = false;
+}
+
+MaximumInputStub.prototype.query = function (params, callback) {
+ this.called = true;
+};
+
+var MaximumInputData = Utils.Decorate(MaximumInputStub, MaximumInputLength);
+
+test('0 never displays the notice', function (assert) {
+ var zeroOptions = new Options({
+ maximumInputLength: 0
+ });
+
+ var data = new MaximumInputData(null, zeroOptions);
+
+ data.trigger = function () {
+ assert.ok(false, 'No events should be triggered');
+ };
+
+ data.query({
+ term: ''
+ });
+
+ assert.ok(data.called);
+
+ data = new MaximumInputData(null, zeroOptions);
+
+ data.query({
+ term: 'test'
+ });
+
+ assert.ok(data.called);
+});
+
+test('< 0 never displays the notice', function (assert) {
+ var negativeOptions = new Options({
+ maximumInputLength: -1
+ });
+
+ var data = new MaximumInputData(null, negativeOptions);
+
+ data.trigger = function () {
+ assert.ok(false, 'No events should be triggered');
+ };
+
+ data.query({
+ term: ''
+ });
+
+ assert.ok(data.called);
+
+ data = new MaximumInputData(null, negativeOptions);
+
+ data.query({
+ term: 'test'
+ });
+
+ assert.ok(data.called);
+});
+
+test('triggers when input is too long', function (assert) {
+ var options = new Options({
+ maximumInputLength: 1
+ });
+
+ var data = new MaximumInputData(null, options);
+
+ data.trigger = function () {
+ assert.ok(true, 'The event should be triggered.');
+ };
+
+ data.query({
+ term: 'no'
+ });
+
+ assert.ok(!data.called, 'The adapter should not be called');
+});
+
+test('does not trigger when equal', function (assert) {
+ var options = new Options({
+ maximumInputLength: 10
+ });
+
+ var data = new MaximumInputData(null, options);
+
+ data.trigger = function () {
+ assert.ok(false, 'The event should not be triggered.');
+ };
+
+ data.query({
+ term: '1234567890'
+ });
+
+ assert.ok(data.called);
+});
+
+test('does not trigger when less', function (assert) {
+ var options = new Options({
+ maximumInputLength: 10
+ });
+
+ var data = new MaximumInputData(null, options);
+
+ data.trigger = function () {
+ assert.ok(false, 'The event should not be triggered.');
+ };
+
+ data.query({
+ term: '123'
+ });
+
+ assert.ok(data.called);
+});
+
+test('works with null term', function (assert) {
+ var options = new Options({
+ maximumInputLength: 1
+ });
+
+ var data = new MaximumInputData(null, options);
+
+ data.trigger = function () {
+ assert.ok(false, 'The event should not be triggered');
+ };
+
+ data.query({});
+
+ assert.ok(data.called);
+});
diff --git a/public/bower_components/select2/tests/data/maximumSelectionLength-tests.js b/public/bower_components/select2/tests/data/maximumSelectionLength-tests.js
new file mode 100644
index 0000000..89943b3
--- /dev/null
+++ b/public/bower_components/select2/tests/data/maximumSelectionLength-tests.js
@@ -0,0 +1,202 @@
+module('Data adapters - Maximum selection length');
+
+var MaximumSelectionLength = require('select2/data/maximumSelectionLength');
+
+var $ = require('jquery');
+var Options = require('select2/options');
+var Utils = require('select2/utils');
+
+function MaximumSelectionStub () {
+ this.called = false;
+ this.currentData = [];
+}
+
+MaximumSelectionStub.prototype.current = function (callback) {
+ callback(this.currentData);
+};
+
+MaximumSelectionStub.prototype.val = function (val) {
+ this.currentData.push(val);
+};
+
+MaximumSelectionStub.prototype.query = function (params, callback) {
+ this.called = true;
+};
+
+var MaximumSelectionData = Utils.Decorate(
+ MaximumSelectionStub,
+ MaximumSelectionLength
+);
+
+test('0 never displays the notice', function (assert) {
+ var zeroOptions = new Options({
+ maximumSelectionLength: 0
+ });
+
+ var data = new MaximumSelectionData(null, zeroOptions);
+
+ data.trigger = function () {
+ assert.ok(false, 'No events should be triggered');
+ };
+
+ data.query({
+ term: ''
+ });
+
+ assert.ok(data.called);
+
+ data = new MaximumSelectionData(null, zeroOptions);
+
+ data.trigger = function () {
+ assert.ok(false, 'No events should be triggered');
+ };
+
+ data.val('1');
+
+ data.query({
+ term: ''
+ });
+
+ assert.ok(data.called);
+
+ data = new MaximumSelectionData(null, zeroOptions);
+
+ data.trigger = function () {
+ assert.ok(false, 'No events should be triggered');
+ };
+
+ data.val('1');
+ data.val('2');
+
+ data.query({
+ term: ''
+ });
+
+ assert.ok(data.called);
+});
+
+test('< 0 never displays the notice', function (assert) {
+ var negativeOptions = new Options({
+ maximumSelectionLength: -1
+ });
+
+ var data = new MaximumSelectionData(null, negativeOptions);
+
+ data.trigger = function () {
+ assert.ok(false, 'No events should be triggered');
+ };
+
+ data.query({
+ term: ''
+ });
+
+ assert.ok(data.called);
+
+ data = new MaximumSelectionData(null, negativeOptions);
+
+ data.trigger = function () {
+ assert.ok(false, 'No events should be triggered');
+ };
+
+ data.val('1');
+
+ data.query({
+ term: ''
+ });
+
+ assert.ok(data.called);
+
+ data = new MaximumSelectionData(null, negativeOptions);
+
+ data.trigger = function () {
+ assert.ok(false, 'No events should be triggered');
+ };
+
+ data.val('1');
+ data.val('2');
+
+ data.query({
+ term: ''
+ });
+
+ assert.ok(data.called);
+});
+
+test('triggers when >= 1 selection' , function (assert) {
+ var maxOfOneOptions = new Options({
+ maximumSelectionLength: 1
+ });
+ var data = new MaximumSelectionData(null, maxOfOneOptions);
+
+ data.trigger = function () {
+ assert.ok(false, 'No events should be triggered');
+ };
+
+ data.query({
+ term: ''
+ });
+
+ assert.ok(data.called);
+
+ data = new MaximumSelectionData(null, maxOfOneOptions);
+
+ data.trigger = function () {
+ assert.ok(true, 'The event should be triggered.');
+ };
+
+ data.val('1');
+
+ data.query({
+ term: ''
+ });
+
+ assert.ok(!data.called);
+
+});
+
+test('triggers when >= 2 selections' , function (assert) {
+ var maxOfTwoOptions = new Options({
+ maximumSelectionLength: 2
+ });
+ var data = new MaximumSelectionData(null, maxOfTwoOptions);
+
+ data.trigger = function () {
+ assert.ok(false, 'No events should be triggered');
+ };
+
+ data.query({
+ term: ''
+ });
+
+ assert.ok(data.called);
+
+ data = new MaximumSelectionData(null, maxOfTwoOptions);
+
+ data.trigger = function () {
+ assert.ok(false, 'No events should be triggered');
+ };
+
+ data.val('1');
+
+ data.query({
+ term: ''
+ });
+
+ assert.ok(data.called);
+
+ data = new MaximumSelectionData(null, maxOfTwoOptions);
+
+ data.trigger = function () {
+ assert.ok(true, 'The event should be triggered.');
+ };
+
+ data.val('1');
+ data.val('2');
+
+ data.query({
+ term: ''
+ });
+
+ assert.ok(!data.called);
+
+});
diff --git a/public/bower_components/select2/tests/data/minimumInputLength-tests.js b/public/bower_components/select2/tests/data/minimumInputLength-tests.js
new file mode 100644
index 0000000..a67db08
--- /dev/null
+++ b/public/bower_components/select2/tests/data/minimumInputLength-tests.js
@@ -0,0 +1,138 @@
+module('Data adapters - Minimum input length');
+
+var MinimumInputLength = require('select2/data/minimumInputLength');
+var $ = require('jquery');
+var Options = require('select2/options');
+var Utils = require('select2/utils');
+
+function StubData () {
+ this.called = false;
+}
+
+StubData.prototype.query = function (params, callback) {
+ this.called = true;
+};
+
+var MinimumData = Utils.Decorate(StubData, MinimumInputLength);
+
+test('0 never displays the notice', function (assert) {
+ var zeroOptions = new Options({
+ minimumInputLength: 0
+ });
+
+ var data = new MinimumData(null, zeroOptions);
+
+ data.trigger = function () {
+ assert.ok(false, 'No events should be triggered');
+ };
+
+ data.query({
+ term: ''
+ });
+
+ assert.ok(data.called);
+
+ data = new MinimumData(null, zeroOptions);
+
+ data.query({
+ term: 'test'
+ });
+
+ assert.ok(data.called);
+});
+
+test('< 0 never displays the notice', function (assert) {
+ var negativeOptions = new Options({
+ minimumInputLength: -1
+ });
+
+ var data = new MinimumData(null, negativeOptions);
+
+ data.trigger = function () {
+ assert.ok(false, 'No events should be triggered');
+ };
+
+ data.query({
+ term: ''
+ });
+
+ assert.ok(data.called);
+
+ data = new MinimumData(null, negativeOptions);
+
+ data.query({
+ term: 'test'
+ });
+
+ assert.ok(data.called);
+});
+
+test('triggers when input is not long enough', function (assert) {
+ var options = new Options({
+ minimumInputLength: 10
+ });
+
+ var data = new MinimumData(null, options);
+
+ data.trigger = function () {
+ assert.ok(true, 'The event should be triggered.');
+ };
+
+ data.query({
+ term: 'no'
+ });
+
+ assert.ok(!data.called);
+});
+
+test('does not trigger when equal', function (assert) {
+ var options = new Options({
+ minimumInputLength: 10
+ });
+
+ var data = new MinimumData(null, options);
+
+ data.trigger = function () {
+ assert.ok(false, 'The event should not be triggered.');
+ };
+
+ data.query({
+ term: '1234567890'
+ });
+
+ assert.ok(data.called);
+});
+
+test('does not trigger when greater', function (assert) {
+ var options = new Options({
+ minimumInputLength: 10
+ });
+
+ var data = new MinimumData(null, options);
+
+ data.trigger = function () {
+ assert.ok(false, 'The event should not be triggered.');
+ };
+
+ data.query({
+ term: '12345678901'
+ });
+
+ assert.ok(data.called);
+});
+
+test('works with null term', function (assert) {
+ var options = new Options({
+ minimumInputLength: 1
+ });
+
+ var data = new MinimumData(null, options);
+
+ data.trigger = function () {
+ assert.ok(true, 'The event should be triggered');
+ };
+
+ data.query({});
+
+ assert.ok(!data.called);
+});
diff --git a/public/bower_components/select2/tests/data/select-tests.js b/public/bower_components/select2/tests/data/select-tests.js
new file mode 100644
index 0000000..7d17966
--- /dev/null
+++ b/public/bower_components/select2/tests/data/select-tests.js
@@ -0,0 +1,489 @@
+module('Data adapters - Select - current');
+
+var SelectData = require('select2/data/select');
+var $ = require('jquery');
+var Options = require('select2/options');
+var selectOptions = new Options({});
+
+test('current gets default for single', function (assert) {
+ var $select = $('#qunit-fixture .single');
+
+ var data = new SelectData($select, selectOptions);
+
+ data.current(function (data) {
+ assert.equal(
+ data.length,
+ 1,
+ 'There should only be one selected option'
+ );
+
+ var option = data[0];
+
+ assert.equal(
+ option.id,
+ 'One',
+ 'The value of the option tag should be the id'
+ );
+
+ assert.equal(
+ option.text,
+ 'One',
+ 'The text within the option tag should be the text'
+ );
+ });
+});
+
+test('current gets default for multiple', function (assert) {
+ var $select = $('#qunit-fixture .multiple');
+
+ var data = new SelectData($select, selectOptions);
+
+ data.current(function (data) {
+ assert.equal(
+ data.length,
+ 0,
+ 'Multiple selects have no default selection.'
+ );
+ });
+});
+
+test('current gets options with explicit value', function (assert) {
+ var $select = $('#qunit-fixture .single');
+
+ var $option = $('<option value="1">One</option>');
+ $select.append($option);
+
+ var data = new SelectData($select, selectOptions);
+
+ $select.val('1');
+
+ data.current(function (data) {
+ assert.equal(
+ data.length,
+ 1,
+ 'There should be one selected option'
+ );
+
+ var option = data[0];
+
+ assert.equal(
+ option.id,
+ '1',
+ 'The option value should be the selected id'
+ );
+
+ assert.equal(
+ option.text,
+ 'One',
+ 'The text should match the text for the option tag'
+ );
+ });
+});
+
+test('current gets options with implicit value', function (assert) {
+ var $select = $('#qunit-fixture .single');
+
+ var data = new SelectData($select, selectOptions);
+
+ $select.val('One');
+
+ data.current(function (val) {
+ assert.equal(
+ val.length,
+ 1,
+ 'There should only be one selected value'
+ );
+
+ var option = val[0];
+
+ assert.equal(
+ option.id,
+ 'One',
+ 'The id should be the same as the option text'
+ );
+
+ assert.equal(
+ option.text,
+ 'One',
+ 'The text should be the same as the option text'
+ );
+ });
+});
+
+test('select works for single', function (assert) {
+ var $select = $('#qunit-fixture .single-with-placeholder');
+
+ var data = new SelectData($select, selectOptions);
+
+ assert.equal($select.val(), 'placeholder');
+
+ data.select({
+ id: 'One',
+ text: 'One'
+ });
+
+ assert.equal($select.val(), 'One');
+});
+
+test('multiple sets the value', function (assert) {
+ var $select = $('#qunit-fixture .multiple');
+
+ var data = new SelectData($select, selectOptions);
+
+ assert.equal($select.val(), null);
+
+ data.select({
+ id: 'Two',
+ text: 'Two'
+ });
+
+ assert.deepEqual($select.val(), ['Two']);
+});
+
+test('multiple adds to the old value', function (assert) {
+ var $select = $('#qunit-fixture .multiple');
+
+ var data = new SelectData($select, selectOptions);
+
+ $select.val(['Two']);
+
+ assert.deepEqual($select.val(), ['Two']);
+
+ data.select({
+ id: 'One',
+ text: 'One'
+ });
+
+ assert.deepEqual($select.val(), ['One', 'Two']);
+});
+
+test('duplicates - single - same id on select triggers change',
+ function (assert) {
+ var $select = $('#qunit-fixture .duplicates');
+
+ var data = new SelectData($select, data);
+ var second = $('#qunit-fixture .duplicates option')[2];
+
+ var changeTriggered = false;
+
+ assert.equal($select.val(), 'one');
+
+ $select.on('change', function () {
+ changeTriggered = true;
+ });
+
+ data.select({
+ id: 'one',
+ text: 'Uno',
+ element: second
+ });
+
+ assert.equal(
+ $select.val(),
+ 'one',
+ 'The value never changed'
+ );
+
+ assert.ok(
+ changeTriggered,
+ 'The change event should be triggered'
+ );
+
+ assert.ok(
+ second.selected,
+ 'The second duplicate is selected, not the first'
+ );
+});
+
+test('duplicates - single - different id on select triggers change',
+ function (assert) {
+ var $select = $('#qunit-fixture .duplicates');
+
+ var data = new SelectData($select, data);
+ var second = $('#qunit-fixture .duplicates option')[2];
+
+ var changeTriggered = false;
+
+ $select.val('two');
+
+ $select.on('change', function () {
+ changeTriggered = true;
+ });
+
+ data.select({
+ id: 'one',
+ text: 'Uno',
+ element: second
+ });
+
+ assert.equal(
+ $select.val(),
+ 'one',
+ 'The value changed to the duplicate id'
+ );
+
+ assert.ok(
+ changeTriggered,
+ 'The change event should be triggered'
+ );
+
+ assert.ok(
+ second.selected,
+ 'The second duplicate is selected, not the first'
+ );
+});
+
+test('duplicates - multiple - same id on select triggers change',
+function (assert) {
+ var $select = $('#qunit-fixture .duplicates-multi');
+
+ var data = new SelectData($select, data);
+ var second = $('#qunit-fixture .duplicates-multi option')[2];
+
+ var changeTriggered = false;
+
+ $select.val(['one']);
+
+ $select.on('change', function () {
+ changeTriggered = true;
+ });
+
+ data.select({
+ id: 'one',
+ text: 'Uno',
+ element: second
+ });
+
+ assert.deepEqual(
+ $select.val(),
+ ['one', 'one'],
+ 'The value now has duplicates'
+ );
+
+ assert.ok(
+ changeTriggered,
+ 'The change event should be triggered'
+ );
+
+ assert.ok(
+ second.selected,
+ 'The second duplicate is selected, not the first'
+ );
+});
+
+test('duplicates - multiple - different id on select triggers change',
+function (assert) {
+ var $select = $('#qunit-fixture .duplicates-multi');
+
+ var data = new SelectData($select, data);
+ var second = $('#qunit-fixture .duplicates-multi option')[2];
+
+ var changeTriggered = false;
+
+ $select.val(['two']);
+
+ $select.on('change', function () {
+ changeTriggered = true;
+ });
+
+ data.select({
+ id: 'one',
+ text: 'Uno',
+ element: second
+ });
+
+ assert.deepEqual(
+ $select.val(),
+ ['two', 'one'],
+ 'The value has the new id'
+ );
+
+ assert.ok(
+ changeTriggered,
+ 'The change event should be triggered'
+ );
+
+ assert.ok(
+ second.selected,
+ 'The second duplicate is selected, not the first'
+ );
+});
+
+module('Data adapter - Select - query');
+
+test('all options are returned with no term', function (assert) {
+ var $select = $('#qunit-fixture .single');
+
+ var data = new SelectData($select, selectOptions);
+
+ data.query({}, function (data) {
+ assert.equal(
+ data.results.length,
+ 1,
+ 'The number of items returned should be equal to the number of options'
+ );
+ });
+});
+
+test('the matcher checks the text', function (assert) {
+ var $select = $('#qunit-fixture .single');
+
+ var data = new SelectData($select, selectOptions);
+
+ data.query({
+ term: 'One'
+ }, function (data) {
+ assert.equal(
+ data.results.length,
+ 1,
+ 'Only the "One" option should be found'
+ );
+ });
+});
+
+test('the matcher ignores case', function (assert) {
+ var $select = $('#qunit-fixture .single');
+
+ var data = new SelectData($select, selectOptions);
+
+ data.query({
+ term: 'one'
+ }, function (data) {
+ assert.equal(
+ data.results.length,
+ 1,
+ 'The "One" option should still be found'
+ );
+ });
+});
+
+test('no options may be returned with no matches', function (assert) {
+ var $select = $('#qunit-fixture .single');
+
+ var data = new SelectData($select, selectOptions);
+
+ data.query({
+ term: 'qwerty'
+ }, function (data) {
+ assert.equal(
+ data.results.length,
+ 0,
+ 'Only matching items should be returned'
+ );
+ });
+});
+
+test('optgroup tags are marked with children', function (assert) {
+ var $select = $('#qunit-fixture .groups');
+
+ var data = new SelectData($select, selectOptions);
+
+ data.query({}, function (data) {
+ assert.ok(
+ 'children' in data.results[0],
+ 'The optgroup element should have children when queried'
+ );
+ });
+});
+
+test('empty optgroups are still shown when queried', function (assert) {
+ var $select = $('#qunit-fixture .groups');
+
+ var data = new SelectData($select, selectOptions);
+
+ data.query({}, function (data) {
+ assert.equal(
+ data.results.length,
+ 2,
+ 'The empty optgroup element should still be returned when queried'
+ );
+
+ var item = data.results[1];
+
+ assert.equal(
+ item.text,
+ 'Empty',
+ 'The text of the empty optgroup should match the label'
+ );
+
+ assert.equal(
+ item.children.length,
+ 0,
+ 'There should be no children in the empty opgroup'
+ );
+ });
+});
+
+test('multiple options with the same value are returned', function (assert) {
+ var $select = $('#qunit-fixture .duplicates');
+
+ var data = new SelectData($select, selectOptions);
+
+ data.query({}, function (data) {
+ assert.equal(
+ data.results.length,
+ 3,
+ 'The duplicate option should still be returned when queried'
+ );
+
+ var first = data.results[0];
+ var duplicate = data.results[2];
+
+ assert.equal(
+ first.id,
+ duplicate.id,
+ 'The duplicates should have the same id'
+ );
+
+ assert.notEqual(
+ first.text,
+ duplicate.text,
+ 'The duplicates do not have the same text'
+ );
+ });
+});
+
+test('data objects use the text of the option', function (assert) {
+ var $select = $('#qunit-fixture .duplicates');
+
+ var data = new SelectData($select, selectOptions);
+
+ var $option = $('<option>&amp;</option>');
+
+ var item = data.item($option);
+
+ assert.equal(item.id, '&');
+ assert.equal(item.text, '&');
+});
+
+test('select option construction accepts id=0 (zero) value', function (assert) {
+ var $select = $('#qunit-fixture .single');
+
+ var selectOptions = [{ id: 0, text: 'Zero Value'}];
+ var data = new SelectData($select, selectOptions);
+
+ var optionElem = data.option(selectOptions[0]);
+
+ // If was "Zero Value"", then it ignored id property
+ assert.equal(
+ optionElem[0].value,
+ '0',
+ 'Built option value should be "0" (zero as a string).'
+ );
+});
+
+test('select option construction accepts id="" (empty string) value',
+ function (assert) {
+ var $select = $('#qunit-fixture .single');
+
+ var selectOptions = [{ id: '', text: 'Empty String'}];
+ var data = new SelectData($select, selectOptions);
+
+ var optionElem = data.option(selectOptions[0]);
+
+ assert.equal(
+ optionElem[0].value,
+ '',
+ 'Built option value should be an empty string.'
+ );
+});
diff --git a/public/bower_components/select2/tests/data/tags-tests.js b/public/bower_components/select2/tests/data/tags-tests.js
new file mode 100644
index 0000000..6af8d8a
--- /dev/null
+++ b/public/bower_components/select2/tests/data/tags-tests.js
@@ -0,0 +1,276 @@
+module('Data adapters - Tags');
+
+var SelectData = require('select2/data/select');
+var Tags = require('select2/data/tags');
+
+var $ = require('jquery');
+var Options = require('select2/options');
+var Utils = require('select2/utils');
+
+var SelectTags = Utils.Decorate(SelectData, Tags);
+var options = new Options({
+ tags: true
+});
+
+test('does not trigger on blank or null terms', function (assert) {
+ var data = new SelectTags($('#qunit-fixture .single'), options);
+
+ data.query({
+ term: ''
+ }, function (data) {
+ assert.equal(data.results.length, 1);
+
+ var item = data.results[0];
+
+ assert.equal(item.id, 'One');
+ assert.equal(item.text, 'One');
+ });
+
+ data.query({
+ term: null
+ }, function (data) {
+ assert.equal(data.results.length, 1);
+
+ var item = data.results[0];
+
+ assert.equal(item.id, 'One');
+ assert.equal(item.text, 'One');
+ });
+});
+
+test('white space is trimmed by default', function (assert) {
+ var data = new SelectTags($('#qunit-fixture .single'), options);
+
+ data.query({
+ term: ' '
+ }, function (data) {
+ assert.equal(data.results.length, 1);
+
+ var item = data.results[0];
+
+ assert.equal(item.id, 'One');
+ assert.equal(item.text, 'One');
+ });
+
+ data.query({
+ term: ' One '
+ }, function (data) {
+ assert.equal(data.results.length, 1);
+
+ var item = data.results[0];
+
+ assert.equal(item.id, 'One');
+ assert.equal(item.text, 'One');
+ });
+});
+
+test('does not create option if text is same but lowercase', function (assert) {
+ var data = new SelectTags($('#qunit-fixture .single'), options);
+
+ data.query({
+ term: 'one'
+ }, function (data) {
+ assert.equal(data.results.length, 1);
+
+ var item = data.results[0];
+
+ assert.equal(item.id, 'One');
+ assert.equal(item.text, 'One');
+ });
+});
+
+test('does not trigger for additional pages', function (assert) {
+ var data = new SelectTags($('#qunit-fixture .single'), options);
+
+ data.query({
+ page: 2
+ }, function (data) {
+ assert.equal(data.results.length, 1);
+
+ var item = data.results[0];
+
+ assert.equal(item.id, 'One');
+ assert.equal(item.text, 'One');
+ });
+});
+
+test('creates tag at beginning', function (assert) {
+ var data = new SelectTags($('#qunit-fixture .single'), options);
+
+ data.query({
+ term: 'o'
+ }, function (data) {
+ assert.equal(data.results.length, 2);
+
+ var first = data.results[0];
+
+ assert.equal(first.id, 'o');
+ assert.equal(first.text, 'o');
+ });
+});
+
+test('tags can be the only result', function (assert) {
+ var data = new SelectTags($('#qunit-fixture .single'), options);
+
+ data.query({
+ term: 'test'
+ }, function (data) {
+ assert.equal(data.results.length, 1);
+
+ var item = data.results[0];
+
+ assert.equal(item.id, 'test');
+ assert.equal(item.text, 'test');
+ });
+});
+
+test('tags are injected as options', function (assert) {
+ var data = new SelectTags($('#qunit-fixture .single'), options);
+
+ data.query({
+ term: 'test'
+ }, function (data) {
+ assert.equal(data.results.length, 1);
+
+ var $children = $('#qunit-fixture .single option');
+
+ assert.equal($children.length, 2);
+
+ var $tag = $children.last();
+
+ assert.equal($tag.val(), 'test');
+ assert.equal($tag.text(), 'test');
+ });
+});
+
+test('old tags are removed automatically', function (assert) {
+ var data = new SelectTags($('#qunit-fixture .single'), options);
+
+ data.query({
+ term: 'first'
+ }, function (data) {
+ assert.equal(data.results.length, 1);
+
+ var $children = $('#qunit-fixture .single option');
+
+ assert.equal($children.length, 2);
+ });
+
+ data.query({
+ term: 'second'
+ }, function (data) {
+ assert.equal(data.results.length, 1);
+
+ var $children = $('#qunit-fixture .single option');
+
+ assert.equal($children.length, 2);
+
+ var $tag = $children.last();
+
+ assert.equal($tag.val(), 'second');
+ assert.equal($tag.text(), 'second');
+ });
+});
+
+test('insertTag controls the tag location', function (assert) {
+ var data = new SelectTags($('#qunit-fixture .single'), options);
+
+ data.insertTag = function (data, tag) {
+ data.push(tag);
+ };
+
+ data.query({
+ term: 'o'
+ }, function (data) {
+ assert.equal(data.results.length, 2);
+
+ var item = data.results[1];
+
+ assert.equal(item.id, 'o');
+ assert.equal(item.text, 'o');
+ });
+});
+
+test('insertTag can be controlled through the options', function (assert) {
+ var options = new Options({
+ insertTag: function (data, tag) {
+ data.push(tag);
+ }
+ });
+ var data = new SelectTags($('#qunit-fixture .single'), options);
+
+ data.query({
+ term: 'o'
+ }, function (data) {
+ assert.equal(data.results.length, 2);
+
+ var item = data.results[1];
+
+ assert.equal(item.id, 'o');
+ assert.equal(item.text, 'o');
+ });
+});
+
+test('createTag controls the tag object', function (assert) {
+ var data = new SelectTags($('#qunit-fixture .single'), options);
+
+ data.createTag = function (params) {
+ return {
+ id: 0,
+ text: params.term
+ };
+ };
+
+ data.query({
+ term: 'test'
+ }, function (data) {
+ assert.equal(data.results.length, 1);
+
+ var item = data.results[0];
+
+ assert.equal(item.id, 0);
+ assert.equal(item.text, 'test');
+ });
+});
+
+test('createTag returns null for no tag', function (assert) {
+ var data = new SelectTags($('#qunit-fixture .single'), options);
+
+ data.createTag = function (params) {
+ return null;
+ };
+
+ data.query({
+ term: 'o'
+ }, function (data) {
+ assert.equal(data.results.length, 1);
+ });
+});
+
+test('the createTag options customizes the function', function (assert) {
+ var data = new SelectTags(
+ $('#qunit-fixture .single'),
+ new Options({
+ tags: true,
+ createTag: function (params) {
+ return {
+ id: params.term,
+ text: params.term,
+ tag: true
+ };
+ }
+ })
+ );
+
+ data.query({
+ term: 'test'
+ }, function (data) {
+ assert.equal(data.results.length, 1);
+
+ var item = data.results[0];
+
+ assert.equal(item.id, 'test');
+ assert.equal(item.text, 'test');
+ assert.equal(item.tag, true);
+ });
+}); \ No newline at end of file
diff --git a/public/bower_components/select2/tests/data/tokenizer-tests.js b/public/bower_components/select2/tests/data/tokenizer-tests.js
new file mode 100644
index 0000000..2fa0121
--- /dev/null
+++ b/public/bower_components/select2/tests/data/tokenizer-tests.js
@@ -0,0 +1,219 @@
+module('Data adaptor - Tokenizer');
+
+test('triggers the select event', function (assert) {
+ assert.expect(2);
+
+ var SelectData = require('select2/data/select');
+ var Tokenizer = require('select2/data/tokenizer');
+ var Tags = require('select2/data/tags');
+
+ var Options = require('select2/options');
+ var Utils = require('select2/utils');
+
+ var $ = require('jquery');
+
+ var TokenizedSelect = Utils.Decorate(
+ Utils.Decorate(SelectData, Tags),
+ Tokenizer
+ );
+ var $select = $('#qunit-fixture .single');
+
+ var options = new Options({
+ tags: true,
+ tokenSeparators: [',']
+ });
+
+ var container = new MockContainer();
+ container.dropdown = container.selection = {};
+
+ var $container = $('<div></div>');
+
+ var data = new TokenizedSelect($select, options);
+ data.bind(container, $container);
+
+ data.on('select', function () {
+ assert.ok(true, 'The select event should be triggered');
+ });
+
+ data.query({
+ term: 'first,second'
+ }, function () {
+ assert.ok(true, 'The callback should have succeeded');
+ });
+});
+
+test('createTag can return null', function (assert) {
+ assert.expect(3);
+
+ var SelectData = require('select2/data/select');
+ var Tokenizer = require('select2/data/tokenizer');
+ var Tags = require('select2/data/tags');
+
+ var Options = require('select2/options');
+ var Utils = require('select2/utils');
+
+ var $ = require('jquery');
+
+ var TokenizedSelect = Utils.Decorate(
+ Utils.Decorate(SelectData, Tags),
+ Tokenizer
+ );
+ var $select = $('#qunit-fixture .single');
+
+ var options = new Options({
+ tags: true,
+ tokenSeparators: [','],
+ createTag: function () {
+ assert.ok(true, 'createTag should have been called');
+
+ return null;
+ }
+ });
+
+ var container = new MockContainer();
+ container.dropdown = container.selection = {};
+
+ var $container = $('<div></div>');
+
+ var data = new TokenizedSelect($select, options);
+ data.bind(container, $container);
+
+ data.on('select', function (params) {
+ if (params.data == null) {
+ assert.ok(false, 'Null data should never be selected');
+ }
+ });
+
+ data.query({
+ term: 'first,second'
+ }, function () {
+ assert.ok(true, 'The callback should have succeeded');
+ });
+});
+
+test('createTag returning null does not cut the term', function (assert) {
+ assert.expect(4);
+
+ var SelectData = require('select2/data/select');
+ var Tokenizer = require('select2/data/tokenizer');
+ var Tags = require('select2/data/tags');
+
+ var Options = require('select2/options');
+ var Utils = require('select2/utils');
+
+ var $ = require('jquery');
+
+ var TokenizedSelect = Utils.Decorate(
+ Utils.Decorate(SelectData, Tags),
+ Tokenizer
+ );
+ var $select = $('#qunit-fixture .single');
+
+ var options = new Options({
+ tags: true,
+ tokenSeparators: [',', '"'],
+ createTag: function (params) {
+ var term = params.term;
+
+ // Ignore blanks
+ if (term.length === 0) {
+ return null;
+ }
+
+ // Ignore the leading quote
+ if (term === '"') {
+ return null;
+ }
+
+ // If there is a leading quote, check for a second one
+ if (term[0] === '"' && term[term.length - 1] !== '"') {
+ return null;
+ }
+
+ var text = term.substr(1, term.length - 2);
+
+ return {
+ id: term,
+ text: text
+ };
+ }
+ });
+
+ var container = new MockContainer();
+ container.dropdown = container.selection = {};
+
+ var $container = $('<div></div>');
+
+ var data = new TokenizedSelect($select, options);
+ data.bind(container, $container);
+
+ data.on('select', function (params) {
+ assert.ok(params.data, 'Data should not be null');
+
+ assert.equal(
+ params.data.id,
+ '"first, second"',
+ 'The id should have the quotes'
+ );
+
+ assert.equal(
+ params.data.text,
+ 'first, second',
+ 'The text should not have the quotes'
+ );
+ });
+
+ data.query({
+ term: '"first, second",abc'
+ }, function () {
+ assert.ok(true, 'The callback should have succeeded');
+ });
+});
+
+test('works with multiple tokens given', function (assert) {
+ assert.expect(4);
+
+ var SelectData = require('select2/data/select');
+ var Tokenizer = require('select2/data/tokenizer');
+ var Tags = require('select2/data/tags');
+
+ var Options = require('select2/options');
+ var Utils = require('select2/utils');
+
+ var $ = require('jquery');
+
+ var TokenizedSelect = Utils.Decorate(
+ Utils.Decorate(SelectData, Tags),
+ Tokenizer
+ );
+ var $select = $('#qunit-fixture .multiple');
+
+ var options = new Options({
+ tags: true,
+ tokenSeparators: [',']
+ });
+
+ var container = new MockContainer();
+ container.dropdown = container.selection = {};
+
+ var $container = $('<div></div>');
+
+ var data = new TokenizedSelect($select, options);
+ data.bind(container, $container);
+
+ data.on('select', function () {
+ assert.ok(true, 'The select event should be triggered');
+ });
+
+ data.query({
+ term: 'first,second,third'
+ }, function () {
+ assert.ok(true, 'The callback should have succeeded');
+ });
+
+ assert.equal(
+ $select.children('option').length,
+ 3,
+ 'The two new tags should have been created'
+ );
+}); \ No newline at end of file