testilo 3.6.0 → 3.6.1

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testilo",
3
- "version": "3.6.0",
3
+ "version": "3.6.1",
4
4
  "description": "Client that scores and digests Testaro reports",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -29,11 +29,6 @@
29
29
  modified when the test is found to be higher or lower in quality than usual.
30
30
  */
31
31
 
32
- // ########## IMPORTS
33
-
34
- // Module to read and write files.
35
- const fs = require('fs/promises');
36
-
37
32
  // CONSTANTS
38
33
 
39
34
  const scoreProcID = 'sp12a';
@@ -64,12 +59,6 @@ const groups = {
64
59
  duplicateID: {
65
60
  weight: 3,
66
61
  packages: {
67
- htmlcs: {
68
- 'e:AA.4_1_1.F77': {
69
- quality: 1,
70
- what: 'Duplicate id attribute value'
71
- }
72
- },
73
62
  alfa: {
74
63
  r3: {
75
64
  quality: 1,
@@ -82,6 +71,12 @@ const groups = {
82
71
  what: 'ID attribute value must be unique'
83
72
  }
84
73
  },
74
+ htmlcs: {
75
+ 'e:AA.4_1_1.F77': {
76
+ quality: 1,
77
+ what: 'Duplicate id attribute value'
78
+ }
79
+ },
85
80
  ibm: {
86
81
  RPT_Elem_UniqueId: {
87
82
  quality: 1,
@@ -90,15 +85,20 @@ const groups = {
90
85
  }
91
86
  }
92
87
  },
93
- imageInputNoText: {
88
+ textInputNoText: {
94
89
  weight: 4,
95
90
  packages: {
96
91
  htmlcs: {
97
- 'e:H36': {
92
+ 'e:AA.4_1_2.H91.InputText.Name': {
98
93
  quality: 1,
99
- what: 'Image submit button missing an alt attribute'
94
+ what: 'Text input has no accessible name'
100
95
  }
101
- },
96
+ }
97
+ }
98
+ },
99
+ imageInputNoText: {
100
+ weight: 4,
101
+ packages: {
102
102
  alfa: {
103
103
  r28: {
104
104
  quality: 1,
@@ -111,6 +111,12 @@ const groups = {
111
111
  what: 'Image buttons must have alternate text'
112
112
  }
113
113
  },
114
+ htmlcs: {
115
+ 'e:H36': {
116
+ quality: 1,
117
+ what: 'Image submit button has no alt attribute'
118
+ }
119
+ },
114
120
  ibm: {
115
121
  'v:WCAG20_Input_ExplicitLabelImage': {
116
122
  quality: 1,
@@ -196,12 +202,6 @@ const groups = {
196
202
  pageLanguage: {
197
203
  weight: 4,
198
204
  packages: {
199
- htmlcs: {
200
- 'e:H57': {
201
- quality: 1,
202
- what: 'Lang attribute of the document element'
203
- }
204
- },
205
205
  alfa: {
206
206
  r4: {
207
207
  quality: 1,
@@ -214,6 +214,12 @@ const groups = {
214
214
  what: 'html element must have a lang attribute'
215
215
  }
216
216
  },
217
+ htmlcs: {
218
+ 'e:H57': {
219
+ quality: 1,
220
+ what: 'Lang attribute of the document element'
221
+ }
222
+ },
217
223
  ibm: {
218
224
  WCAG20_Html_HasLang: {
219
225
  quality: 1,
@@ -254,12 +260,6 @@ const groups = {
254
260
  languageChange: {
255
261
  weight: 3,
256
262
  packages: {
257
- htmlcs: {
258
- 'e:WCAG2AAA.Principle3.Guideline3_1.3_1_2.H58': {
259
- quality: 1,
260
- what: 'Change in language is not marked'
261
- }
262
- },
263
263
  alfa: {
264
264
  r7: {
265
265
  quality: 1,
@@ -271,24 +271,30 @@ const groups = {
271
271
  quality: 1,
272
272
  what: 'lang attribute must have a valid value'
273
273
  }
274
+ },
275
+ htmlcs: {
276
+ 'e:WCAG2AAA.Principle3.Guideline3_1.3_1_2.H58': {
277
+ quality: 1,
278
+ what: 'Change in language is not marked'
279
+ }
274
280
  }
275
281
  }
276
282
  },
277
283
  objectNoText: {
278
284
  weight: 4,
279
285
  packages: {
280
- htmlcs: {
281
- 'e:ARIA6+H53': {
282
- quality: 1,
283
- what: 'Object elements must contain a text alternative'
284
- }
285
- },
286
286
  axe: {
287
287
  'object-alt': {
288
288
  quality: 1,
289
289
  what: 'Object elements must have alternate text'
290
290
  }
291
291
  },
292
+ htmlcs: {
293
+ 'e:ARIA6+H53': {
294
+ quality: 1,
295
+ what: 'Object elements must contain a text alternative'
296
+ }
297
+ },
292
298
  ibm: {
293
299
  'v:WCAG20_Object_HasText': {
294
300
  quality: 1,
@@ -306,18 +312,18 @@ const groups = {
306
312
  imageMapAreaNoText: {
307
313
  weight: 4,
308
314
  packages: {
309
- htmlcs: {
310
- 'e:H24': {
311
- quality: 1,
312
- what: 'Area element in an image map missing an alt attribute'
313
- }
314
- },
315
315
  axe: {
316
316
  'area-alt': {
317
317
  quality: 1,
318
318
  what: 'Active area elements must have alternate text'
319
319
  }
320
320
  },
321
+ htmlcs: {
322
+ 'e:H24': {
323
+ quality: 1,
324
+ what: 'Area element in an image map missing an alt attribute'
325
+ }
326
+ },
321
327
  ibm: {
322
328
  'v:HAAC_Img_UsemapAlt': {
323
329
  quality: 1,
@@ -353,13 +359,30 @@ const groups = {
353
359
  }
354
360
  }
355
361
  },
362
+ internalLinkBroken: {
363
+ weight: 4,
364
+ packages: {
365
+ htmlcs: {
366
+ 'e:AA.2_4_1.G1,G123,G124.NoSuchID': {
367
+ quality: 1,
368
+ what: 'Internal link references a nonexistent destination'
369
+ }
370
+ },
371
+ wave: {
372
+ 'a:label_orphaned': {
373
+ quality: 1,
374
+ what: 'Orphaned form label'
375
+ }
376
+ }
377
+ }
378
+ },
356
379
  labelForBadID: {
357
380
  weight: 4,
358
381
  packages: {
359
382
  htmlcs: {
360
- 'w:H44': {
383
+ 'w:AA.1_3_1.H44.NonExistentFragment': {
361
384
  quality: 1,
362
- what: 'Label for attribute is bad ID'
385
+ what: 'Label for attribute references a nonexistent element'
363
386
  }
364
387
  },
365
388
  wave: {
@@ -438,6 +461,17 @@ const groups = {
438
461
  }
439
462
  }
440
463
  },
464
+ destinationLink: {
465
+ weight: 2,
466
+ packages: {
467
+ htmlcs: {
468
+ 'w:AA.4_1_2.H91.A.NoHref': {
469
+ quality: 1,
470
+ what: 'Link misused as link destination'
471
+ }
472
+ }
473
+ }
474
+ },
441
475
  textAreaNoText: {
442
476
  weight: 4,
443
477
  packages: {
@@ -601,6 +635,17 @@ const groups = {
601
635
  }
602
636
  }
603
637
  },
638
+ presentationChild: {
639
+ weight: 4,
640
+ packages: {
641
+ htmlcs: {
642
+ 'e:AA.1_3_1.F92,ARIA4': {
643
+ quality: 1,
644
+ what: 'Element has presentation role but semantic child'
645
+ }
646
+ }
647
+ }
648
+ },
604
649
  fontSizeAbsolute: {
605
650
  weight: 2,
606
651
  packages: {
@@ -825,12 +870,6 @@ const groups = {
825
870
  autocompleteBad: {
826
871
  weight: 2,
827
872
  packages: {
828
- htmlcs: {
829
- 'e:AA.1_3_5.H98': {
830
- quality: 1,
831
- what: 'Autocomplete attribute and the input type are mismatched'
832
- }
833
- },
834
873
  alfa: {
835
874
  r10: {
836
875
  quality: 1,
@@ -843,6 +882,12 @@ const groups = {
843
882
  what: 'Autocomplete attribute must be used correctly'
844
883
  }
845
884
  },
885
+ htmlcs: {
886
+ 'e:AA.1_3_5.H98': {
887
+ quality: 1,
888
+ what: 'Autocomplete attribute and the input type are mismatched'
889
+ }
890
+ },
846
891
  ibm: {
847
892
  'v:WCAG21_Input_Autocomplete': {
848
893
  quality: 1,
@@ -854,16 +899,6 @@ const groups = {
854
899
  contrastAA: {
855
900
  weight: 3,
856
901
  packages: {
857
- htmlcs: {
858
- 'e:AA.1_4_3.G145.Fail': {
859
- quality: 1,
860
- what: 'Contrast between the text and its background is less than 3:1.'
861
- },
862
- 'e:AA.1_4_3.G18.Fail': {
863
- quality: 1,
864
- what: 'Contrast between the text and its background is less than 4.5:1'
865
- }
866
- },
867
902
  alfa: {
868
903
  r69: {
869
904
  quality: 1,
@@ -876,6 +911,16 @@ const groups = {
876
911
  what: 'Elements must have sufficient color contrast'
877
912
  }
878
913
  },
914
+ htmlcs: {
915
+ 'e:AA.1_4_3.G145.Fail': {
916
+ quality: 1,
917
+ what: 'Contrast between the text and its background is less than 3:1.'
918
+ },
919
+ 'e:AA.1_4_3.G18.Fail': {
920
+ quality: 1,
921
+ what: 'Contrast between the text and its background is less than 4.5:1'
922
+ }
923
+ },
879
924
  ibm: {
880
925
  'v:IBMA_Color_Contrast_WCAG2AA': {
881
926
  quality: 1,
@@ -893,12 +938,6 @@ const groups = {
893
938
  contrastAAA: {
894
939
  weight: 1,
895
940
  packages: {
896
- htmlcs: {
897
- 'e:WCAG2AAA.Principle1.Guideline1_4.1_4_3.G18': {
898
- quality: 1,
899
- what: 'Insufficient contrast'
900
- }
901
- },
902
941
  alfa: {
903
942
  r66: {
904
943
  quality: 1,
@@ -911,6 +950,12 @@ const groups = {
911
950
  what: 'Elements must have sufficient color contrast (Level AAA)'
912
951
  }
913
952
  },
953
+ htmlcs: {
954
+ 'e:WCAG2AAA.Principle1.Guideline1_4.1_4_3.G18': {
955
+ quality: 1,
956
+ what: 'Insufficient contrast'
957
+ }
958
+ },
914
959
  tenon: {
915
960
  95: {
916
961
  quality: 1,
@@ -1139,7 +1184,18 @@ const groups = {
1139
1184
  }
1140
1185
  }
1141
1186
  },
1142
- pseudoListRisk: {
1187
+ pseudoOrderedListRisk: {
1188
+ weight: 1,
1189
+ packages: {
1190
+ htmlcs: {
1191
+ 'w:AA.1_3_1.H48.2': {
1192
+ quality: 1,
1193
+ what: 'Ordered list may fail to be coded as such'
1194
+ }
1195
+ }
1196
+ }
1197
+ },
1198
+ pseudoNavListRisk: {
1143
1199
  weight: 1,
1144
1200
  packages: {
1145
1201
  htmlcs: {
@@ -1224,6 +1280,39 @@ const groups = {
1224
1280
  }
1225
1281
  }
1226
1282
  },
1283
+ legendMissing: {
1284
+ weight: 2,
1285
+ packages: {
1286
+ htmlcs: {
1287
+ 'e:AA.1_3_1.H71.NoLegend': {
1288
+ quality: 1,
1289
+ what: 'Fieldset has no legend element'
1290
+ }
1291
+ }
1292
+ }
1293
+ },
1294
+ fieldSetName: {
1295
+ weight: 3,
1296
+ packages: {
1297
+ htmlcs: {
1298
+ 'e:AA.4_1_2.H91.Fieldset.Name': {
1299
+ quality: 1,
1300
+ what: 'Fieldset has no accessible name'
1301
+ }
1302
+ }
1303
+ }
1304
+ },
1305
+ tableCaption: {
1306
+ weight: 1,
1307
+ packages: {
1308
+ htmlcs: {
1309
+ 'w:AA.1_3_1.H39.3.NoCaption': {
1310
+ quality: 1,
1311
+ what: 'Table has no caption element'
1312
+ }
1313
+ }
1314
+ }
1315
+ },
1227
1316
  nameValue: {
1228
1317
  weight: 4,
1229
1318
  packages: {
@@ -1605,7 +1694,7 @@ const groups = {
1605
1694
  }
1606
1695
  }
1607
1696
  },
1608
- noScriptRisk: {
1697
+ obsoleteElement: {
1609
1698
  weight: 1,
1610
1699
  packages: {
1611
1700
  htmlcs: {
@@ -1615,6 +1704,17 @@ const groups = {
1615
1704
  }
1616
1705
  }
1617
1706
  }
1707
+ },
1708
+ obsoleteAttribute: {
1709
+ weight: 1,
1710
+ packages: {
1711
+ htmlcs: {
1712
+ 'e:AA.1_3_1.H49.AlignAttr': {
1713
+ quality: 1,
1714
+ what: 'The align attribute is obsolete'
1715
+ }
1716
+ }
1717
+ }
1618
1718
  }
1619
1719
  };
1620
1720
 
@@ -1,47 +0,0 @@
1
- <!DOCTYPE HTML>
2
- <html lang="en-US">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1">
6
- <meta name="author" content="Testilo">
7
- <meta name="creator" content="Testilo">
8
- <meta name="publisher" name="Testilo">
9
- <meta name="description" content="comparison of accessibility scores from tsp10 procedure">
10
- <meta name="keywords" content="accessibility a11y web testing">
11
- <title>Accessibility score comparison</title>
12
- <link rel="icon" href="favicon.png">
13
- <link rel="stylesheet" href="style.css">
14
- </head>
15
- <body>
16
- <main>
17
- <header>
18
- <h1>Accessibility score comparison</h1>
19
- </header>
20
- <h2>Introduction</h2>
21
- <p>The table below compares 2 web pages on <a href="https://www.w3.org/WAI/fundamentals/accessibility-intro/">accessibility</a>. The page names link to the pages on the web. The scores link to digests that explain in detail how the scores were computed.</p>
22
- <p>The pages were:</p>
23
- <div id="summary">
24
- <p>Tested by <a href="https://www.npmjs.com/package/testaro">Testaro</a> with procedure <code>tp10</code></p>
25
- <p>Scored by <a href="https://www.npmjs.com/package/testilo">Testilo</a> with procedure <code>sp10a</code></p>
26
- <p>Digested by Testilo with procedure <code>dp10a</code></p>
27
- <p>Compared by Testilo with procedure <code>cp0</code></p>
28
- </div>
29
- <p>The <code>tp10</code> procedure performs 808 tests on each page. Of these, 16 tests are custom tests defined by Testaro, and the others belong to packages of tests created by others.</p>
30
- <p>Tests and scoring formulae are fallible and subjective. The reported faults merit investigation as potential opportunities for improved accessibility. But some may not actually harm accessibility, and some other accessibility faults may have escaped detection. Different reasonable procedures could yield different test results and different scores. Testaro and Testilo can be customized to fit different definitions and weightings of types of accessibility.</p>
31
- <h2>Comparison</h2>
32
- <table class="allBorder">
33
- <caption>Accessibility scores of web pages</caption>
34
- <thead>
35
- <tr><th scope="col">Page</th><th scope="col" colspan="2">Score (lower is better)</tr>
36
- </thead>
37
- <tbody class="linkSmaller secondCellRight">
38
- <tr><th scope="row"><a href="https://www.railpass.com/">Railpass</a></th><td><a href="digests/35k1r-railpass.html">1589</a></td><td aria-hidden="true"><svg width="100%" height="0.7em"><rect height="100%" width="23.159889228975366%" fill="red"></rect></svg></td></tr>
39
- <tr><th scope="row"><a href="https://www.eurail.com/en">Eurail</a></th><td><a href="digests/3aee6-eurail.html">6861</a></td><td aria-hidden="true"><svg width="100%" height="0.7em"><rect height="100%" width="100%" fill="red"></rect></svg></td></tr>
40
- </tbody>
41
- </table>
42
- <footer>
43
- <p class="date">Produced <time itemprop="datePublished" datetime="2022-06-08">2022/06/08</time></p>
44
- </footer>
45
- </main>
46
- </body>
47
- </html>