From 88503d2c67dc7f4fb9395a17f17edfe4948cf738 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Sun, 21 Jun 2015 21:42:06 -0400 Subject: [PATCH] Add test for 698fe7b This adds the test that ensures that the search focus is still focused, even after the selection is updated (for whatever reason). Note that we are not triggering the `change` event here, and are instead just re-calling `update` on the selection adapter. This is because we do not bind the `change` event in tests, so the selection is never re-rendered and the tests will pass. The `update` method is triggered during the `change` cycle anyway, so this has the same effect while supporting cases where the selection is re-rendered without the selected values changing. --- tests/selection/search-tests.js | 51 +++++++++++++++++++++++++++++++++ tests/unit.html | 1 + 2 files changed, 52 insertions(+) create mode 100644 tests/selection/search-tests.js diff --git a/tests/selection/search-tests.js b/tests/selection/search-tests.js new file mode 100644 index 00000000..957e1304 --- /dev/null +++ b/tests/selection/search-tests.js @@ -0,0 +1,51 @@ +module('Selection containers - Inline search'); + +var MultipleSelection = require('select2/selection/multiple'); +var InlineSearch = require('select2/selection/search'); + +var $ = require('jquery'); +var Options = require('select2/options'); +var Utils = require('select2/utils'); + +var options = new Options({}); + +test('updating selection does not shift the focus', function (assert) { + var $container = $('#qunit-fixture .event-container'); + var container = new MockContainer(); + + var CustomSelection = Utils.Decorate(MultipleSelection, InlineSearch); + + var $element = $('#qunit-fixture .multiple'); + var selection = new CustomSelection($element, options); + + var $selection = selection.render(); + selection.bind(container, $container); + + // Update the selection so the search is rendered + selection.update([]); + + // Make it visible so the browser can place focus on the search + $container.append($selection); + + var $search = $selection.find('input'); + $search.trigger('focus'); + + assert.equal($search.length, 1, 'The search was not visible'); + + assert.equal( + document.activeElement, + $search[0], + 'The search did not have focus originally' + ); + + // Trigger an update, this should redraw the search box + selection.update([]); + + assert.equal($search.length, 1, 'The search box disappeared'); + + assert.equal( + document.activeElement, + $search[0], + 'The search did not have focus after the selection was updated' + ); +}); diff --git a/tests/unit.html b/tests/unit.html index b7eac54b..f130199c 100644 --- a/tests/unit.html +++ b/tests/unit.html @@ -79,6 +79,7 @@ +