testilo 3.8.5 → 3.8.6

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/procs/score/sp14a.js +285 -33
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testilo",
3
- "version": "3.8.5",
3
+ "version": "3.8.6",
4
4
  "description": "Client that scores and digests Testaro reports",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -101,6 +101,17 @@ const groups = {
101
101
  }
102
102
  }
103
103
  },
104
+ componentNoText: {
105
+ weight: 4,
106
+ packages: {
107
+ ibm: {
108
+ Rpt_Aria_WidgetLabels_Implicit: {
109
+ quality: 1,
110
+ what: 'Interactive component has no programmatically associated name'
111
+ }
112
+ }
113
+ }
114
+ },
104
115
  regionNoText: {
105
116
  weight: 4,
106
117
  packages: {
@@ -115,6 +126,12 @@ const groups = {
115
126
  quality: 1,
116
127
  what: 'Element with a region role has no mechanism that allows an accessible name to be calculated'
117
128
  }
129
+ },
130
+ ibm: {
131
+ Rpt_Aria_RegionLabel_Implicit: {
132
+ quality: 1,
133
+ what: 'Element with a region role has no label that describes its purpose'
134
+ }
118
135
  }
119
136
  }
120
137
  },
@@ -225,7 +242,7 @@ const groups = {
225
242
  }
226
243
  },
