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 +1 -1
- package/procs/score/sp12a.js +165 -65
- package/reports/comparative/railsites.html +0 -47
- package/reports/digested/35k1r-railpass.html +0 -9588
- package/reports/digested/3aee6-eurail.html +0 -36233
- package/reports/digested/dp10a/35k1r-railpass.html +0 -9302
- package/reports/digested/dp10a/3aee6-eurail.html +0 -35782
- package/reports/old/2q4h4-greinerabout.json +0 -10190
- package/reports/old/2q4h4-greinercol.json +0 -4965
- package/reports/old/2q4h4-greinercontact.json +0 -7804
- package/reports/old/2q4h4-greinerhome.json +0 -4277
- package/reports/old/2q4h4-greinermasks.json +0 -18805
- package/reports/old/2q4h4-greinermeasure.json +0 -4408
- package/reports/raw/35k1r-railpass.json +0 -8792
- package/reports/raw/3aee6-eurail.json +0 -35250
- package/reports/scored/35k1r-railpass.json +0 -9366
- package/reports/scored/3aee6-eurail.json +0 -35957
package/package.json
CHANGED
package/procs/score/sp12a.js
CHANGED
|
@@ -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
|
-
|
|
88
|
+
textInputNoText: {
|
|
94
89
|
weight: 4,
|
|
95
90
|
packages: {
|
|
96
91
|
htmlcs: {
|
|
97
|
-
'e:
|
|
92
|
+
'e:AA.4_1_2.H91.InputText.Name': {
|
|
98
93
|
quality: 1,
|
|
99
|
-
what: '
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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>
|