testaro 45.0.4 → 45.0.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.
package/README.md CHANGED
@@ -875,7 +875,7 @@ The rationales motivating the Testaro-defined tests can be found in comments wit
875
875
 
876
876
  ### Abnormal termination
877
877
 
878
- On some occasions a test throws an error that cannot be handled with a `try`-`catch` structure. It has been observed, for example, that the `ibm` test does this when the page content, rather than the page URL, is given to `getCompliance()` and the target is `https://globalsolutions.org` or `https://monsido.com`.
878
+ On some occasions a test throws an error that cannot be handled with a `try`-`catch` structure. It has been observed, for example, that the `ibm` test does this when the page content, rather than the page URL, is given to `getCompliance()` and the target is `https://globalsolutions.org`, `https://monsido.com`, or `https://www.ambetterhealth.com/`.
879
879
 
880
880
  Some tools take apparently infinite time to perform their tests on some pages. To handle such stalling, Testaro subjects most tools to time limits. Further testing will be required before it can be determined whether this time limitation is robust. As currently implemented (without child processes), it may allow tool testing processes to continue and to write indefinitely to the response.
881
881
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testaro",
3
- "version": "45.0.4",
3
+ "version": "45.0.6",
4
4
  "description": "Run 1000 web accessibility tests from 10 tools and get a standardized report",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/procs/identify.js CHANGED
@@ -85,12 +85,17 @@ const addIDs = async (locators, recipient) => {
85
85
  };
86
86
  // Sanitizes a tag name.
