| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 | 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');});
 |