123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557 |
- 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.ok(
- $select.val() == null || $select.val().length == 0,
- 'nothing should be selected'
- );
-
- 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>&</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.'
- );
- });
-
- test('user-defined types are normalized properly', function (assert) {
- var $select = $('#qunit-fixture .user-defined'),
-
- UserDefinedType = function (id, text) {
- var self = this;
-
- self.id = id;
- self.text = text;
-
- return self;
- };
-
- var testData = [
- 'Test',
- {
- id: 4,
- text: 'item'
- },
- new UserDefinedType(1, 'aaaaaa')
- ];
-
- var data = new SelectData($select, selectOptions);
-
- var normalizedItem = data._normalizeItem(testData[0]);
- var normalizedItem2 = data._normalizeItem(testData[1]);
- var normalizedItem3 = data._normalizeItem(testData[2]);
-
- assert.equal(
- testData[0],
- normalizedItem.id,
- 'id property should be equal to text after normalize'
- );
-
- assert.equal(
- testData[0],
- normalizedItem.text,
- 'text property should be equal after normalize'
- );
-
- assert.equal(
- testData[1].id,
- normalizedItem2.id,
- 'id property should be equal after normalize'
- );
-
- assert.equal(
- testData[1].text,
- normalizedItem2.text,
- 'text property should be equal after normalize'
- );
-
- assert.equal(
- testData[2].id,
- normalizedItem3.id,
- 'id property should be equal after normalize'
- );
-
- assert.equal(
- testData[2].text,
- normalizedItem3.text,
- 'text property should be equal after normalize'
- );
-
- });
|