123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386 |
- module('Data adapters - Array');
-
- var ArrayData = require('select2/data/array');
- var $ = require('jquery');
- var Options = require('select2/options');
- var Utils = require('select2/utils');
-
- var UserDefinedType = function (id, text) {
- var self = this;
-
- self.id = id;
- self.text = text;
-
- return self;
- };
-
- var arrayOptions = new Options({
- data: [
- {
- id: 'default',
- text: 'Default'
- },
- {
- id: '1',
- text: 'One'
- },
- {
- id: '2',
- text: '2'
- },
- new UserDefinedType(1, 'aaaaaa')
- ]
- });
-
- 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);
-
- var container = new MockContainer();
- data.bind(container, $('<div></div>'));
-
- 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);
-
- var container = new MockContainer();
- data.bind(container, $('<div></div>'));
-
- 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);
-
- var container = new MockContainer();
- data.bind(container, $('<div></div>'));
-
- $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);
-
- var container = new MockContainer();
- data.bind(container, $('<div></div>'));
-
- 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);
-
- var container = new MockContainer();
- data.bind(container, $('<div></div>'));
-
- 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);
-
- var container = new MockContainer();
- data.bind(container, $('<div></div>'));
-
- assert.ok(
- $select.val() == null || $select.val().length == 0,
- 'nothing should be selected'
- );
-
- 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);
-
- var container = new MockContainer();
- data.bind(container, $('<div></div>'));
-
- $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);
-
- var container = new MockContainer();
- data.bind(container, $('<div></div>'));
-
- assert.equal(
- $select.find('option').length,
- 4,
- 'An <option> element should be created for each object'
- );
- });
-
- test('automatically generated option tags have a result id', function (assert) {
- var $select = $('#qunit-fixture .single-empty');
-
- var data = new ArrayData($select, arrayOptions);
-
- var container = new MockContainer();
- data.bind(container, $('<div></div>'));
-
- data.select({
- id: 'default'
- });
-
- assert.ok(
- Utils.GetData($select.find(':selected')[0], 'data')._resultId,
- '<option> default should have a result ID assigned'
- );
- });
-
- test('option tags can receive new data', function(assert) {
- var $select = $('#qunit-fixture .single');
-
- var data = new ArrayData($select, extraOptions);
-
- var container = new MockContainer();
- data.bind(container, $('<div></div>'));
-
- assert.equal(
- $select.find('option').length,
- 2,
- 'Only one more <option> element should be created'
- );
-
- data.select({
- id: 'default'
- });
-
- assert.ok(
- Utils.GetData($select.find(':selected')[0], 'data').extra,
- '<option> default should have new data'
- );
-
- data.select({
- id: 'One'
- });
-
- assert.ok(
- Utils.GetData($select.find(':selected')[0], '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);
-
- var container = new MockContainer();
- data.bind(container, $('<div></div>'));
-
- 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 container = new MockContainer();
- data.bind(container, $('<div></div>'));
-
- 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);
-
- var container = new MockContainer();
- data.bind(container, $('<div></div>'));
-
- assert.equal($select.val(), 'Second');
- });
|