module('Accessibility - All'); var BaseSelection = require('select2/selection/base'); var SingleSelection = require('select2/selection/single'); var MultipleSelection = require('select2/selection/multiple'); var $ = require('jquery'); var Options = require('select2/options'); var options = new Options({}); test('title is carried over from original element', function (assert) { var $select = $('#qunit-fixture .single'); var selection = new BaseSelection($select, options); var $selection = selection.render(); assert.equal( $selection.attr('title'), $select.attr('title'), 'The title should have been copied over from the original element' ); }); test('aria-expanded reflects the state of the container', function (assert) { var $select = $('#qunit-fixture .single'); var selection = new BaseSelection($select, options); var $selection = selection.render(); var container = new MockContainer(); selection.bind(container, $('')); assert.equal( $selection.attr('aria-expanded'), 'false', 'The container should not be expanded when it is closed' ); container.trigger('open'); assert.equal( $selection.attr('aria-expanded'), 'true', 'The container should be expanded when it is opened' ); }); test('static aria attributes are present', function (assert) { var $select = $('#qunit-fixture .single'); var selection = new BaseSelection($select, options); var $selection = selection.render(); assert.equal( $selection.attr('role'), 'combobox', 'The container should identify as a combobox' ); assert.equal( $selection.attr('aria-haspopup'), 'true', 'The dropdown is considered a popup of the container' ); }); test('the container should be in the tab order', function (assert) { var $select = $('#qunit-fixture .single'); var selection = new BaseSelection($select, options); var $selection = selection.render(); var container = new MockContainer(); selection.bind(container, $('')); assert.equal( $selection.attr('tabindex'), '0', 'The tab index should allow it to fit in the natural tab order' ); container.trigger('disable'); assert.equal( $selection.attr('tabindex'), '-1', 'The selection should be dropped out of the tab order when disabled' ); container.trigger('enable'); assert.equal( $selection.attr('tabindex'), '0', 'The tab index should be restored when re-enabled' ); }); test('a custom tabindex is copied', function (assert) { var $select = $('#qunit-fixture .single'); $select.attr('tabindex', '999'); var selection = new BaseSelection($select, options); var $selection = selection.render(); var container = new MockContainer(); selection.bind(container, $('')); assert.equal( $selection.attr('tabindex'), '999', 'The tab index should match the original tab index' ); container.trigger('disable'); assert.equal( $selection.attr('tabindex'), '-1', 'The selection should be dropped out of the tab order when disabled' ); container.trigger('enable'); assert.equal( $selection.attr('tabindex'), '999', 'The tab index should be restored when re-enabled' ); }); test('aria-disabled should reflected disabled state', function (assert) { var $select = $('#qunit-fixture .single'); var selection = new BaseSelection($select, options); var $selection = selection.render(); var container = new MockContainer(); selection.bind(container, $('')); assert.equal( $selection.attr('aria-disabled'), 'false', 'The tab index should match the original tab index' ); container.trigger('disable'); assert.equal( $selection.attr('aria-disabled'), 'true', 'The selection should be dropped out of the tab order when disabled' ); container.trigger('enable'); assert.equal( $selection.attr('aria-disabled'), 'false', 'The tab index should be restored when re-enabled' ); }); module('Accessibility - Single'); test('aria-labelledby should match the rendered container', function (assert) { var $select = $('#qunit-fixture .single'); var selection = new SingleSelection($select, options); var $selection = selection.render(); var container = new MockContainer(); selection.bind(container, $('')); var $rendered = $selection.find('.select2-selection__rendered'); assert.equal( $selection.attr('aria-labelledby'), $rendered.attr('id'), 'The rendered selection should label the container' ); }); module('Accessibility - Multiple');