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