module('Dropdown - Search - Accessibility'); var Utils = require('select2/utils'); var Dropdown = require('select2/dropdown'); var DropdownSearch = Utils.Decorate( Dropdown, require('select2/dropdown/search') ); var $ = require('jquery'); var Options = require('select2/options'); var options = new Options({}); test('role attribute is set to searchbox', function (assert) { var $select = $('#qunit-fixture .single'); var dropdown = new DropdownSearch($select, options); var $dropdown = dropdown.render(); var container = new MockContainer(); dropdown.bind(container, $('')); assert.equal( $dropdown.find('input').attr('role'), 'searchbox', 'The search box is marked as a search box' ); }); test('aria-autocomplete attribute is present', function (assert) { var $select = $('#qunit-fixture .single'); var dropdown = new DropdownSearch($select, options); var $dropdown = dropdown.render(); var container = new MockContainer(); dropdown.bind(container, $('')); assert.equal( $dropdown.find('input').attr('aria-autocomplete'), 'list', 'The search box is marked as autocomplete' ); }); test('aria-activedescendant should not be set initiailly', function (assert) { var $select = $('#qunit-fixture .single'); var dropdown = new DropdownSearch($select, options); var $dropdown = dropdown.render(); var container = new MockContainer(); dropdown.bind(container, $('')); var $search = $dropdown.find('input'); assert.ok( !$search.attr('aria-activedescendant'), 'The search box should not point to anything when it is first rendered' ); }); test('aria-activedescendant should be set after highlight', function (assert) { var $select = $('#qunit-fixture .single'); var dropdown = new DropdownSearch($select, options); var $dropdown = dropdown.render(); var container = new MockContainer(); dropdown.bind(container, $('')); container.trigger('results:focus', { data: { _resultId: 'test' } }); var $search = $dropdown.find('input'); assert.equal( $search.attr('aria-activedescendant'), 'test', 'The search is pointing to the focused result' ); }); test('activedescendant should remove if there is no ID', function (assert) { var $select = $('#qunit-fixture .single'); var dropdown = new DropdownSearch($select, options); var $dropdown = dropdown.render(); var container = new MockContainer(); dropdown.bind(container, $('')); var $search = $dropdown.find('input'); $search.attr('aria-activedescendant', 'test'); container.trigger('results:focus', { data: {} }); assert.ok( !$search.attr('aria-activedescendant'), 'There is no result for the search to be pointing to' ); }); test('aria-activedescendant should be removed when closed', function (assert) { var $select = $('#qunit-fixture .single'); var dropdown = new DropdownSearch($select, options); var $dropdown = dropdown.render(); var container = new MockContainer(); dropdown.bind(container, $('')); var $search = $dropdown.find('input'); $search.attr('aria-activedescendant', 'something'); container.trigger('close'); assert.ok( !$search.attr('aria-activedescendant'), 'There is no active descendant when the dropdown is closed' ); }); test('aria-controls should not be set initiailly', function (assert) { var $select = $('#qunit-fixture .single'); var dropdown = new DropdownSearch($select, options); var $dropdown = dropdown.render(); var container = new MockContainer(); dropdown.bind(container, $('')); var $search = $dropdown.find('input'); assert.ok( !$search.attr('aria-controls'), 'The search box should not point to the results when it is first rendered' ); }); test('aria-controls should be set when opened', function (assert) { var $select = $('#qunit-fixture .single'); var dropdown = new DropdownSearch($select, options); var $dropdown = dropdown.render(); var container = new MockContainer(); dropdown.bind(container, $('')); var $search = $dropdown.find('input'); container.trigger('open'); assert.ok( $search.attr('aria-controls'), 'The search should point to the results when it is opened' ); }); test('aria-controls should be removed when closed', function (assert) { var $select = $('#qunit-fixture .single'); var dropdown = new DropdownSearch($select, options); var $dropdown = dropdown.render(); var container = new MockContainer(); dropdown.bind(container, $('')); var $search = $dropdown.find('input'); $search.attr('aria-controls', 'something'); container.trigger('close'); assert.ok( !$search.attr('aria-controls'), 'There are no results for the search box to point to when it is closed' ); });