a74547aaa7
After we upgraded to QUnit 1.23.1, we gained support for assert.expect(). This allows us to guard against any race conditions within tests, because now expect() will be linked to the specific test instead of the current running test.
219 lines
5.0 KiB
JavaScript
219 lines
5.0 KiB
JavaScript
module('Data adaptor - Tokenizer');
|
|
|
|
test('triggers the select event', function (assert) {
|
|
assert.expect(2);
|
|
|
|
var SelectData = require('select2/data/select');
|
|
var Tokenizer = require('select2/data/tokenizer');
|
|
var Tags = require('select2/data/tags');
|
|
|
|
var Options = require('select2/options');
|
|
var Utils = require('select2/utils');
|
|
|
|
var $ = require('jquery');
|
|
|
|
var TokenizedSelect = Utils.Decorate(
|
|
Utils.Decorate(SelectData, Tags),
|
|
Tokenizer
|
|
);
|
|
var $select = $('#qunit-fixture .single');
|
|
|
|
var options = new Options({
|
|
tags: true,
|
|
tokenSeparators: [',']
|
|
});
|
|
|
|
var container = new MockContainer();
|
|
container.dropdown = container.selection = {};
|
|
|
|
var $container = $('<div></div>');
|
|
|
|
var data = new TokenizedSelect($select, options);
|
|
data.bind(container, $container);
|
|
|
|
data.on('select', function () {
|
|
assert.ok(true, 'The select event should be triggered');
|
|
});
|
|
|
|
data.query({
|
|
term: 'first,second'
|
|
}, function () {
|
|
assert.ok(true, 'The callback should have succeeded');
|
|
});
|
|
});
|
|
|
|
test('createTag can return null', function (assert) {
|
|
assert.expect(3);
|
|
|
|
var SelectData = require('select2/data/select');
|
|
var Tokenizer = require('select2/data/tokenizer');
|
|
var Tags = require('select2/data/tags');
|
|
|
|
var Options = require('select2/options');
|
|
var Utils = require('select2/utils');
|
|
|
|
var $ = require('jquery');
|
|
|
|
var TokenizedSelect = Utils.Decorate(
|
|
Utils.Decorate(SelectData, Tags),
|
|
Tokenizer
|
|
);
|
|
var $select = $('#qunit-fixture .single');
|
|
|
|
var options = new Options({
|
|
tags: true,
|
|
tokenSeparators: [','],
|
|
createTag: function () {
|
|
assert.ok(true, 'createTag should have been called');
|
|
|
|
return null;
|
|
}
|
|
});
|
|
|
|
var container = new MockContainer();
|
|
container.dropdown = container.selection = {};
|
|
|
|
var $container = $('<div></div>');
|
|
|
|
var data = new TokenizedSelect($select, options);
|
|
data.bind(container, $container);
|
|
|
|
data.on('select', function (params) {
|
|
if (params.data == null) {
|
|
assert.ok(false, 'Null data should never be selected');
|
|
}
|
|
});
|
|
|
|
data.query({
|
|
term: 'first,second'
|
|
}, function () {
|
|
assert.ok(true, 'The callback should have succeeded');
|
|
});
|
|
});
|
|
|
|
test('createTag returning null does not cut the term', function (assert) {
|
|
assert.expect(4);
|
|
|
|
var SelectData = require('select2/data/select');
|
|
var Tokenizer = require('select2/data/tokenizer');
|
|
var Tags = require('select2/data/tags');
|
|
|
|
var Options = require('select2/options');
|
|
var Utils = require('select2/utils');
|
|
|
|
var $ = require('jquery');
|
|
|
|
var TokenizedSelect = Utils.Decorate(
|
|
Utils.Decorate(SelectData, Tags),
|
|
Tokenizer
|
|
);
|
|
var $select = $('#qunit-fixture .single');
|
|
|
|
var options = new Options({
|
|
tags: true,
|
|
tokenSeparators: [',', '"'],
|
|
createTag: function (params) {
|
|
var term = params.term;
|
|
|
|
// Ignore blanks
|
|
if (term.length === 0) {
|
|
return null;
|
|
}
|
|
|
|
// Ignore the leading quote
|
|
if (term === '"') {
|
|
return null;
|
|
}
|
|
|
|
// If there is a leading quote, check for a second one
|
|
if (term[0] === '"' && term[term.length - 1] !== '"') {
|
|
return null;
|
|
}
|
|
|
|
var text = term.substr(1, term.length - 2);
|
|
|
|
return {
|
|
id: term,
|
|
text: text
|
|
};
|
|
}
|
|
});
|
|
|
|
var container = new MockContainer();
|
|
container.dropdown = container.selection = {};
|
|
|
|
var $container = $('<div></div>');
|
|
|
|
var data = new TokenizedSelect($select, options);
|
|
data.bind(container, $container);
|
|
|
|
data.on('select', function (params) {
|
|
assert.ok(params.data, 'Data should not be null');
|
|
|
|
assert.equal(
|
|
params.data.id,
|
|
'"first, second"',
|
|
'The id should have the quotes'
|
|
);
|
|
|
|
assert.equal(
|
|
params.data.text,
|
|
'first, second',
|
|
'The text should not have the quotes'
|
|
);
|
|
});
|
|
|
|
data.query({
|
|
term: '"first, second",abc'
|
|
}, function () {
|
|
assert.ok(true, 'The callback should have succeeded');
|
|
});
|
|
});
|
|
|
|
test('works with multiple tokens given', function (assert) {
|
|
assert.expect(4);
|
|
|
|
var SelectData = require('select2/data/select');
|
|
var Tokenizer = require('select2/data/tokenizer');
|
|
var Tags = require('select2/data/tags');
|
|
|
|
var Options = require('select2/options');
|
|
var Utils = require('select2/utils');
|
|
|
|
var $ = require('jquery');
|
|
|
|
var TokenizedSelect = Utils.Decorate(
|
|
Utils.Decorate(SelectData, Tags),
|
|
Tokenizer
|
|
);
|
|
var $select = $('#qunit-fixture .multiple');
|
|
|
|
var options = new Options({
|
|
tags: true,
|
|
tokenSeparators: [',']
|
|
});
|
|
|
|
var container = new MockContainer();
|
|
container.dropdown = container.selection = {};
|
|
|
|
var $container = $('<div></div>');
|
|
|
|
var data = new TokenizedSelect($select, options);
|
|
data.bind(container, $container);
|
|
|
|
data.on('select', function () {
|
|
assert.ok(true, 'The select event should be triggered');
|
|
});
|
|
|
|
data.query({
|
|
term: 'first,second,third'
|
|
}, function () {
|
|
assert.ok(true, 'The callback should have succeeded');
|
|
});
|
|
|
|
assert.equal(
|
|
$select.children('option').length,
|
|
3,
|
|
'The two new tags should have been created'
|
|
);
|
|
}); |