source: frontend/node_modules/eslint-plugin-jsx-a11y/__tests__/src/rules/no-onchange-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: 2.2 KB
Line 
1/**
2 * @fileoverview Enforce usage of onBlur over onChange on select menus for accessibility.
3 * @author Ethan Cohen
4 */
5
6// -----------------------------------------------------------------------------
7// Requirements
8// -----------------------------------------------------------------------------
9
10import { RuleTester } from 'eslint';
11import parserOptionsMapper from '../../__util__/parserOptionsMapper';
12import parsers from '../../__util__/helpers/parsers';
13import rule from '../../../src/rules/no-onchange';
14
15// -----------------------------------------------------------------------------
16// Tests
17// -----------------------------------------------------------------------------
18
19const ruleTester = new RuleTester();
20
21const expectedError = {
22 message: 'onBlur must be used instead of onchange, unless absolutely necessary and it causes no negative consequences for keyboard only or screen reader users.',
23 type: 'JSXOpeningElement',
24};
25
26const componentsSettings = {
27 'jsx-a11y': {
28 components: {
29 CustomOption: 'option',
30 Input: 'input',
31 },
32 },
33};
34
35ruleTester.run('no-onchange', rule, {
36 valid: parsers.all([].concat(
37 { code: '<select onBlur={() => {}} />;' },
38 { code: '<select onBlur={handleOnBlur} />;' },
39 { code: '<option />;' },
40 { code: '<option onBlur={() => {}} onChange={() => {}} />;' },
41 { code: '<option {...props} />' },
42 { code: '<input onChange={() => {}} />;' },
43 { code: '<input onChange={handleOnChange} />;' },
44 { code: '<input />;' },
45 { code: '<input onChange={() => {}} onChange={() => {}} />;' },
46 { code: '<input {...props} />' },
47 { code: '<Input onChange={() => {}} />;', settings: componentsSettings },
48 { code: '<CustomOption onChange={() => {}} />' },
49 )).map(parserOptionsMapper),
50 invalid: parsers.all([].concat(
51 { code: '<select onChange={() => {}} />;', errors: [expectedError] },
52 { code: '<select onChange={handleOnChange} />;', errors: [expectedError] },
53 { code: '<option onChange={() => {}} />', errors: [expectedError] },
54 { code: '<option onChange={() => {}} {...props} />', errors: [expectedError] },
55 { code: '<CustomOption onChange={() => {}} />;', errors: [expectedError], settings: componentsSettings },
56 )).map(parserOptionsMapper),
57});
Note: See TracBrowser for help on using the repository browser.