@axe-core/reporter-earl
Version:
A EARL+JSON-LD reporter for axe-core
50 lines (45 loc) • 1.63 kB
text/typescript
import { RawResult, Assertion, TestResult, EarlType } from './types';
import testResults from './testResult';
export default function axeResultToEarl(rawResults: RawResult[]): Assertion[] {
return rawResults.reduce(
(asserts: Assertion[], axeResult: RawResult): Assertion[] => {
let results: TestResult[] = [];
results = results.concat(testResults(axeResult, axeResult.violations));
results = results.concat(testResults(axeResult, axeResult.passes));
results = results.concat(testResults(axeResult, axeResult.incomplete));
if (results.length === 0) {
results.push({
'@type': EarlType.TestResult,
outcome: 'earl:inapplicable'
});
}
const newAsserts = results.map((result): Assertion => {
const match = axeResult.helpUrl.match(
/axe\/([1-9][0-9]*\.[1-9][0-9]*)\//
);
const version = (match && match[1]) || '';
return {
'@type': EarlType.Assertion,
mode: 'earl:automatic',
assertedBy: {
'@id': `https://github.com/dequelabs/axe-core/releases/tag/${version}.0`,
'@type': ['earl:Assertor', 'earl:Software', 'doap:Project'],
'doap:name': 'Axe',
'doap:vendor': {
'@id': 'https://deque.com/',
'@type': 'foaf:Organization',
'foaf:name': 'Deque Systems'
}
},
test: {
'@type': EarlType.TestCase,
'@id': axeResult.helpUrl
},
result
};
});
return asserts.concat(newAsserts);
},
[]
);
}