testilo 10.0.3 → 10.2.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testilo",
3
- "version": "10.0.3",
3
+ "version": "10.2.0",
4
4
  "description": "Client that scores and digests Testaro reports",
5
5
  "main": "aim.js",
6
6
  "scripts": {
@@ -0,0 +1,54 @@
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="report of accessibility testing of a web page">
10
+ <meta name="keywords" content="accessibility a11y web testing">
11
+ <title>Accessibility digest</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 digest</h1>
19
+ <table class="allBorder">
20
+ <caption>Synopsis</caption>
21
+ <tr><th>Page</th><td>__org__</td></tr>
22
+ <tr><th>URL</th><td>__url__</td></tr>
23
+ <tr><th>Requester</th><td>__requester__</td></tr>
24
+ <tr><th>Test date</th><td>__dateSlash__</td></tr>
25
+ <tr><th>Score</th><td>__totalScore__</td></tr>
26
+ <tr><th>Tested by</th><td>Testaro, procedure <code>__ts__</code></td></tr>
27
+ <tr><th>Scored by</th><td>Testilo, procedure <code>__sp__</code></td></tr>
28
+ <tr><th>Digested by</th><td>Testilo, procedure <code>__dp__</code></td></tr>
29
+ </table>
30
+ </header>
31
+ <h2>Introduction</h2>
32
+ <p>This is a digest of results from a battery of accessibility Tests.</p>
33
+ <p>The battery includes 1353 automated accessibility tests drawn from ten different packages: Alfa, Axe, Continuum, Equal Access, HTML CodeSniffer, Nu Html Checker, QualWeb, Tenon, Testaro, and WAVE.</p>
34
+ <p>These tests were run on the web page named above and gave the page a score of __totalScore__, where 0 would be <q>perfect</q>.</p>
35
+ <h2>Score summary</h2>
36
+ <table class="allBorder secondCellRight">
37
+ <caption>Score components</caption>
38
+ <tbody class="headersLeft">
39
+ __scoreRows__
40
+ </tbody>
41
+ </table>
42
+ <h2>Issue summary</h2>
43
+ <h3>Special issues</h3>
44
+ __specialSummary__
45
+ <h3>Classified issues</h3>
46
+ __issueSummary__
47
+ <h2>Complete report</h2>
48
+ <pre>__report__</pre>
49
+ <footer>
50
+ <p class="date">Produced <time itemprop="datePublished" datetime="__dateISO__">__dateSlash__</time></p>
51
+ </footer>
52
+ </main>
53
+ </body>
54
+ </html>
@@ -0,0 +1,120 @@
1
+ /*
2
+ index: digester for scoring procedure tsp24.
3
+ Creator of parameters for substitution into index.html.
4
+ */
5
+
6
+ // CONSTANTS
7
+
8
+ // Newlines with indentations.
9
+ const joiner = '\n ';
10
+ const innerJoiner = '\n ';
11
+ const specialMessages = {
12
+ log: 'This is based on the amount of browser error logging and miscellaneous logging during the tests.',
13
+ preventions: 'This is based on tests that the page did not allow to be run. That impedes accessibility progress and risks interfering with tools that users with disabilities need.',
14
+ solos: 'This is based on issues reported by unclassified tests. Details are in the report.'
15
+ };
16
+
17
+ // FUNCTIONS
18
+
19
+ // Makes strings HTML-safe.
20
+ const htmlEscape = textOrNumber => textOrNumber
21
+ .toString()
22
+ .replace(/&/g, '&amp;')
23
+ .replace(/</g, '&lt;');
24
+ // Gets a row of the score-summary table.
25
+ const getScoreRow = (component, score) => `<tr><th>${component}</th><td>${score}</td></tr>`;
26
+ // Gets the start of a paragraph about a special score.
27
+ const getSpecialPStart = (summary, scoreID) =>
28
+ `<p><span class="componentID">${scoreID}</span>: Score ${summary[scoreID]}.`;
29
+ // Adds parameters to a query for a digest.
30
+ exports.makeQuery = (report, query) => {
31
+ // Add an HTML-safe copy of the report to the query to be appended to the digest.
32
+ const {acts, sources, jobData, score} = report;
33
+ const {target, requester} = sources;
34
+ const reportJSON = JSON.stringify(report, null, 2);
35
+ const reportJSONSafe = htmlEscape(reportJSON);
36
+ query.report = reportJSONSafe;
37
+ query.ts = 'ts24';
38
+ query.sp = 'tsp24';
39
+ query.dp = 'tdp24';
40
+ // Add the job data to the query.
41
+ query.dateISO = jobData.endTime.slice(0, 10);
42
+ query.dateSlash = query.dateISO.replace(/-/g, '/');
43
+ query.org = target.what;
44
+ query.url = acts && acts.length > 1 && acts[1].which;
45
+ query.requester = requester;
46
+ const {issueDetails, summary} = score;
47
+ const {total, issues} = summary;
48
+ if (typeof total === 'number') {
49
+ query.totalScore = total;
50
+ }
51
+ else {
52
+ console.log('ERROR: missing or invalid total score');
53
+ return;
54
+ }
55
+ // Add the total and any special rows of the score-summary table to the query.
56
+ const scoreRows = [];
57
+ const specialComponentIDs = ['log', 'preventions', 'solos'];
58
+ ['total'].concat(specialComponentIDs).forEach(item => {
59
+ if (summary[item]) {
60
+ scoreRows.push(getScoreRow(item, summary[item]));
61
+ }
62
+ });
63
+ // Add the group rows of the score-summary table to the query.
64
+ issues.forEach(issue => {
65
+ scoreRows.push(getScoreRow(`${issue.issueName}`, issue.score));
66
+ });
67
+ query.scoreRows = scoreRows.join(innerJoiner);
68
+ // If the score has any special components:
69
+ const scoredSpecialIDs = specialComponentIDs.filter(item => summary[item]);
70
+ if (scoredSpecialIDs.length) {
71
+ // Add paragraphs about them for the issue summary to the query.
72
+ const specialPs = [];
73
+ scoredSpecialIDs.forEach(id => {
74
+ specialPs.push(`${getSpecialPStart(summary, id)} ${specialMessages[id]}`);
75
+ });
76
+ query.specialSummary = specialPs.join(joiner);
77
+ }
78
+ // Otherwise, i.e. if the score has no special components:
79
+ else {
80
+ // Add a paragraph stating this for the issue summary to the query.
81
+ query.specialSummary = '<p>No special issues contributed to the score.</p>'
82
+ }
83
+ // If the score has any classified issues as components:
84
+ if (issues.length) {
85
+ // Add paragraphs about them for the group summary to the query.
86
+ const issueSummaryItems = [];
87
+ issues.forEach(issue => {
88
+ const {issueName, score} = issue;
89
+ const issueHeading = `<h4>Issue ${issueName}</h4>`;
90
+ const wcagP = `<p>WCAG: ${issueDetails.issues[issueName].wcag || 'N/A'}</p>`;
91
+ const scoreP = `<p>Score: ${score}</p>`;
92
+ const issueIntroP = '<p>Issue reports in this category:</p>';
93
+ const issueListItems = [];
94
+ const issueData = issueDetails.issues[issueName];
95
+ const toolIDs = Object.keys(issueData.tools);
96
+ toolIDs.forEach(toolID => {
97
+ const testIDs = Object.keys(issueData.tools[toolID]);
98
+ testIDs.forEach(testID => {
99
+ const testData = issueData.tools[toolID][testID];
100
+ const {score, what} = testData;
101
+ const listItem =
102
+ `<li>Package <code>${toolID}</code>, test <code>${testID}</code>, score ${score} (${what})</li>`;
103
+ issueListItems.push(listItem);
104
+ });
105
+ });
106
+ const issueList = [
107
+ '<ul>',
108
+ issueListItems.join('\n '),
109
+ '</ul>'
110
+ ].join(joiner);
111
+ issueSummaryItems.push(issueHeading, wcagP, scoreP, issueIntroP, issueList);
112
+ });
113
+ query.issueSummary = issueSummaryItems.join(joiner);
114
+ }
115
+ // Otherwise, i.e. if the score has no classified issues as components:
116
+ else {
117
+ // Add a paragraph stating this for the issue summary to the query.
118
+ query.issueSummary = '<p>No classified issues contributed to the score.</p>'
119
+ }
120
+ };
@@ -4623,7 +4623,7 @@ exports.issues = {
4623
4623
  'label-title-only': {
4624
4624
  variable: false,
4625
4625
  quality: 1,
4626
- what: 'Form element has no visible label'
4626
+ what: 'Form control element has no visible label'
4627
4627
  }
4628
4628
  }
4629
4629
  }