source: frontend/node_modules/eslint-plugin-jsx-a11y/__tests__/src/rules/media-has-caption-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: 6.0 KB
Line 
1/**
2 * @fileoverview <audio> and <video> elements must have a <track> for captions.
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/media-has-caption';
14
15// -----------------------------------------------------------------------------
16// Tests
17// -----------------------------------------------------------------------------
18
19const ruleTester = new RuleTester();
20
21const expectedError = {
22 message: 'Media elements such as <audio> and <video> must have a <track> for captions.',
23 type: 'JSXOpeningElement',
24};
25
26const customSchema = [
27 {
28 audio: ['Audio'],
29 video: ['Video'],
30 track: ['Track'],
31 },
32];
33
34const componentsSettings = {
35 'jsx-a11y': {
36 polymorphicPropName: 'as',
37 components: {
38 Audio: 'audio',
39 Video: 'video',
40 Track: 'track',
41 },
42 },
43};
44
45ruleTester.run('media-has-caption', rule, {
46 valid: parsers.all([].concat(
47 { code: '<div />;' },
48 { code: '<MyDiv />;' },
49 { code: '<audio><track kind="captions" /></audio>' },
50 { code: '<audio><track kind="Captions" /></audio>' },
51 {
52 code: '<audio><track kind="Captions" /><track kind="subtitles" /></audio>',
53 },
54 { code: '<video><track kind="captions" /></video>' },
55 { code: '<video><track kind="Captions" /></video>' },
56 {
57 code: '<video><track kind="Captions" /><track kind="subtitles" /></video>',
58 },
59 {
60 code: '<audio muted={true}></audio>',
61 },
62 {
63 code: '<video muted={true}></video>',
64 },
65 {
66 code: '<video muted></video>',
67 },
68 {
69 code: '<Audio><track kind="captions" /></Audio>',
70 options: customSchema,
71 },
72 {
73 code: '<audio><Track kind="captions" /></audio>',
74 options: customSchema,
75 },
76 {
77 code: '<Video><track kind="captions" /></Video>',
78 options: customSchema,
79 },
80 {
81 code: '<video><Track kind="captions" /></video>',
82 options: customSchema,
83 },
84 {
85 code: '<Audio><Track kind="captions" /></Audio>',
86 options: customSchema,
87 },
88 {
89 code: '<Video><Track kind="captions" /></Video>',
90 options: customSchema,
91 },
92 {
93 code: '<Video muted></Video>',
94 options: customSchema,
95 },
96 {
97 code: '<Video muted={true}></Video>',
98 options: customSchema,
99 },
100 {
101 code: '<Audio muted></Audio>',
102 options: customSchema,
103 },
104 {
105 code: '<Audio muted={true}></Audio>',
106 options: customSchema,
107 },
108 {
109 code: '<Audio><track kind="captions" /></Audio>',
110 settings: componentsSettings,
111 },
112 {
113 code: '<audio><Track kind="captions" /></audio>',
114 settings: componentsSettings,
115 },
116 {
117 code: '<Video><track kind="captions" /></Video>',
118 settings: componentsSettings,
119 },
120 {
121 code: '<video><Track kind="captions" /></video>',
122 settings: componentsSettings,
123 },
124 {
125 code: '<Audio><Track kind="captions" /></Audio>',
126 settings: componentsSettings,
127 },
128 {
129 code: '<Video><Track kind="captions" /></Video>',
130 settings: componentsSettings,
131 },
132 {
133 code: '<Video muted></Video>',
134 settings: componentsSettings,
135 },
136 {
137 code: '<Video muted={true}></Video>',
138 settings: componentsSettings,
139 },
140 {
141 code: '<Audio muted></Audio>',
142 settings: componentsSettings,
143 },
144 {
145 code: '<Audio muted={true}></Audio>',
146 settings: componentsSettings,
147 },
148 {
149 code: '<Box as="audio" muted={true}></Box>',
150 settings: componentsSettings,
151 },
152 )).map(parserOptionsMapper),
153 invalid: parsers.all([].concat(
154 { code: '<audio><track /></audio>', errors: [expectedError] },
155 {
156 code: '<audio><track kind="subtitles" /></audio>',
157 errors: [expectedError],
158 },
159 { code: '<audio />', errors: [expectedError] },
160 { code: '<video><track /></video>', errors: [expectedError] },
161 {
162 code: '<video><track kind="subtitles" /></video>',
163 errors: [expectedError],
164 },
165 {
166 code: '<Audio muted={false}></Audio>',
167 options: customSchema,
168 errors: [expectedError],
169 },
170 {
171 code: '<Video muted={false}></Video>',
172 options: customSchema,
173 errors: [expectedError],
174 },
175 {
176 code: '<Audio muted={false}></Audio>',
177 settings: componentsSettings,
178 errors: [expectedError],
179 },
180 {
181 code: '<Video muted={false}></Video>',
182 settings: componentsSettings,
183 errors: [expectedError],
184 },
185 { code: '<video />', errors: [expectedError] },
186 { code: '<audio>Foo</audio>', errors: [expectedError] },
187 { code: '<video>Foo</video>', errors: [expectedError] },
188 { code: '<Audio />', options: customSchema, errors: [expectedError] },
189 { code: '<Video />', options: customSchema, errors: [expectedError] },
190 { code: '<Audio />', settings: componentsSettings, errors: [expectedError] },
191 { code: '<Video />', settings: componentsSettings, errors: [expectedError] },
192 { code: '<audio><Track /></audio>', options: customSchema, errors: [expectedError] },
193 { code: '<video><Track /></video>', options: customSchema, errors: [expectedError] },
194 {
195 code: '<Audio><Track kind="subtitles" /></Audio>',
196 options: customSchema,
197 errors: [expectedError],
198 },
199 {
200 code: '<Video><Track kind="subtitles" /></Video>',
201 options: customSchema,
202 errors: [expectedError],
203 },
204 {
205 code: '<Audio><Track kind="subtitles" /></Audio>',
206 settings: componentsSettings,
207 errors: [expectedError],
208 },
209 {
210 code: '<Video><Track kind="subtitles" /></Video>',
211 settings: componentsSettings,
212 errors: [expectedError],
213 },
214 {
215 code: '<Box as="audio"><Track kind="subtitles" /></Box>',
216 settings: componentsSettings,
217 errors: [expectedError],
218 },
219 )).map(parserOptionsMapper),
220});
Note: See TracBrowser for help on using the repository browser.