/**
* @fileoverview Disallow inherently non-interactive elements to be assigned
* interactive roles.
* @author Jesse Beach
* @author $AUTHOR
*/
// -----------------------------------------------------------------------------
// Requirements
// -----------------------------------------------------------------------------
import { RuleTester } from 'eslint';
import { configs } from '../../../src/index';
import parserOptionsMapper from '../../__util__/parserOptionsMapper';
import parsers from '../../__util__/helpers/parsers';
import rule from '../../../src/rules/no-noninteractive-element-to-interactive-role';
import ruleOptionsMapperFactory from '../../__util__/ruleOptionsMapperFactory';
// -----------------------------------------------------------------------------
// Tests
// -----------------------------------------------------------------------------
const ruleTester = new RuleTester();
const errorMessage = 'Non-interactive elements should not be assigned interactive roles.';
const expectedError = {
message: errorMessage,
type: 'JSXAttribute',
};
const ruleName = 'jsx-a11y/no-noninteractive-element-to-interactive-role';
const componentsSettings = {
'jsx-a11y': {
components: {
Article: 'article',
Input: 'input',
},
},
};
const alwaysValid = [
{ code: '' },
{ code: '' },
/* Interactive elements */
{ code: '' },
{ code: '' },
{ code: '' },
{ code: ';' },
{ code: ';' },
{ code: '' },
/* All flavors of input */
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
/* End all flavors of input */
{ code: ';' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '
;' },
{ code: '
;' },
/* Interactive elements */
{ code: '' },
{ code: '' },
{ code: '' },
/* All flavors of input */
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
/* End all flavors of input */
{ code: ';' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '
;' },
/* Interactive elements */
{ code: '' },
{ code: '' },
{ code: '' },
/* All flavors of input */
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
/* End all flavors of input */
{ code: ';' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '
;' },
/* HTML elements with neither an interactive or non-interactive valence (static) */
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ' void 0} aria-hidden={false} role="button" />;' },
{ code: ';' },
{ code: ';' },
{ code: '
;' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ' | ;' },
{ code: ' | ;' },
{ code: ' | ;' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
/* HTML elements attributed with an interactive role */
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
/* Presentation is a special case role that indicates intentional static semantics */
{ code: ';' },
/* HTML elements attributed with an abstract role */
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
/* HTML elements with an inherent non-interactive role, assigned an
* interactive role. */
{ code: ';' },
{ code: '' },
{ code: ';' },
{ code: '' },
{ code: ';' },
{ code: '' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: ';' },
{ code: '