source: frontend/node_modules/eslint-plugin-jsx-a11y/__tests__/src/rules/no-redundant-roles-test.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 2 weeks ago

Fix frontend appearance

  • Property mode set to 100644
File size: 3.3 KB
Line 
1/**
2 * @fileoverview Enforce explicit role property is not the
3 * same as implicit default role property on element.
4 * @author Ethan Cohen <@evcohen>
5 */
6
7// -----------------------------------------------------------------------------
8// Requirements
9// -----------------------------------------------------------------------------
10
11import { RuleTester } from 'eslint';
12import parserOptionsMapper from '../../__util__/parserOptionsMapper';
13import parsers from '../../__util__/helpers/parsers';
14import rule from '../../../src/rules/no-redundant-roles';
15import ruleOptionsMapperFactory from '../../__util__/ruleOptionsMapperFactory';
16
17// -----------------------------------------------------------------------------
18// Tests
19// -----------------------------------------------------------------------------
20
21const ruleTester = new RuleTester();
22
23const expectedError = (element, implicitRole) => ({
24 message: `The element ${element} has an implicit role of ${implicitRole}. Defining this explicitly is redundant and should be avoided.`,
25 type: 'JSXOpeningElement',
26});
27
28const ruleName = 'jsx-a11y/no-redundant-roles';
29
30const componentsSettings = {
31 'jsx-a11y': {
32 components: {
33 Button: 'button',
34 },
35 },
36};
37
38const alwaysValid = [
39 { code: '<div />;' },
40 { code: '<button role="main" />' },
41 { code: '<MyComponent role="button" />' },
42 { code: '<button role={`${foo}button`} />' },
43 { code: '<Button role={`${foo}button`} />', settings: componentsSettings },
44];
45
46const neverValid = [
47 { code: '<button role="button" />', errors: [expectedError('button', 'button')] },
48 { code: '<body role="DOCUMENT" />', errors: [expectedError('body', 'document')] },
49 { code: '<Button role="button" />', settings: componentsSettings, errors: [expectedError('button', 'button')] },
50];
51
52ruleTester.run(`${ruleName}:recommended`, rule, {
53 valid: parsers.all([].concat(
54 ...alwaysValid,
55 { code: '<nav role="navigation" />' },
56 ))
57 .map(parserOptionsMapper),
58 invalid: parsers.all([].concat(
59 neverValid,
60 ))
61 .map(parserOptionsMapper),
62});
63
64const noNavExceptionsOptions = { nav: [] };
65const listException = { ul: ['list'], ol: ['list'] };
66
67ruleTester.run(`${ruleName}:recommended`, rule, {
68 valid: parsers.all([].concat(
69 alwaysValid
70 .map(ruleOptionsMapperFactory(noNavExceptionsOptions)),
71 ))
72 .map(parserOptionsMapper),
73 invalid: parsers.all([].concat(
74 ...neverValid,
75 { code: '<nav role="navigation" />', errors: [expectedError('nav', 'navigation')] },
76 ))
77 .map(ruleOptionsMapperFactory(noNavExceptionsOptions))
78 .map(parserOptionsMapper),
79});
80
81ruleTester.run(`${ruleName}:recommended (valid list role override)`, rule, {
82 valid: parsers.all([].concat(
83 { code: '<ul role="list" />' },
84 { code: '<ol role="list" />' },
85 { code: '<dl role="list" />' },
86 { code: '<img src="example.svg" role="img" />' },
87 { code: '<svg role="img" />' },
88 ))
89 .map(ruleOptionsMapperFactory(listException))
90 .map(parserOptionsMapper),
91 invalid: parsers.all([].concat(
92 { code: '<ul role="list" />', errors: [expectedError('ul', 'list')] },
93 { code: '<ol role="list" />', errors: [expectedError('ol', 'list')] },
94 { code: '<img role="img" />', errors: [expectedError('img', 'img')] },
95 { code: '<img src={someVariable} role="img" />', errors: [expectedError('img', 'img')] },
96 ))
97 .map(parserOptionsMapper),
98});
Note: See TracBrowser for help on using the repository browser.