227
244
  ibm: {
228
- 'v:WCAG20_Input_ExplicitLabelImage': {
245
+ WCAG20_Input_ExplicitLabelImage: {
229
246
  quality: 1,
230
247
  what: 'Input element of type image has no text alternative'
231
248
  }
@@ -274,7 +291,7 @@ const groups = {
274
291
  }
275
292
  },
276
293
  ibm: {
277
- 'v:WCAG20_Img_HasAlt': {
294
+ WCAG20_Img_HasAlt: {
278
295
  quality: 1,
279
296
  what: 'Image has no alt attribute conveying its meaning, or alt="" if decorative'
280
297
  }
@@ -441,7 +458,7 @@ const groups = {
441
458
  }
442
459
  },
443
460
  ibm: {
444
- 'v:WCAG20_Elem_Lang_Valid': {
461
+ WCAG20_Elem_Lang_Valid: {
445
462
  quality: 1,
446
463
  what: 'lang attribute does not include a valid primary language'
447
464
  }
@@ -527,7 +544,7 @@ const groups = {
527
544
  }
528
545
  },
529
546
  ibm: {
530
- 'v:WCAG20_Object_HasText': {
547
+ WCAG20_Object_HasText: {
531
548
  quality: 1,
532
549
  what: 'Object element has no text alternative'
533
550
  }
@@ -578,11 +595,11 @@ const groups = {
578
595
  }
579
596
  },
580
597
  ibm: {
581
- 'v:HAAC_Img_UsemapAlt': {
598
+ HAAC_Img_UsemapAlt: {
582
599
  quality: 1,
583
600
  what: 'Image map or child area has no text alternative'
584
601
  },
585
- 'v:WCAG20_Area_HasAlt': {
602
+ 'WCAG20_Area_HasAlt': {
586
603
  quality: 1,
587
604
  what: 'Area element in an image map has no text alternative'
588
605
  }
@@ -686,6 +703,12 @@ const groups = {
686
703
  quality: 1,
687
704
  what: 'aria-activedescendant attribute is set to an invalid or duplicate id'
688
705
  }
706
+ },
707
+ ibm: {
708
+ HAAC_ActiveDescendantCheck: {
709
+ quality: 1,
710
+ what: 'aria-activedescendant property does not reference the id of a non-empty, non-hidden active child element'
711
+ }
689
712
  }
690
713
  }
691
714
  },
@@ -711,6 +734,17 @@ const groups = {
711
734
  }
712
735
  }
713
736
  },
737
+ labelFollows: {
738
+ weight: 1,
739
+ packages: {
740
+ ibm: {
741
+ WCAG20_Input_LabelBefore: {
742
+ quality: 1,
743
+ what: 'Text input or select element label follows the input control'
744
+ }
745
+ }
746
+ }
747
+ },
714
748
  labelBadID: {
715
749
  weight: 4,
716
750
  packages: {
@@ -734,6 +768,12 @@ const groups = {
734
768
  what: 'aria-labelledby attribute references a nonexistent element'
735
769
  }
736
770
  },
771
+ ibm: {
772
+ WCAG20_Label_RefValid: {
773
+ quality: 1,
774
+ what: 'for attribute does not reference a non-empty, unique id attribute of an input element'
775
+ }
776
+ },
737
777
  wave: {
738
778
  'a:label_orphaned': {
739
779
  quality: 1,
@@ -742,6 +782,17 @@ const groups = {
742
782
  }
743
783
  }
744
784
  },
785
+ haspopupBad: {
786
+ weight: 4,
787
+ packages: {
788
+ ibm: {
789
+ combobox_haspopup: {
790
+ quality: 1,
791
+ what: 'aria-haspopup value is invalid for the role of the controlled or owned element'
792
+ }
793
+ }
794
+ }
795
+ },
745
796
  ownerConflict: {
746
797
  weight: 4,
747
798
  packages: {
@@ -797,7 +848,7 @@ const groups = {
797
848
  }
798
849
  },
799
850
  ibm: {
800
- 'v:WCAG20_A_HasText': {
851
+ WCAG20_A_HasText: {
801
852
  quality: 1,
802
853
  what: 'Hyperlink has no text description'
803
854
  }
@@ -1072,6 +1123,12 @@ const groups = {
1072
1123
  quality: 1,
1073
1124
  what: 'ARIA role is not contained by a required parent'
1074
1125
  }
1126
+ },
1127
+ ibm: {
1128
+ Rpt_Aria_RequiredParent_Native_Host_Sematics: {
1129
+ quality: 1,
1130
+ what: 'Element is not contained within a role-valid element'
1131
+ }
1075
1132
  }
1076
1133
  }
1077
1134
  },
@@ -1306,7 +1363,7 @@ const groups = {
1306
1363
  }
1307
1364
  },
1308
1365
  ibm: {
1309
- 'v:WCAG20_Frame_HasTitle': {
1366
+ WCAG20_Frame_HasTitle: {
1310
1367
  quality: 1,
1311
1368
  what: 'Inline frame has an empty or nonunique title attribute'
1312
1369
  }
@@ -1359,9 +1416,33 @@ const groups = {
1359
1416
  }
1360
1417
  },
1361
1418
  ibm: {
1362
- 'v:aria_semantics_role': {
1419
+ aria_role_redundant: {
1420
+ quality: 1,
1421
+ what: 'Explicitly assigned ARIA role is redundant with the implicit role of the element'
1422
+ },
1423
+ aria_semantics_role: {
1363
1424
  quality: 1,
1364
1425
  what: 'ARIA role is not valid for the element to which it is assigned'
1426
+ },
1427
+ element_tabbable_role_valid: {
1428
+ quality: 1,
1429
+ what: 'Tabbable element has a non-widget role'
1430
+ },
1431
+ Rpt_Aria_ContentinfoWithNoMain_Implicit: {
1432
+ quality: 1,
1433
+ what: 'Element has a contentinfo role when no element has a main role'
1434
+ },
1435
+ Rpt_Aria_ValidRole: {
1436
+ quality: 1,
1437
+ what: 'Element has an invalid role'
1438
+ },
1439
+ Rpt_Aria_EventHandlerMissingRole_Native_Host_Sematics: {
1440
+ quality: 1,
1441
+ what: 'Element has an event handler but no valid ARIA role'
1442
+ },
1443
+ table_aria_descendants: {
1444
+ quality: 1,
1445
+ what: 'Table structure element specifies an explicit role within the table container'
1365
1446
  }
1366
1447
  },
1367
1448
  testaro: {
@@ -1382,7 +1463,7 @@ const groups = {
1382
1463
  }
1383
1464
  },
1384
1465
  ibm: {
1385
- 'v:Rpt_Aria_RequiredProperties': {
1466
+ Rpt_Aria_RequiredProperties: {
1386
1467
  quality: 1,
1387
1468
  what: 'ARIA role on an element does not have a required attribute'
1388
1469
  }
@@ -1494,18 +1575,33 @@ const groups = {
1494
1575
  }
1495
1576
  },
1496
1577
  ibm: {
1497
- 'v:Rpt_Aria_ValidProperty': {
1578
+ aria_semantics_attribute: {
1579
+ quality: 1,
1580
+ what: 'ARIA attributes is invalid for the element or ARIA role to which it is assigned'
1581
+ },
1582
+ Rpt_Aria_ValidProperty: {
1498
1583
  quality: 1,
1499
1584
  what: 'ARIA attribute is invalid for the role'
1500
1585
  }
1501
1586
  }
1502
1587
  }
1503
1588
  },
1589
+ ariaRedundant: {
1590
+ weight: 1,
1591
+ packages: {
1592
+ ibm: {
1593
+ aria_attribute_redundant: {
1594
+ quality: 1,
1595
+ what: 'ARIA attribute is used when there is a corresponding HTML attribute'
1596
+ }
1597
+ }
1598
+ }
1599
+ },
1504
1600
  ariaReferenceBad: {
1505
1601
  weight: 4,
1506
1602
  packages: {
1507
1603
  ibm: {
1508
- 'v:Rpt_Aria_ValidIdRef': {
1604
+ Rpt_Aria_ValidIdRef: {
1509
1605
  quality: 1,
1510
1606
  what: 'ARIA property does not reference the non-empty unique id of a visible element'
1511
1607
  }
@@ -1551,7 +1647,7 @@ const groups = {
1551
1647
  }
1552
1648
  },
1553
1649
  ibm: {
1554
- 'v:WCAG21_Input_Autocomplete': {
1650
+ WCAG21_Input_Autocomplete: {
1555
1651
  quality: 1,
1556
1652
  what: 'Autocomplete attribute token is not appropriate for the input form field'
1557
1653
  }
@@ -1595,7 +1691,7 @@ const groups = {
1595
1691
  }
1596
1692
  },
1597
1693
  ibm: {
1598
- 'v:IBMA_Color_Contrast_WCAG2AA': {
1694
+ IBMA_Color_Contrast_WCAG2AA: {
1599
1695
  quality: 1,
1600
1696
  what: 'Contrast ratio of text with background does not meet WCAG 2.1 AA'
1601
1697
  }
@@ -1698,7 +1794,7 @@ const groups = {
1698
1794
  }
1699
1795
  },
1700
1796
  ibm: {
1701
- 'v:RPT_Header_HasContent': {
1797
+ RPT_Header_HasContent: {
1702
1798
  quality: 1,
1703
1799
  what: 'Heading element provides no descriptive text'
1704
1800
  }
@@ -1732,7 +1828,7 @@ const groups = {
1732
1828
  }
1733
1829
  },
1734
1830
  ibm: {
1735
- 'v:WCAG20_Img_LinkTextNotRedundant': {
1831
+ WCAG20_Img_LinkTextNotRedundant: {
1736
1832
  quality: 1,
1737
1833
  what: 'Text alternative for the image in a link repeats text of the same or an adjacent link'
1738
1834
  }
@@ -1827,6 +1923,12 @@ const groups = {
1827
1923
  what: 'Document head element contains no non-empty title element'
1828
1924
  }
1829
1925
  },
1926
+ ibm: {
1927
+ WCAG20_Doc_HasTitle: {
1928
+ quality: 1,
1929
+ what: 'Page has no subject-identifying title'
1930
+ }
1931
+ },
1830
1932
  wave: {
1831
1933
  'e:title_invalid': {
1832
1934
  quality: 1,
@@ -2152,7 +2254,7 @@ const groups = {
2152
2254
  }
2153
2255
  },
2154
2256
  ibm: {
2155
- 'v:WCAG20_Elem_UniqueAccessKey': {
2257
+ WCAG20_Elem_UniqueAccessKey: {
2156
2258
  quality: 1,
2157
2259
  what: 'Accesskey attribute value on an element is not unique for the page'
2158
2260
  }
@@ -2175,7 +2277,7 @@ const groups = {
2175
2277
  weight: 2,
2176
2278
  packages: {
2177
2279
  ibm: {
2178
- 'v:WCAG20_Input_RadioChkInFieldSet': {
2280
+ WCAG20_Input_RadioChkInFieldSet: {
2179
2281
  quality: 1,
2180
2282
  what: 'Input is in a different group than another with the name'
2181
2283
  }
@@ -2214,6 +2316,12 @@ const groups = {
2214
2316
  what: 'Fieldset has no legend element'
2215
2317
  }
2216
2318
  },
2319
+ ibm: {
2320
+ WCAG20_Fieldset_HasLegend: {
2321
+ quality: 1,
2322
+ what: 'fieldset element has no single, non-empty legend as a label'
2323
+ }
2324
+ },
2217
2325
  wave: {
2218
2326
  'a:legend_missing': {
2219
2327
  quality: 1,
@@ -2297,6 +2405,12 @@ const groups = {
2297
2405
  quality: 1,
2298
2406
  what: 'table element contains no th element or element with a rowheader or columnheader role'
2299
2407
  }
2408
+ },
2409
+ ibm: {
2410
+ RPT_Table_DataHeadingsAria: {
2411
+ quality: 1,
2412
+ what: 'Data table does not identify headers'
2413
+ }
2300
2414
  }
2301
2415
  }
2302
2416
  },
@@ -2356,7 +2470,7 @@ const groups = {
2356
2470
  }
2357
2471
  }
2358
2472
  },
2359
- controlLabel: {
2473
+ controlNoText: {
2360
2474
  weight: 4,
2361
2475
  packages: {
2362
2476
  axe: {
@@ -2371,6 +2485,12 @@ const groups = {
2371
2485
  what: 'Form control has no label'
2372
2486
  }
2373
2487
  },
2488
+ ibm: {
2489
+ WCAG20_Input_ExplicitLabel: {
2490
+ quality: 1,
2491
+ what: 'Form control has no associated label'
2492
+ }
2493
+ },
2374
2494
  wave: {
2375
2495
  'e:label_missing': {
2376
2496
  quality: 1,
@@ -2421,6 +2541,12 @@ const groups = {
2421
2541
  quality: 1,
2422
2542
  what: 'Visible label is not in the accessible name'
2423
2543
  }
2544
+ },
2545
+ ibm: {
2546
+ WCAG21_Label_Accessible: {
2547
+ quality: 1,
2548
+ what: 'Accessible name does not match or contain the visible label text'
2549
+ }
2424
2550
  }
2425
2551
  }
2426
2552
  },
@@ -2470,11 +2596,17 @@ const groups = {
2470
2596
  }
2471
2597
  },
2472
2598
  tabFocusability: {
2473
- weight: 3,
2599
+ weight: 4,
2474
2600
  packages: {
2601
+ ibm: {
2602
+ Rpt_Aria_MissingFocusableChild: {
2603
+ quality: 1,
2604
+ what: 'UI component has no focusable child element for keyboard access'
2605
+ }
2606
+ },
2475
2607
  testaro: {
2476
2608
  focAll: {
2477
- quality: 1,
2609
+ quality: 0.5,
2478
2610
  what: 'Discrepancy between elements that should be and that are Tab-focusable'
2479
2611
  }
2480
2612
  }
@@ -2556,6 +2688,12 @@ const groups = {
2556
2688
  quality: 1,
2557
2689
  what: 'Some page content is not contained by landmarks'
2558
2690
  }
2691
+ },
2692
+ ibm: {
2693
+ Rpt_Aria_OrphanedContent_Native_Host_Sematics: {
2694
+ quality: 1,
2695
+ what: 'Content does not reside within an element with a landmark role'
2696
+ }
2559
2697
  }
2560
2698
  }
2561
2699
  },
@@ -2592,6 +2730,21 @@ const groups = {
2592
2730
  }
2593
2731
  }
2594
2732
  },
2733
+ mainConfusion: {
2734
+ weight: 3,
2735
+ packages: {
2736
+ ibm: {
2737
+ Rpt_Aria_MultipleMainsRequireLabel_Implicit_2: {
2738
+ quality: 1,
2739
+ what: 'Element with main role has no unique label among the main-role elements'
2740
+ },
2741
+ Rpt_Aria_MultipleMainsVisibleLabel_Implicit: {
2742
+ quality: 1,
2743
+ what: 'Element with main role has no unique visible label among the main-role elements'
2744
+ }
2745
+ }
2746
+ }
2747
+ },
2595
2748
  mainNot1: {
2596
2749
  weight: 2,
2597
2750
  packages: {
@@ -2619,7 +2772,13 @@ const groups = {
2619
2772
  axe: {
2620
2773
  'landmark-no-duplicate-banner': {
2621
2774
  quality: 1,
2622
- what: 'page has more than 1 banner landmark'
2775
+ what: 'Page has more than 1 banner landmark'
2776
+ }
2777
+ },
2778
+ ibm: {
2779
+ Rpt_Aria_OneBannerInSiblingSet_Implicit: {
2780
+ quality: 1,
2781
+ what: 'Multiple elements with a banner role are on the page'
2623
2782
  }
2624
2783
  }
2625
2784
  }
@@ -2635,6 +2794,17 @@ const groups = {
2635
2794
  }
2636
2795
  }
2637
2796
  },
2797
+ footerConfusion: {
2798
+ weight: 3,
2799
+ packages: {
2800
+ ibm: {
2801
+ Rpt_Aria_MultipleContentinfoLandmarks_Implicit: {
2802
+ quality: 1,
2803
+ what: 'Element with a contentinfo role has no unique purpose label among the contentinfo-role elements'
2804
+ }
2805
+ }
2806
+ }
2807
+ },
2638
2808
  footerMultiple: {
2639
2809
  weight: 2,
2640
2810
  packages: {
@@ -2654,6 +2824,12 @@ const groups = {
2654
2824
  quality: 1,
2655
2825
  what: 'Landmark has a role and an accessible name that are identical to another'
2656
2826
  }
2827
+ },
2828
+ ibm: {
2829
+ landmark_name_unique: {
2830
+ quality: 1,
2831
+ what: 'Landmark has no unique aria-labelledby or aria-label among landmarks in the same parent region'
2832
+ }
2657
2833
  }
2658
2834
  }
2659
2835
  },
@@ -2668,6 +2844,17 @@ const groups = {
2668
2844
  }
2669
2845
  }
2670
2846
  },
2847
+ bannerConfusion: {
2848
+ weight: 3,
2849
+ packages: {
2850
+ ibm: {
2851
+ Rpt_Aria_MultipleBannerLandmarks_Implicit: {
2852
+ quality: 1,
2853
+ what: 'Element with a banner role has no unique purpose label among the banner-role elements'
2854
+ }
2855
+ }
2856
+ }
2857
+ },
2671
2858
  navConfusion: {
2672
2859
  weight: 3,
2673
2860
  packages: {
@@ -2676,6 +2863,34 @@ const groups = {
2676
2863
  quality: 1,
2677
2864
  what: 'nav element has an accessible name that is non-unique among the nav elements'
2678
2865
  }
2866
+ },
2867
+ ibm: {
2868
+ Rpt_Aria_MultipleNavigationLandmarks_Implicit: {
2869
+ quality: 1,
2870
+ what: 'Element with a navigation role has no unique purpose label among the navigation-role elements'
2871
+ }
2872
+ }
2873
+ }
2874
+ },
2875
+ regionConfusion: {
2876
+ weight: 3,
2877
+ packages: {
2878
+ ibm: {
2879
+ Rpt_Aria_MultipleRegionsUniqueLabel_Implicit: {
2880
+ quality: 1,
2881
+ what: 'Element with a region role has no unique label among the region-role elements'
2882
+ }
2883
+ }
2884
+ }
2885
+ },
2886
+ searchConfusion: {
2887
+ weight: 3,
2888
+ packages: {
2889
+ ibm: {
2890
+ Rpt_Aria_MultipleSearchLandmarks: {
2891
+ quality: 1,
2892
+ what: 'Element with a search role has no unique purpose label among the search-role elements'
2893
+ }
2679
2894
  }
2680
2895
  }
2681
2896
  },
@@ -2690,6 +2905,17 @@ const groups = {
2690
2905
  }
2691
2906
  }
2692
2907
  },
2908
+ complementaryNoText: {
2909
+ weight: 1,
2910
+ packages: {
2911
+ ibm: {
2912
+ Rpt_Aria_ComplementaryRequiredLabel_Implicit: {
2913
+ quality: 1,
2914
+ what: 'Element has a complementary role but has no label'
2915
+ }
2916
+ }
2917
+ }
2918
+ },
2693
2919
  navNoText: {
2694
2920
  weight: 3,
2695
2921
  packages: {
@@ -2701,6 +2927,17 @@ const groups = {
2701
2927
  }
2702
2928
  }
2703
2929
  },
2930
+ labelNoText: {
2931
+ weight: 4,
2932
+ packages: {
2933
+ ibm: {
2934
+ Valerie_Label_HasContent: {
2935
+ quality: 1,
2936
+ what: 'label element has no non-empty purpose-descriptive text'
2937
+ }
2938
+ }
2939
+ }
2940
+ },
2704
2941
  focusableOperable: {
2705
2942
  weight: 3,
2706
2943
  packages: {
@@ -2748,6 +2985,12 @@ const groups = {
2748
2985
  what: 'Element with an explicit or implicit nonnegative tabindex attribute is directly aria-hidden'
2749
2986
  }
2750
2987
  },
2988
+ ibm: {
2989
+ aria_hidden_focus_misuse: {
2990
+ quality: 1,
2991
+ what: 'Focusable element is within the subtree of an element with aria-hidden set to true'
2992
+ }
2993
+ },
2751
2994
  tenon: {
2752
2995
  189: {
2753
2996
  quality: 1,
@@ -3152,6 +3395,12 @@ const groups = {
3152
3395
  what: 'Skip-link target is not focusable or does not exist'
3153
3396
  }
3154
3397
  },
3398
+ ibm: {
3399
+ WCAG20_Body_FirstASkips_Native_Host_Sematics: {
3400
+ quality: 0.5,
3401
+ what: 'Page provides no way to skip directly to the main content'
3402
+ }
3403
+ },
3155
3404
  wave: {
3156
3405
  'e:link_skip_broken': {
3157
3406
  quality: 1,
@@ -3193,7 +3442,7 @@ const groups = {
3193
3442
  }
3194
3443
  }
3195
3444
  },
3196
- obsoleteElement: {
3445
+ obsolete: {
3197
3446
  weight: 3,
3198
3447
  packages: {
3199
3448
  alfa: {
@@ -3203,6 +3452,10 @@ const groups = {
3203
3452
  }
3204
3453
  },
3205
3454
  htmlcs: {
3455
+ 'e:AA.1_3_1.H49.AlignAttr': {
3456
+ quality: 1,
3457
+ what: 'align attribute is obsolete'
3458
+ },
3206
3459
  'e:AA.1_3_1.H49.Center': {
3207
3460
  quality: 1,
3208
3461
  what: 'center element is obsolete'
@@ -3211,22 +3464,21 @@ const groups = {
3211
3464
  quality: 1,
3212
3465
  what: 'font element is obsolete'
3213
3466
  }
3214
- }
3215
- }
3216
- },
3217
- obsoleteAttribute: {
3218
- weight: 3,
3219
- packages: {
3220
- htmlcs: {
3221
- 'e:AA.1_3_1.H49.AlignAttr': {
3467
+ },
3468
+ ibm: {
3469
+ combobox_version: {
3470
+ quality: 1,
3471
+ what: 'combobox design pattern is invalid for ARIA 1.2'
3472
+ },
3473
+ element_attribute_deprecated: {
3222
3474
  quality: 1,
3223
- what: 'The align attribute is obsolete'
3475
+ what: 'Element or attribute is obsolete'
3224
3476
  }
3225
3477
  },
3226
3478
  wave: {
3227
3479
  'a:longdesc': {
3228
3480
  quality: 1,
3229
- what: 'The longdesc attribute is obsolete'
3481
+ what: 'longdesc attribute is obsolete'
3230
3482
  }
3231
3483
  }
3232
3484
  }