-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathreport-csv.js
47 lines (37 loc) · 1.34 KB
/
report-csv.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
'use strict'
const report = (module.exports = {})
// Supported Versions
report.supports = '^5.0.0 || ^5.0.0-alpha || ^5.0.0-beta'
// Output formatted results
report.results = testResults => {
let output = ['"url","type","code","message","recommendation","context","selector","resources"']
testResults.results.forEach(result => {
output = output.concat(result.issues.map(issue => report.row(result.pageUrl, issue)))
})
return output.join('\n')
}
// Internal method used to report an individual CSV row
report.row = (url, issue) => {
let resources = []
issue.resources.forEach(resource => {
resources.push(`${resource.type} ${resource.label}: ${resource.url}`)
})
const message = issue.message ? issue.message.replace(/"/g, '”') : 'N/A'
const selector = issue.selector ? issue.selector.replace(/"/g, '”') : 'N/A'
const context = issue.context ? issue.context.replace(/"/g, '”') : 'N/A'
const recommendation = issue.recommendation ? issue.recommendation.replace(/"/g, '”') : 'N/A'
return [
JSON.stringify(url),
JSON.stringify(issue.type),
JSON.stringify(issue.code),
JSON.stringify(message),
JSON.stringify(recommendation),
JSON.stringify(context),
JSON.stringify(selector),
'"' + resources.join('\r\n') + '"'
].join(',')
}
// Output error messages
report.error = message => {
return message
}