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; _AN_Write_text('text', self, false , 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, $('
')); data.current(function (val){ assert.equal(_AN_Read_length('length', val), 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, $('
')); data.current(function (val){ assert.equal(_AN_Read_length('length', val), 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, $('
')); $select.val(['One'] ); data.current(function (val){ assert.equal(_AN_Read_length('length', val), 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, $('
')); data.select({ id: '2', text: '2'} ); data.current(function (val){ assert.equal(_AN_Read_length('length', val), 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, $('
')); 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, $('
')); assert.ok($select.val() == null || _AN_Read_length('length', $select.val()) == 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, $('
')); $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, $('
')); assert.equal(_AN_Read_length('length', $select.find('option')), 4, 'An 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, $('
')); var $group = $select.children('optgroup'); assert.equal($group.prop('label'), 'Default', 'An `` label should match the text property'); assert.equal(_AN_Read_length('length', $group.children()), 1, 'The should have one child under it'); } ); test('existing selections are respected on initialization', function (assert){ var $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, $('
')); assert.equal($select.val(), 'Second'); } );