testaro 2.3.2 → 2.3.5

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/commands.js CHANGED
@@ -142,6 +142,12 @@ exports.commands = {
142
142
  ]
143
143
  },
144
144
  tests: {
145
+ aatt: [
146
+ 'Perform an AATT test with HTML CodeSniffer',
147
+ {
148
+ waitLong: [false, 'boolean', '', 'whether to wait 20 instead of 10 seconds for the result']
149
+ }
150
+ ],
145
151
  axe: [
146
152
  'Perform an Axe test',
147
153
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testaro",
3
- "version": "2.3.2",
3
+ "version": "2.3.5",
4
4
  "description": "Automation of accessibility testing",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/tests/aatt.js CHANGED
@@ -7,8 +7,9 @@
7
7
  const {evaluate} = require('aatt');
8
8
 
9
9
  // FUNCTIONS
10
- exports.reporter = async page => {
11
- const timeLimit = 30;
10
+ exports.reporter = async (page, waitLong) => {
11
+ // Set the limit in seconds on the wait for the result.
12
+ const timeLimit = waitLong ? 20 : 10;
12
13
  // Get the HTML of the document body.
13
14
  const source = await page.content();
14
15
  // Return the result of a test with the HTML CodeSniffer WCAG 2.1 AA ruleset as a string.
package/tests/alfa.js CHANGED
@@ -18,90 +18,92 @@ exports.reporter = async page => {
18
18
  const msgText = msg.text();
19
19
  console.log(msgText);
20
20
  });
21
- const response = await rulePage.goto('https://alfa.siteimprove.com/rules', {timeout: 10000})
22
- .catch(error => {
23
- console.log(`ERROR: navigation to URL timed out (${error})`);
24
- return {result: {error: 'ERROR: navigation to URL timed out'}};
25
- });
26
- let ruleData = {};
27
- if (response.status() === 200) {
28
- // Compile data on the rule IDs and summaries.
29
- ruleData = await rulePage.evaluate(() => {
30
- const rulePs = Array.from(document.querySelectorAll('p.h5'));
31
- const ruleData = {};
32
- rulePs.forEach(ruleP => {
33
- const childNodes = Array.from(ruleP.childNodes);
34
- const ruleID = childNodes[0].textContent.slice(4).toLowerCase();
35
- const ruleText = childNodes
36
- .slice(1)
37
- .map(node => node.textContent)
38
- .join(' ')
39
- .trim()
40
- .replace(/"/g, '\'')
41
- .replace(/\s+/g, ' ');
42
- ruleData[ruleID] = ruleText;
21
+ try {
22
+ const response = await rulePage.goto('https://alfa.siteimprove.com/rules', {timeout: 10000});
23
+ let ruleData = {};
24
+ if (response.status() === 200) {
25
+ // Compile data on the rule IDs and summaries.
26
+ ruleData = await rulePage.evaluate(() => {
27
+ const rulePs = Array.from(document.querySelectorAll('p.h5'));
28
+ const ruleData = {};
29
+ rulePs.forEach(ruleP => {
30
+ const childNodes = Array.from(ruleP.childNodes);
31
+ const ruleID = childNodes[0].textContent.slice(4).toLowerCase();
32
+ const ruleText = childNodes
33
+ .slice(1)
34
+ .map(node => node.textContent)
35
+ .join(' ')
36
+ .trim()
37
+ .replace(/"/g, '\'')
38
+ .replace(/\s+/g, ' ');
39
+ ruleData[ruleID] = ruleText;
40
+ });
41
+ return ruleData;
43
42
  });
44
- return ruleData;
45
- });
46
- await rulePage.close();
47
- }
48
- const data = [];
49
- await Scraper.with(async scraper => {
50
- for (const input of await scraper.scrape(page.url())) {
51
- const audit = Audit.of(input, alfaRules.default);
52
- const outcomes = Array.from(await audit.evaluate());
53
- outcomes.forEach((outcome, index) => {
54
- const {target} = outcome;
55
- if (target && ! target._members) {
56
- const outcomeJ = outcome.toJSON();
57
- const verdict = outcomeJ.outcome;
58
- if (verdict !== 'passed') {
59
- const {rule} = outcomeJ;
60
- const {tags, uri, requirements} = rule;
61
- const ruleID = uri.replace(/^.+-/, '');
62
- const ruleSummary = ruleData[ruleID] || '';
63
- const targetJ = outcomeJ.target;
64
- const codeLines = target.toString().split('\n');
65
- if (codeLines[0] === '#document') {
66
- codeLines.splice(2, codeLines.length - 3, '...');
67
- }
68
- else if (codeLines[0].startsWith('<html')) {
69
- codeLines.splice(1, codeLines.length - 2, '...');
70
- }
71
- const outcomeData = {
72
- index,
73
- verdict,
74
- rule: {
75
- ruleID,
76
- ruleSummary,
77
- scope: '',
78
- uri,
79
- requirements
80
- },
81
- target: {
82
- type: targetJ.type,
83
- tagName: targetJ.name || '',
84
- path: target.path(),
85
- codeLines: codeLines.map(line => line.length > 99 ? `${line.slice(0, 99)}...` : line)
43
+ await rulePage.close();
44
+ }
45
+ const data = [];
46
+ await Scraper.with(async scraper => {
47
+ for (const input of await scraper.scrape(page.url())) {
48
+ const audit = Audit.of(input, alfaRules.default);
49
+ const outcomes = Array.from(await audit.evaluate());
50
+ outcomes.forEach((outcome, index) => {
51
+ const {target} = outcome;
52
+ if (target && ! target._members) {
53
+ const outcomeJ = outcome.toJSON();
54
+ const verdict = outcomeJ.outcome;
55
+ if (verdict !== 'passed') {
56
+ const {rule} = outcomeJ;
57
+ const {tags, uri, requirements} = rule;
58
+ const ruleID = uri.replace(/^.+-/, '');
59
+ const ruleSummary = ruleData[ruleID] || '';
60
+ const targetJ = outcomeJ.target;
61
+ const codeLines = target.toString().split('\n');
62
+ if (codeLines[0] === '#document') {
63
+ codeLines.splice(2, codeLines.length - 3, '...');
86
64
  }
87
- };
88
- const etcTags = [];
89
- tags.forEach(tag => {
90
- if (tag.type === 'scope') {
91
- outcomeData.rule.scope = tag.scope;
65
+ else if (codeLines[0].startsWith('<html')) {
66
+ codeLines.splice(1, codeLines.length - 2, '...');
92
67
  }
93
- else {
94
- etcTags.push(tag);
68
+ const outcomeData = {
69
+ index,
70
+ verdict,
71
+ rule: {
72
+ ruleID,
73
+ ruleSummary,
74
+ scope: '',
75
+ uri,
76
+ requirements
77
+ },
78
+ target: {
79
+ type: targetJ.type,
80
+ tagName: targetJ.name || '',
81
+ path: target.path(),
82
+ codeLines: codeLines.map(line => line.length > 99 ? `${line.slice(0, 99)}...` : line)
83
+ }
84
+ };
85
+ const etcTags = [];
86
+ tags.forEach(tag => {
87
+ if (tag.type === 'scope') {
88
+ outcomeData.rule.scope = tag.scope;
89
+ }
90
+ else {
91
+ etcTags.push(tag);
92
+ }
93
+ });
94
+ if (etcTags.length) {
95
+ outcomeData.etcTags = etcTags;
95
96
  }
96
- });
97
- if (etcTags.length) {
98
- outcomeData.etcTags = etcTags;
97
+ data.push(outcomeData);
99
98
  }
100
- data.push(outcomeData);
101
99
  }
102
- }
103
- });
104
- }
105
- });
106
- return {result: data};
100
+ });
101
+ }
102
+ });
103
+ return {result: data};
104
+ }
105
+ catch(error) {
106
+ console.log(`ERROR: navigation to URL timed out (${error})`);
107
+ return {result: {error: 'ERROR: navigation to URL timed out'}};
108
+ }
107
109
  };
package/tests/tabNav.js CHANGED
@@ -231,7 +231,7 @@ exports.reporter = async (page, withItems) => {
231
231
  isCorrect = await testKey(
232
232
  tabs, currentTab, 'End', 'end', tabCount - 1, isCorrect, itemData
233
233
  );
234
- // Update the tablist status (&&= operator from ES 2021 rejected by node 14).
234
+ // Update the tablist status (Node 14 does not support the ES 2021 &&= operator).
235
235
  listIsCorrect = listIsCorrect && isCorrect;
236
236
  // Increment the data.
237
237
  data.totals.tabElements[isCorrect ? 'correct' : 'incorrect']++;