source: frontend/node_modules/eslint-plugin-jsx-a11y/__tests__/src/rules/mouse-events-have-key-events-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: 5.5 KB
Line 
1/**
2 * @fileoverview Enforce onmouseover/onmouseout are accompanied
3 * by onfocus/onblur.
4 * @author Ethan Cohen
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/mouse-events-have-key-events';
15
16// -----------------------------------------------------------------------------
17// Tests
18// -----------------------------------------------------------------------------
19
20const ruleTester = new RuleTester();
21
22const mouseOverError = {
23 message: 'onMouseOver must be accompanied by onFocus for accessibility.',
24 type: 'JSXAttribute',
25};
26const pointerEnterError = {
27 message: 'onPointerEnter must be accompanied by onFocus for accessibility.',
28 type: 'JSXAttribute',
29};
30const mouseOutError = {
31 message: 'onMouseOut must be accompanied by onBlur for accessibility.',
32 type: 'JSXAttribute',
33};
34const pointerLeaveError = {
35 message: 'onPointerLeave must be accompanied by onBlur for accessibility.',
36 type: 'JSXAttribute',
37};
38
39ruleTester.run('mouse-events-have-key-events', rule, {
40 valid: parsers.all([].concat(
41 { code: '<div onMouseOver={() => void 0} onFocus={() => void 0} />;' },
42 {
43 code: '<div onMouseOver={() => void 0} onFocus={() => void 0} {...props} />;',
44 },
45 { code: '<div onMouseOver={handleMouseOver} onFocus={handleFocus} />;' },
46 {
47 code: '<div onMouseOver={handleMouseOver} onFocus={handleFocus} {...props} />;',
48 },
49 { code: '<div />;' },
50 { code: '<div onBlur={() => {}} />' },
51 { code: '<div onFocus={() => {}} />' },
52 { code: '<div onMouseOut={() => void 0} onBlur={() => void 0} />' },
53 { code: '<div onMouseOut={() => void 0} onBlur={() => void 0} {...props} />' },
54 { code: '<div onMouseOut={handleMouseOut} onBlur={handleOnBlur} />' },
55 { code: '<div onMouseOut={handleMouseOut} onBlur={handleOnBlur} {...props} />' },
56 { code: '<MyElement />' },
57 { code: '<MyElement onMouseOver={() => {}} />' },
58 { code: '<MyElement onMouseOut={() => {}} />' },
59 { code: '<MyElement onBlur={() => {}} />' },
60 { code: '<MyElement onFocus={() => {}} />' },
61 { code: '<MyElement onMouseOver={() => {}} {...props} />' },
62 { code: '<MyElement onMouseOut={() => {}} {...props} />' },
63 { code: '<MyElement onBlur={() => {}} {...props} />' },
64 { code: '<MyElement onFocus={() => {}} {...props} />' },
65 /* Passing in empty options doesn't check any event handlers */
66 {
67 code: '<div onMouseOver={() => {}} onMouseOut={() => {}} />',
68 options: [{ hoverInHandlers: [], hoverOutHandlers: [] }],
69 },
70 /* Passing in custom handlers */
71 {
72 code: '<div onMouseOver={() => {}} onFocus={() => {}} />',
73 options: [{ hoverInHandlers: ['onMouseOver'] }],
74 },
75 {
76 code: '<div onMouseEnter={() => {}} onFocus={() => {}} />',
77 options: [{ hoverInHandlers: ['onMouseEnter'] }],
78 },
79 {
80 code: '<div onMouseOut={() => {}} onBlur={() => {}} />',
81 options: [{ hoverOutHandlers: ['onMouseOut'] }],
82 },
83 {
84 code: '<div onMouseLeave={() => {}} onBlur={() => {}} />',
85 options: [{ hoverOutHandlers: ['onMouseLeave'] }],
86 },
87 {
88 code: '<div onMouseOver={() => {}} onMouseOut={() => {}} />',
89 options: [
90 { hoverInHandlers: ['onPointerEnter'], hoverOutHandlers: ['onPointerLeave'] },
91 ],
92 },
93 /* Custom options only checks the handlers passed in */
94 {
95 code: '<div onMouseLeave={() => {}} />',
96 options: [{ hoverOutHandlers: ['onPointerLeave'] }],
97 },
98 )).map(parserOptionsMapper),
99 invalid: parsers.all([].concat(
100 { code: '<div onMouseOver={() => void 0} />;', errors: [mouseOverError] },
101 { code: '<div onMouseOut={() => void 0} />', errors: [mouseOutError] },
102 {
103 code: '<div onMouseOver={() => void 0} onFocus={undefined} />;',
104 errors: [mouseOverError],
105 },
106 {
107 code: '<div onMouseOut={() => void 0} onBlur={undefined} />',
108 errors: [mouseOutError],
109 },
110 {
111 code: '<div onMouseOver={() => void 0} {...props} />',
112 errors: [mouseOverError],
113 },
114 {
115 code: '<div onMouseOut={() => void 0} {...props} />',
116 errors: [mouseOutError],
117 },
118 /* Custom options */
119 {
120 code: '<div onMouseOver={() => {}} onMouseOut={() => {}} />',
121 options: [
122 { hoverInHandlers: ['onMouseOver'], hoverOutHandlers: ['onMouseOut'] },
123 ],
124 errors: [mouseOverError, mouseOutError],
125 },
126 {
127 code: '<div onPointerEnter={() => {}} onPointerLeave={() => {}} />',
128 options: [
129 { hoverInHandlers: ['onPointerEnter'], hoverOutHandlers: ['onPointerLeave'] },
130 ],
131 errors: [pointerEnterError, pointerLeaveError],
132 },
133 {
134 code: '<div onMouseOver={() => {}} />',
135 options: [{ hoverInHandlers: ['onMouseOver'] }],
136 errors: [mouseOverError],
137 },
138 {
139 code: '<div onPointerEnter={() => {}} />',
140 options: [{ hoverInHandlers: ['onPointerEnter'] }],
141 errors: [pointerEnterError],
142 },
143 {
144 code: '<div onMouseOut={() => {}} />',
145 options: [{ hoverOutHandlers: ['onMouseOut'] }],
146 errors: [mouseOutError],
147 },
148 {
149 code: '<div onPointerLeave={() => {}} />',
150 options: [{ hoverOutHandlers: ['onPointerLeave'] }],
151 errors: [pointerLeaveError],
152 },
153 )).map(parserOptionsMapper),
154});
Note: See TracBrowser for help on using the repository browser.