@markuplint/ml-spec 3.7.0 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,758 @@
1
+ const specs = require('@markuplint/html-spec');
2
+ const { createSelector } = require('@markuplint/selector');
3
+ const { createJSDOMElement } = require('@markuplint/test-tools');
4
+
5
+ const { getComputedAriaProps } = require('../../lib/dom-traverse/get-computed-aria-props');
6
+
7
+ function _(html, selector) {
8
+ return createJSDOMElement(html, selector, function (selector) {
9
+ // JSDOM supports no level 4 selectors yet.
10
+ return createSelector(selector, specs).match(this) !== false;
11
+ });
12
+ }
13
+
14
+ function c(html, version, selector) {
15
+ return getComputedAriaProps(specs, _(html, selector), version);
16
+ }
17
+
18
+ describe('1.2', () => {
19
+ test('the link role', () => {
20
+ expect(c('<a href></a>', '1.2')).toStrictEqual({
21
+ 'aria-atomic': {
22
+ name: 'aria-atomic',
23
+ value: 'false',
24
+ deprecated: false,
25
+ required: false,
26
+ from: 'default',
27
+ },
28
+ 'aria-busy': {
29
+ name: 'aria-busy',
30
+ value: 'false',
31
+ deprecated: false,
32
+ required: false,
33
+ from: 'default',
34
+ },
35
+ 'aria-controls': {
36
+ name: 'aria-controls',
37
+ value: undefined,
38
+ deprecated: false,
39
+ required: false,
40
+ from: 'default',
41
+ },
42
+ 'aria-current': {
43
+ name: 'aria-current',
44
+ value: 'false',
45
+ deprecated: false,
46
+ required: false,
47
+ from: 'default',
48
+ },
49
+ 'aria-describedby': {
50
+ name: 'aria-describedby',
51
+ value: undefined,
52
+ deprecated: false,
53
+ required: false,
54
+ from: 'default',
55
+ },
56
+ 'aria-details': {
57
+ name: 'aria-details',
58
+ value: undefined,
59
+ deprecated: false,
60
+ required: false,
61
+ from: 'default',
62
+ },
63
+ 'aria-disabled': {
64
+ name: 'aria-disabled',
65
+ value: 'false',
66
+ deprecated: false,
67
+ required: false,
68
+ from: 'default',
69
+ },
70
+ 'aria-dropeffect': {
71
+ name: 'aria-dropeffect',
72
+ value: 'none',
73
+ deprecated: true,
74
+ required: false,
75
+ from: 'default',
76
+ },
77
+ 'aria-errormessage': {
78
+ name: 'aria-errormessage',
79
+ value: undefined,
80
+ deprecated: false,
81
+ required: false,
82
+ from: 'default',
83
+ },
84
+ 'aria-expanded': {
85
+ name: 'aria-expanded',
86
+ value: 'undefined',
87
+ deprecated: false,
88
+ required: false,
89
+ from: 'default',
90
+ },
91
+ 'aria-flowto': {
92
+ name: 'aria-flowto',
93
+ value: undefined,
94
+ deprecated: false,
95
+ required: false,
96
+ from: 'default',
97
+ },
98
+ 'aria-grabbed': {
99
+ name: 'aria-grabbed',
100
+ value: 'undefined',
101
+ deprecated: true,
102
+ required: false,
103
+ from: 'default',
104
+ },
105
+ 'aria-haspopup': {
106
+ name: 'aria-haspopup',
107
+ value: 'false',
108
+ deprecated: false,
109
+ required: false,
110
+ from: 'default',
111
+ },
112
+ 'aria-hidden': {
113
+ name: 'aria-hidden',
114
+ value: 'undefined',
115
+ deprecated: false,
116
+ required: false,
117
+ from: 'default',
118
+ },
119
+ 'aria-invalid': {
120
+ name: 'aria-invalid',
121
+ value: 'false',
122
+ deprecated: false,
123
+ required: false,
124
+ from: 'default',
125
+ },
126
+ 'aria-keyshortcuts': {
127
+ name: 'aria-keyshortcuts',
128
+ value: undefined,
129
+ deprecated: false,
130
+ required: false,
131
+ from: 'default',
132
+ },
133
+ 'aria-label': {
134
+ name: 'aria-label',
135
+ value: undefined,
136
+ deprecated: false,
137
+ required: false,
138
+ from: 'default',
139
+ },
140
+ 'aria-labelledby': {
141
+ name: 'aria-labelledby',
142
+ value: undefined,
143
+ deprecated: false,
144
+ required: false,
145
+ from: 'default',
146
+ },
147
+ 'aria-live': {
148
+ name: 'aria-live',
149
+ value: 'off',
150
+ deprecated: false,
151
+ required: false,
152
+ from: 'default',
153
+ },
154
+ 'aria-owns': {
155
+ name: 'aria-owns',
156
+ value: undefined,
157
+ deprecated: false,
158
+ required: false,
159
+ from: 'default',
160
+ },
161
+ 'aria-relevant': {
162
+ name: 'aria-relevant',
163
+ value: 'additions text',
164
+ deprecated: false,
165
+ required: false,
166
+ from: 'default',
167
+ },
168
+ 'aria-roledescription': {
169
+ name: 'aria-roledescription',
170
+ value: undefined,
171
+ deprecated: false,
172
+ required: false,
173
+ from: 'default',
174
+ },
175
+ });
176
+ });
177
+
178
+ test('the heading role', () => {
179
+ expect(c('<h1></h1>', '1.2')).toStrictEqual({
180
+ 'aria-atomic': {
181
+ name: 'aria-atomic',
182
+ value: 'false',
183
+ deprecated: false,
184
+ required: false,
185
+ from: 'default',
186
+ },
187
+ 'aria-busy': {
188
+ name: 'aria-busy',
189
+ value: 'false',
190
+ deprecated: false,
191
+ required: false,
192
+ from: 'default',
193
+ },
194
+ 'aria-controls': {
195
+ name: 'aria-controls',
196
+ value: undefined,
197
+ deprecated: false,
198
+ required: false,
199
+ from: 'default',
200
+ },
201
+ 'aria-current': {
202
+ name: 'aria-current',
203
+ value: 'false',
204
+ deprecated: false,
205
+ required: false,
206
+ from: 'default',
207
+ },
208
+ 'aria-describedby': {
209
+ name: 'aria-describedby',
210
+ value: undefined,
211
+ deprecated: false,
212
+ required: false,
213
+ from: 'default',
214
+ },
215
+ 'aria-details': {
216
+ name: 'aria-details',
217
+ value: undefined,
218
+ deprecated: false,
219
+ required: false,
220
+ from: 'default',
221
+ },
222
+ 'aria-disabled': {
223
+ name: 'aria-disabled',
224
+ value: 'false',
225
+ deprecated: false,
226
+ required: false,
227
+ from: 'default',
228
+ },
229
+ 'aria-dropeffect': {
230
+ name: 'aria-dropeffect',
231
+ value: 'none',
232
+ deprecated: true,
233
+ required: false,
234
+ from: 'default',
235
+ },
236
+ 'aria-errormessage': {
237
+ name: 'aria-errormessage',
238
+ value: undefined,
239
+ deprecated: false,
240
+ required: false,
241
+ from: 'default',
242
+ },
243
+ 'aria-flowto': {
244
+ name: 'aria-flowto',
245
+ value: undefined,
246
+ deprecated: false,
247
+ required: false,
248
+ from: 'default',
249
+ },
250
+ 'aria-grabbed': {
251
+ name: 'aria-grabbed',
252
+ value: 'undefined',
253
+ deprecated: true,
254
+ required: false,
255
+ from: 'default',
256
+ },
257
+ 'aria-haspopup': {
258
+ name: 'aria-haspopup',
259
+ value: 'false',
260
+ deprecated: false,
261
+ required: false,
262
+ from: 'default',
263
+ },
264
+ 'aria-hidden': {
265
+ name: 'aria-hidden',
266
+ value: 'undefined',
267
+ deprecated: false,
268
+ required: false,
269
+ from: 'default',
270
+ },
271
+ 'aria-invalid': {
272
+ name: 'aria-invalid',
273
+ value: 'false',
274
+ deprecated: false,
275
+ required: false,
276
+ from: 'default',
277
+ },
278
+ 'aria-keyshortcuts': {
279
+ name: 'aria-keyshortcuts',
280
+ value: undefined,
281
+ deprecated: false,
282
+ required: false,
283
+ from: 'default',
284
+ },
285
+ 'aria-label': {
286
+ name: 'aria-label',
287
+ value: undefined,
288
+ deprecated: false,
289
+ required: false,
290
+ from: 'default',
291
+ },
292
+ 'aria-labelledby': {
293
+ name: 'aria-labelledby',
294
+ value: undefined,
295
+ deprecated: false,
296
+ required: false,
297
+ from: 'default',
298
+ },
299
+ 'aria-level': {
300
+ name: 'aria-level',
301
+ value: '1',
302
+ deprecated: false,
303
+ required: true,
304
+ from: 'default',
305
+ },
306
+ 'aria-live': {
307
+ name: 'aria-live',
308
+ value: 'off',
309
+ deprecated: false,
310
+ required: false,
311
+ from: 'default',
312
+ },
313
+ 'aria-owns': {
314
+ name: 'aria-owns',
315
+ value: undefined,
316
+ deprecated: false,
317
+ required: false,
318
+ from: 'default',
319
+ },
320
+ 'aria-relevant': {
321
+ name: 'aria-relevant',
322
+ value: 'additions text',
323
+ deprecated: false,
324
+ required: false,
325
+ from: 'default',
326
+ },
327
+ 'aria-roledescription': {
328
+ name: 'aria-roledescription',
329
+ value: undefined,
330
+ deprecated: false,
331
+ required: false,
332
+ from: 'default',
333
+ },
334
+ });
335
+ });
336
+
337
+ test('from html-attr', () => {
338
+ expect(c('<input type="checkbox" checked>', '1.2')['aria-checked']).toStrictEqual({
339
+ name: 'aria-checked',
340
+ value: 'true',
341
+ deprecated: false,
342
+ required: true,
343
+ from: 'html-attr',
344
+ });
345
+ });
346
+
347
+ test('overwrite aria-attr', () => {
348
+ expect(c('<input type="checkbox" checked aria-checked="false">', '1.2')['aria-checked']).toStrictEqual({
349
+ name: 'aria-checked',
350
+ value: 'false',
351
+ deprecated: false,
352
+ required: true,
353
+ from: 'aria-attr',
354
+ });
355
+ });
356
+
357
+ test('overwrite aria-attr', () => {
358
+ expect(c('<input type="checkbox" checked aria-checked="mixed">', '1.2')['aria-checked']).toStrictEqual({
359
+ name: 'aria-checked',
360
+ value: 'mixed',
361
+ deprecated: false,
362
+ required: true,
363
+ from: 'aria-attr',
364
+ });
365
+ });
366
+ });
367
+
368
+ describe('1.3', () => {
369
+ test('the link role', () => {
370
+ expect(c('<a href></a>', '1.3')).toStrictEqual({
371
+ 'aria-atomic': {
372
+ name: 'aria-atomic',
373
+ value: 'false',
374
+ deprecated: false,
375
+ required: false,
376
+ from: 'default',
377
+ },
378
+ 'aria-braillelabel': {
379
+ name: 'aria-braillelabel',
380
+ value: undefined,
381
+ deprecated: false,
382
+ required: false,
383
+ from: 'default',
384
+ },
385
+ 'aria-brailleroledescription': {
386
+ name: 'aria-brailleroledescription',
387
+ value: undefined,
388
+ deprecated: false,
389
+ required: false,
390
+ from: 'default',
391
+ },
392
+ 'aria-busy': {
393
+ name: 'aria-busy',
394
+ value: 'false',
395
+ deprecated: false,
396
+ required: false,
397
+ from: 'default',
398
+ },
399
+ 'aria-controls': {
400
+ name: 'aria-controls',
401
+ value: undefined,
402
+ deprecated: false,
403
+ required: false,
404
+ from: 'default',
405
+ },
406
+ 'aria-current': {
407
+ name: 'aria-current',
408
+ value: 'false',
409
+ deprecated: false,
410
+ required: false,
411
+ from: 'default',
412
+ },
413
+ 'aria-describedby': {
414
+ name: 'aria-describedby',
415
+ value: undefined,
416
+ deprecated: false,
417
+ required: false,
418
+ from: 'default',
419
+ },
420
+ 'aria-description': {
421
+ name: 'aria-description',
422
+ deprecated: false,
423
+ value: undefined,
424
+ required: false,
425
+ from: 'default',
426
+ },
427
+ 'aria-details': {
428
+ name: 'aria-details',
429
+ value: undefined,
430
+ deprecated: false,
431
+ required: false,
432
+ from: 'default',
433
+ },
434
+ 'aria-disabled': {
435
+ name: 'aria-disabled',
436
+ value: 'false',
437
+ deprecated: false,
438
+ required: false,
439
+ from: 'default',
440
+ },
441
+ 'aria-dropeffect': {
442
+ name: 'aria-dropeffect',
443
+ value: 'none',
444
+ deprecated: true,
445
+ required: false,
446
+ from: 'default',
447
+ },
448
+ 'aria-errormessage': {
449
+ name: 'aria-errormessage',
450
+ value: undefined,
451
+ deprecated: false,
452
+ required: false,
453
+ from: 'default',
454
+ },
455
+ 'aria-expanded': {
456
+ name: 'aria-expanded',
457
+ value: 'undefined',
458
+ deprecated: false,
459
+ required: false,
460
+ from: 'default',
461
+ },
462
+ 'aria-flowto': {
463
+ name: 'aria-flowto',
464
+ value: undefined,
465
+ deprecated: false,
466
+ required: false,
467
+ from: 'default',
468
+ },
469
+ 'aria-grabbed': {
470
+ name: 'aria-grabbed',
471
+ value: 'undefined',
472
+ deprecated: true,
473
+ required: false,
474
+ from: 'default',
475
+ },
476
+ 'aria-haspopup': {
477
+ name: 'aria-haspopup',
478
+ value: 'false',
479
+ deprecated: false,
480
+ required: false,
481
+ from: 'default',
482
+ },
483
+ 'aria-hidden': {
484
+ name: 'aria-hidden',
485
+ value: 'undefined',
486
+ deprecated: false,
487
+ required: false,
488
+ from: 'default',
489
+ },
490
+ 'aria-invalid': {
491
+ name: 'aria-invalid',
492
+ value: 'false',
493
+ deprecated: false,
494
+ required: false,
495
+ from: 'default',
496
+ },
497
+ 'aria-keyshortcuts': {
498
+ name: 'aria-keyshortcuts',
499
+ value: undefined,
500
+ deprecated: false,
501
+ required: false,
502
+ from: 'default',
503
+ },
504
+ 'aria-label': {
505
+ name: 'aria-label',
506
+ value: undefined,
507
+ deprecated: false,
508
+ required: false,
509
+ from: 'default',
510
+ },
511
+ 'aria-labelledby': {
512
+ name: 'aria-labelledby',
513
+ value: undefined,
514
+ deprecated: false,
515
+ required: false,
516
+ from: 'default',
517
+ },
518
+ 'aria-live': {
519
+ name: 'aria-live',
520
+ value: 'off',
521
+ deprecated: false,
522
+ required: false,
523
+ from: 'default',
524
+ },
525
+ 'aria-owns': {
526
+ name: 'aria-owns',
527
+ value: undefined,
528
+ deprecated: false,
529
+ required: false,
530
+ from: 'default',
531
+ },
532
+ 'aria-relevant': {
533
+ name: 'aria-relevant',
534
+ value: 'additions text',
535
+ deprecated: false,
536
+ required: false,
537
+ from: 'default',
538
+ },
539
+ 'aria-roledescription': {
540
+ name: 'aria-roledescription',
541
+ value: undefined,
542
+ deprecated: false,
543
+ required: false,
544
+ from: 'default',
545
+ },
546
+ });
547
+ });
548
+
549
+ test('the heading role', () => {
550
+ expect(c('<h1></h1>', '1.3')).toStrictEqual({
551
+ 'aria-atomic': {
552
+ name: 'aria-atomic',
553
+ value: 'false',
554
+ deprecated: false,
555
+ required: false,
556
+ from: 'default',
557
+ },
558
+ 'aria-braillelabel': {
559
+ name: 'aria-braillelabel',
560
+ value: undefined,
561
+ deprecated: false,
562
+ required: false,
563
+ from: 'default',
564
+ },
565
+ 'aria-brailleroledescription': {
566
+ name: 'aria-brailleroledescription',
567
+ value: undefined,
568
+ deprecated: false,
569
+ required: false,
570
+ from: 'default',
571
+ },
572
+ 'aria-busy': {
573
+ name: 'aria-busy',
574
+ value: 'false',
575
+ deprecated: false,
576
+ required: false,
577
+ from: 'default',
578
+ },
579
+ 'aria-controls': {
580
+ name: 'aria-controls',
581
+ value: undefined,
582
+ deprecated: false,
583
+ required: false,
584
+ from: 'default',
585
+ },
586
+ 'aria-current': {
587
+ name: 'aria-current',
588
+ value: 'false',
589
+ deprecated: false,
590
+ required: false,
591
+ from: 'default',
592
+ },
593
+ 'aria-describedby': {
594
+ name: 'aria-describedby',
595
+ value: undefined,
596
+ deprecated: false,
597
+ required: false,
598
+ from: 'default',
599
+ },
600
+ 'aria-description': {
601
+ name: 'aria-description',
602
+ deprecated: false,
603
+ value: undefined,
604
+ required: false,
605
+ from: 'default',
606
+ },
607
+ 'aria-details': {
608
+ name: 'aria-details',
609
+ value: undefined,
610
+ deprecated: false,
611
+ required: false,
612
+ from: 'default',
613
+ },
614
+ 'aria-disabled': {
615
+ name: 'aria-disabled',
616
+ value: 'false',
617
+ deprecated: false,
618
+ required: false,
619
+ from: 'default',
620
+ },
621
+ 'aria-dropeffect': {
622
+ name: 'aria-dropeffect',
623
+ value: 'none',
624
+ deprecated: true,
625
+ required: false,
626
+ from: 'default',
627
+ },
628
+ 'aria-errormessage': {
629
+ name: 'aria-errormessage',
630
+ value: undefined,
631
+ deprecated: false,
632
+ required: false,
633
+ from: 'default',
634
+ },
635
+ 'aria-flowto': {
636
+ name: 'aria-flowto',
637
+ value: undefined,
638
+ deprecated: false,
639
+ required: false,
640
+ from: 'default',
641
+ },
642
+ 'aria-grabbed': {
643
+ name: 'aria-grabbed',
644
+ value: 'undefined',
645
+ deprecated: true,
646
+ required: false,
647
+ from: 'default',
648
+ },
649
+ 'aria-haspopup': {
650
+ name: 'aria-haspopup',
651
+ value: 'false',
652
+ deprecated: false,
653
+ required: false,
654
+ from: 'default',
655
+ },
656
+ 'aria-hidden': {
657
+ name: 'aria-hidden',
658
+ value: 'undefined',
659
+ deprecated: false,
660
+ required: false,
661
+ from: 'default',
662
+ },
663
+ 'aria-invalid': {
664
+ name: 'aria-invalid',
665
+ value: 'false',
666
+ deprecated: false,
667
+ required: false,
668
+ from: 'default',
669
+ },
670
+ 'aria-keyshortcuts': {
671
+ name: 'aria-keyshortcuts',
672
+ value: undefined,
673
+ deprecated: false,
674
+ required: false,
675
+ from: 'default',
676
+ },
677
+ 'aria-label': {
678
+ name: 'aria-label',
679
+ value: undefined,
680
+ deprecated: false,
681
+ required: false,
682
+ from: 'default',
683
+ },
684
+ 'aria-labelledby': {
685
+ name: 'aria-labelledby',
686
+ value: undefined,
687
+ deprecated: false,
688
+ required: false,
689
+ from: 'default',
690
+ },
691
+ 'aria-level': {
692
+ name: 'aria-level',
693
+ value: '1',
694
+ deprecated: false,
695
+ required: true,
696
+ from: 'default',
697
+ },
698
+ 'aria-live': {
699
+ name: 'aria-live',
700
+ value: 'off',
701
+ deprecated: false,
702
+ required: false,
703
+ from: 'default',
704
+ },
705
+ 'aria-owns': {
706
+ name: 'aria-owns',
707
+ value: undefined,
708
+ deprecated: false,
709
+ required: false,
710
+ from: 'default',
711
+ },
712
+ 'aria-relevant': {
713
+ name: 'aria-relevant',
714
+ value: 'additions text',
715
+ deprecated: false,
716
+ required: false,
717
+ from: 'default',
718
+ },
719
+ 'aria-roledescription': {
720
+ name: 'aria-roledescription',
721
+ value: undefined,
722
+ deprecated: false,
723
+ required: false,
724
+ from: 'default',
725
+ },
726
+ });
727
+ });
728
+
729
+ test('from html-attr', () => {
730
+ expect(c('<input type="checkbox" checked>', '1.3')['aria-checked']).toStrictEqual({
731
+ name: 'aria-checked',
732
+ value: 'true',
733
+ deprecated: false,
734
+ required: true,
735
+ from: 'html-attr',
736
+ });
737
+ });
738
+
739
+ test('overwrite aria-attr', () => {
740
+ expect(c('<input type="checkbox" checked aria-checked="false">', '1.3')['aria-checked']).toStrictEqual({
741
+ name: 'aria-checked',
742
+ value: 'false',
743
+ deprecated: false,
744
+ required: true,
745
+ from: 'aria-attr',
746
+ });
747
+ });
748
+
749
+ test('overwrite aria-attr', () => {
750
+ expect(c('<input type="checkbox" checked aria-checked="mixed">', '1.3')['aria-checked']).toStrictEqual({
751
+ name: 'aria-checked',
752
+ value: 'mixed',
753
+ deprecated: false,
754
+ required: true,
755
+ from: 'aria-attr',
756
+ });
757
+ });
758
+ });