diff --git a/tests/integration.html b/tests/integration.html index 9a6791ce..d8d0ef55 100644 --- a/tests/integration.html +++ b/tests/integration.html @@ -14,6 +14,7 @@ + diff --git a/tests/integration/dom-changes.js b/tests/integration/dom-changes.js new file mode 100644 index 00000000..2d89ae2a --- /dev/null +++ b/tests/integration/dom-changes.js @@ -0,0 +1,257 @@ +module('DOM integration'); + +test('adding a new unselected option changes nothing', function (assert) { + // Any browsers which support mutation observers will not trigger the event + var expected = 4; + if (window.MutationObserver) { + expected = 2; + } else if (!window.addEventListener) { + expected = 2; + } + + assert.expect(expected); + + var asyncDone = null; + var syncDone = assert.async(); + + if (expected != 2) { + asyncDone = assert.async(); + } + + var $ = require('jquery'); + var Options = require('select2/options'); + var Select2 = require('select2/core'); + + var $select = $( + '' + ); + + $('#qunit-fixture').append($select); + + var select = new Select2($select); + + select.on('selection:update', function (args) { + assert.equal( + args.data.length, + 1, + 'There was more than one selection' + ); + + assert.equal( + args.data[0].id, + 'One', + 'The selection changed to something other than One' + ); + + if (expected != 2) { + asyncDone(); + } + }); + + assert.equal( + $select.val(), + 'One' + ); + + var $option = $(''); + + $select.append($option); + + assert.equal( + $select.val(), + 'One' + ); + + syncDone(); +}); + +test('adding a new selected option changes the value', function (assert) { + // handle IE 8 not being supported + var expected = 4; + if (!window.MutationObserver && !window.addEventListener) { + expected = 2; + } + + assert.expect(expected); + + var asyncDone = null; + var syncDone = assert.async(); + + if (expected != 2) { + asyncDone = assert.async(); + } + + var $ = require('jquery'); + var Options = require('select2/options'); + var Select2 = require('select2/core'); + + var $select = $( + '' + ); + + $('#qunit-fixture').append($select); + + var select = new Select2($select); + + select.on('selection:update', function (args) { + assert.equal( + args.data.length, + 1, + 'There was more than one selection' + ); + + assert.equal( + args.data[0].id, + 'Three', + 'The selection did not change to Three' + ); + + if (expected != 2) { + asyncDone(); + } + }); + + assert.equal( + $select.val(), + 'One' + ); + + var $option = $(''); + + $select.append($option); + + assert.equal( + $select.val(), + 'Three' + ); + + syncDone(); +}); + +test('removing an unselected option changes nothing', function (assert) { + // Any browsers which support mutation observers will not trigger the event + var expected = 4; + if (!window.MutationObserver && !window.addEventListener) { + expected = 2; + } + + assert.expect(expected); + + var asyncDone = null; + var syncDone = assert.async(); + + if (expected != 2) { + asyncDone = assert.async(); + } + + var $ = require('jquery'); + var Options = require('select2/options'); + var Select2 = require('select2/core'); + + var $select = $( + '' + ); + + $('#qunit-fixture').append($select); + + var select = new Select2($select); + + select.on('selection:update', function (args) { + assert.equal( + args.data.length, + 1, + 'There was more than one selection' + ); + + assert.equal( + args.data[0].id, + 'One', + 'The selection changed to something other than One' + ); + + if (expected != 2) { + asyncDone(); + } + }); + + assert.equal( + $select.val(), + 'One' + ); + + $select.children().eq(1).remove(); + + assert.equal( + $select.val(), + 'One' + ); + + syncDone(); +}); + +test('removing a selected option changes the value', function (assert) { + // handle IE 8 not being supported + var expected = 3; + if (!window.MutationObserver && !window.addEventListener) { + expected = 2; + } + + assert.expect(expected); + + var asyncDone = null; + var syncDone = assert.async(); + + if (expected != 2) { + asyncDone = assert.async(); + } + + var $ = require('jquery'); + var Options = require('select2/options'); + var Select2 = require('select2/core'); + + var $select = $( + '' + ); + + $('#qunit-fixture').append($select); + + var select = new Select2($select); + + select.on('selection:update', function (args) { + assert.equal( + args.data.length, + 1, + 'There was more than one selection' + ); + + if (expected != 2) { + asyncDone(); + } + }); + + assert.equal( + $select.val(), + 'One' + ); + + $select.children().eq(0).remove(); + + assert.equal( + $select.val(), + 'Two' + ); + + syncDone(); +}); \ No newline at end of file diff --git a/tests/integration/jquery-calls.js b/tests/integration/jquery-calls.js index 78d969d2..6a30137e 100644 --- a/tests/integration/jquery-calls.js +++ b/tests/integration/jquery-calls.js @@ -1,3 +1,5 @@ +module('select2(val)'); + test('multiple elements with arguments works', function (assert) { var $ = require('jquery'); require('jquery.select2');