87
87
  const tagify = tagName => {
88
- const lcTagName = tagName.toLowerCase();
89
- const safeTagName = lcTagName.replace(/[^a-z0-9]/g, '');
90
- if (safeTagName !== lcTagName) {
91
- console.log(`ERROR: Tag name ${tagName} invalid`);
88
+ if (tagName) {
89
+ const lcTagName = tagName.toLowerCase();
90
+ const safeTagName = lcTagName.replace(/[^a-z0-9]/g, '');
91
+ if (safeTagName !== lcTagName) {
92
+ console.log(`ERROR on page: Tag name ${tagName} invalid; treating it as ${safeTagName}`);
93
+ }
94
+ return safeTagName;
95
+ }
96
+ else {
97
+ return '';
92
98
  }
93
- return safeTagName;
94
99
  };
95
100
  // Returns the XPath and box ID of the element of a standard instance.
96
101
  exports.identify = async (instance, page) => {
package/tests/aslint.js CHANGED
@@ -85,17 +85,6 @@ exports.reporter = async (page, report, actIndex, timeLimit) => {
85
85
  timeout: 1000 * timeLimit
86
86
  };
87
87
  await reportLoc.waitFor(waitOptions);
88
- // const timeResult = await doBy(timeLimit, reportLoc, 'waitFor', [waitArg], 'aslint testing');
89
- // console.log(`timeResult type is ${typeof timeResult}`);
90
- // If the result attachment timed out:
91
- /*
92
- if (timeResult === 'timedOut') {
93
- // Report this.
94
- data.prevented = true;
95
- data.error = 'Attachment of results to page by aslint timed out';
96
- await page.close({runBeforeUnload: true});
97
- }
98
- */
99
88
  }
100
89
  catch(error) {
101
90
  const message = 'Attachment of test results to page failed';
package/tests/wave.js CHANGED
@@ -58,57 +58,66 @@ exports.reporter = async (page, report, actIndex) => {
58
58
  // When they arrive:
59
59
  response.on('end', async () => {
60
60
  // Delete unnecessary properties.
61
- const actResult = JSON.parse(rawReport);
62
- const {categories, statistics} = actResult;
63
- delete categories.feature;
64
- delete categories.structure;
65
- delete categories.aria;
66
- // If rules were specified:
67
- if (rules && rules.length) {
68
- // For each WAVE rule category:
69
- ['error', 'contrast', 'alert'].forEach(category => {
70
- // If any violations were reported:
71
- if (
72
- categories[category]
73
- && categories[category].items
74
- && Object.keys(categories[category].items).length
75
- ) {
76
- // For each rule violated:
77
- Object.keys(categories[category].items).forEach(ruleID => {
78
- // If it was not a specified rule:
79
- if (! rules.includes(ruleID)) {
80
- // Decrease the category violation count by the count of its violations.
81
- categories[category].count -= categories[category].items[ruleID].count;
82
- // Remove its violations from the report.
83
- delete categories[category].items[ruleID];
84
- }
85
- });
86
- }
61
+ try {
62
+ const actResult = JSON.parse(rawReport);
63
+ const {categories, statistics} = actResult;
64
+ delete categories.feature;
65
+ delete categories.structure;
66
+ delete categories.aria;
67
+ // If rules were specified:
68
+ if (rules && rules.length) {
69
+ // For each WAVE rule category:
70
+ ['error', 'contrast', 'alert'].forEach(category => {
71
+ // If any violations were reported:
72
+ if (
73
+ categories[category]
74
+ && categories[category].items
75
+ && Object.keys(categories[category].items).length
76
+ ) {
77
+ // For each rule violated:
78
+ Object.keys(categories[category].items).forEach(ruleID => {
79
+ // If it was not a specified rule:
80
+ if (! rules.includes(ruleID)) {
81
+ // Decrease the category violation count by the count of its violations.
82
+ categories[category].count -= categories[category].items[ruleID].count;
83
+ // Remove its violations from the report.
84
+ delete categories[category].items[ruleID];
85
+ }
86
+ });
87
+ }
88
+ });
89
+ }
90
+ // Add WCAG information from the WAVE documentation.
91
+ const waveDocJSON = await fs.readFile('procs/wavedoc.json');
92
+ const waveDoc = JSON.parse(waveDocJSON);
93
+ Object.keys(categories).forEach(categoryName => {
94
+ const category = categories[categoryName];
95
+ const {items} = category;
96
+ Object.keys(items).forEach(issueName => {
97
+ const issueDoc = waveDoc.find((issue => issue.name === issueName));
98
+ const {guidelines} = issueDoc;
99
+ items[issueName].wcag = guidelines;
100
+ });
87
101
  });
102
+ // Add important data to the result.
103
+ if (statistics) {
104
+ data.pageTitle = statistics.pagetitle || '';
105
+ data.pageURL = statistics.pageurl || '';
106
+ data.time = statistics.time || null;
107
+ data.creditsRemaining = statistics.creditsremaining || null;
108
+ data.allItemCount = statistics.allitemcount || null;
109
+ data.totalElements = statistics.totalelements || null;
110
+ }
111
+ // Return the result.
112
+ resolve(actResult);
88
113
  }
89
- // Add WCAG information from the WAVE documentation.
90
- const waveDocJSON = await fs.readFile('procs/wavedoc.json');
91
- const waveDoc = JSON.parse(waveDocJSON);
92
- Object.keys(categories).forEach(categoryName => {
93
- const category = categories[categoryName];
94
- const {items} = category;
95
- Object.keys(items).forEach(issueName => {
96
- const issueDoc = waveDoc.find((issue => issue.name === issueName));
97
- const {guidelines} = issueDoc;
98
- items[issueName].wcag = guidelines;
99
- });
100
- });
101
- // Add important data to the result.
102
- if (statistics) {
103
- data.pageTitle = statistics.pagetitle || '';
104
- data.pageURL = statistics.pageurl || '';
105
- data.time = statistics.time || null;
106
- data.creditsRemaining = statistics.creditsremaining || null;
107
- data.allItemCount = statistics.allitemcount || null;
108
- data.totalElements = statistics.totalelements || null;
109
- }
110
- // Return the result.
111
- resolve(actResult);
114
+ catch(error) {
115
+ console.log(`ERROR parsing tool report: ${error.message}`);
116
+ console.log(`rawReport: ${rawReport}`);
117
+ data.prevented = true;
118
+ data.error = error.message;
119
+ resolve(result);
120
+ };
112
121
  });
113
122
  }
114
123
  );