From 31931a4212226c350d9db0a5906886bbdd47b19c Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Wed, 18 Sep 2019 21:44:25 -0400 Subject: [PATCH] Add tests for when dropdownParent isn't in the document --- tests/dropdown/positioning-tests.js | 51 ++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/tests/dropdown/positioning-tests.js b/tests/dropdown/positioning-tests.js index 2da68982..eb721654 100644 --- a/tests/dropdown/positioning-tests.js +++ b/tests/dropdown/positioning-tests.js @@ -174,4 +174,53 @@ test('dropdown is positioned down with absolute offsets', function (assert) { '0px', 'There should not be an extra left offset' ); -}); \ No newline at end of file +}); + +test('dropdown is positioned even when not in document', function (assert) { + var $ = require('jquery'); + var $select = $(''); + + var $container = $('test'); + var container = new MockContainer(); + + 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: $('html') + })); + + 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'), + '0px', + 'The offset should be 0px at the top' + ); + + assert.equal( + $dropdown.css('left'), + '0px', + 'The offset should be 0px on the left' + ); +});