9491e1aae2
* Update tests to be compatible with jQuery 3.0.0 There was a change in jQuery 3 that ensures that the return value of `.val()` on a multiple select is always an array. This is a breaking change from previous versions, where `null` or `undefined` were returned in these scenarios. Because we cannot `assert.equal` on a list of possible values, these assertions were switched to `assert.ok` which should be good enough. * Properly strip out units in positioning tests Before we were assuming that there were no units, and only were we stripping them out if we were expecting 3 digits. Now we just strip out all non-digit characters, so that should do the job and get us what we want. There was a change in jQuery 3.2.0 that caused the units to be returned in these specific calls. They were not previously being returned, so this was not actually an issue. * Add automated testing against jQuery 3.4.1 No tests appear to be currently failing.
177 lines
4.5 KiB
JavaScript
177 lines
4.5 KiB
JavaScript
module('Dropdown - attachBody - positioning');
|
|
|
|
test('appends to the dropdown parent', function (assert) {
|
|
assert.expect(4);
|
|
|
|
var $ = require('jquery');
|
|
|
|
var $select = $('<select></select>');
|
|
var $parent = $('<div></div>');
|
|
|
|
var $container = $('<span></span>');
|
|
var container = new MockContainer();
|
|
|
|
$parent.appendTo($('#qunit-fixture'));
|
|
$select.appendTo($parent);
|
|
|
|
var Utils = require('select2/utils');
|
|
var Options = require('select2/options');
|
|
|
|
var Dropdown = require('select2/dropdown');
|
|
var AttachBody = require('select2/dropdown/attachBody');
|
|
|
|
var DropdownAdapter = Utils.Decorate(Dropdown, AttachBody);
|
|
|
|
var dropdown = new DropdownAdapter($select, new Options({
|
|
dropdownParent: $parent
|
|
}));
|
|
|
|
assert.equal(
|
|
$parent.children().length,
|
|
1,
|
|
'Only the select should be in the container'
|
|
);
|
|
|
|
var $dropdown = dropdown.render();
|
|
|
|
dropdown.bind(container, $container);
|
|
|
|
dropdown.position($dropdown, $container);
|
|
|
|
assert.equal(
|
|
$parent.children().length,
|
|
1,
|
|
'The dropdown should not be placed until after it is opened'
|
|
);
|
|
|
|
dropdown._showDropdown();
|
|
|
|
assert.equal(
|
|
$parent.children().length,
|
|
2,
|
|
'The dropdown should now be in the container as well'
|
|
);
|
|
|
|
assert.ok(
|
|
$.contains($parent[0], $dropdown[0]),
|
|
'The dropdown should be contained within the parent container'
|
|
);
|
|
});
|
|
|
|
test('dropdown is positioned down with static margins', function (assert) {
|
|
var $ = require('jquery');
|
|
var $select = $('<select></select>');
|
|
var $parent = $('<div></div>');
|
|
$parent.css({
|
|
position: 'static',
|
|
marginTop: '5px',
|
|
marginLeft: '10px'
|
|
});
|
|
|
|
var $container = $('<span>test</span>');
|
|
var container = new MockContainer();
|
|
|
|
$('#qunit-fixture').empty();
|
|
|
|
$parent.appendTo($('#qunit-fixture'));
|
|
$container.appendTo($parent);
|
|
|
|
var Utils = require('select2/utils');
|
|
var Options = require('select2/options');
|
|
|
|
var Dropdown = require('select2/dropdown');
|
|
var AttachBody = require('select2/dropdown/attachBody');
|
|
|
|
var DropdownAdapter = Utils.Decorate(Dropdown, AttachBody);
|
|
|
|
var dropdown = new DropdownAdapter($select, new Options({
|
|
dropdownParent: $parent
|
|
}));
|
|
|
|
var $dropdown = dropdown.render();
|
|
|
|
assert.equal(
|
|
$dropdown[0].style.top,
|
|
0,
|
|
'The drodpown should not have any offset before it is displayed'
|
|
);
|
|
|
|
dropdown.bind(container, $container);
|
|
dropdown.position($dropdown, $container);
|
|
dropdown._showDropdown();
|
|
|
|
assert.ok(
|
|
dropdown.$dropdown.hasClass('select2-dropdown--below'),
|
|
'The dropdown should be forced down'
|
|
);
|
|
|
|
assert.equal(
|
|
$dropdown.css('top').replace(/\D+/, ''),
|
|
$container.outerHeight() + 5,
|
|
'The offset should be 5px at the top'
|
|
);
|
|
|
|
assert.equal(
|
|
$dropdown.css('left'),
|
|
'10px',
|
|
'The offset should be 10px on the left'
|
|
);
|
|
});
|
|
|
|
test('dropdown is positioned down with absolute offsets', function (assert) {
|
|
var $ = require('jquery');
|
|
var $select = $('<select></select>');
|
|
var $parent = $('<div></div>');
|
|
$parent.css({
|
|
position: 'absolute',
|
|
top: '10px',
|
|
left: '5px'
|
|
});
|
|
|
|
var $container = $('<span>test</span>');
|
|
var container = new MockContainer();
|
|
|
|
$parent.appendTo($('#qunit-fixture'));
|
|
$container.appendTo($parent);
|
|
|
|
var Utils = require('select2/utils');
|
|
var Options = require('select2/options');
|
|
|
|
var Dropdown = require('select2/dropdown');
|
|
var AttachBody = require('select2/dropdown/attachBody');
|
|
|
|
var DropdownAdapter = Utils.Decorate(Dropdown, AttachBody);
|
|
|
|
var dropdown = new DropdownAdapter($select, new Options({
|
|
dropdownParent: $parent
|
|
}));
|
|
|
|
var $dropdown = dropdown.render();
|
|
|
|
assert.equal(
|
|
$dropdown[0].style.top,
|
|
0,
|
|
'The drodpown should not have any offset before it is displayed'
|
|
);
|
|
|
|
dropdown.bind(container, $container);
|
|
dropdown.position($dropdown, $container);
|
|
dropdown._showDropdown();
|
|
|
|
assert.ok(
|
|
dropdown.$dropdown.hasClass('select2-dropdown--below'),
|
|
'The dropdown should be forced down'
|
|
);
|
|
|
|
assert.equal(
|
|
$dropdown.css('top').replace(/\D+/, ''),
|
|
$container.outerHeight(),
|
|
'There should not be an extra top offset'
|
|
);
|
|
|
|
assert.equal(
|
|
$dropdown.css('left'),
|
|
'0px',
|
|
'There should not be an extra left offset'
|
|
);
|
|
}); |