axe-core
Version:
Accessibility engine for automated Web UI testing
132 lines (119 loc) • 3.9 kB
JavaScript
describe('axe.utils.aggregateNodeResults', function() {
'use strict';
var FAIL = 'failed';
var PASS = 'passed';
var CANTTELL = 'cantTell';
var INAPPLICABLE = 'inapplicable';
// create an array of check results, padding input with defaults and
// wrapping arrays where required
function createTestResults() {
var args = [].slice.call(arguments);
return args.map(function (node) {
['any','all','none']
.forEach(function (type) {
if (typeof node[type] === 'undefined') {
node[type] = [];
} else if (Array.isArray(node[type])) {
node[type] = node[type].map(function (val) {
if (typeof val !== 'object') {
return { result: val };
} else {
return val;
}
});
} else {
if (typeof node[type] !== 'object') {
node[type] = { result: node[type] };
}
node[type] = [ node[type] ];
}
});
return node;
});
}
beforeEach(function() {
axe._load({});
});
it('should be a function', function() {
assert.isFunction(axe.utils.aggregateNodeResults);
});
it('Should be `inapplicable` when no results are given', function () {
var ruleResult = axe.utils.aggregateNodeResults([]);
assert.equal(ruleResult.result, INAPPLICABLE);
});
it('should assign FAIL to ruleResult over PASS', function() {
var ruleResult = axe.utils.aggregateNodeResults( createTestResults(
{ all: false },
{ all: true },
{ all: true }
));
assert.equal(ruleResult.result, FAIL);
assert.lengthOf(ruleResult.violations, 1);
assert.lengthOf(ruleResult.passes, 2);
});
it('should assign FAIL to ruleResult over CANTTELL', function() {
var ruleResult = axe.utils.aggregateNodeResults( createTestResults(
{ all: false },
{ all: 0 },
{ all: true }
));
assert.equal(ruleResult.result, FAIL);
assert.lengthOf(ruleResult.violations, 1);
assert.lengthOf(ruleResult.incomplete, 1);
assert.lengthOf(ruleResult.passes, 1);
});
it('should assign PASS to ruleResult if there are only passing checks', function() {
var ruleResult = axe.utils.aggregateNodeResults( createTestResults(
{ all: true },
{ all: true },
{ all: true }
));
assert.equal(ruleResult.result, PASS);
assert.lengthOf(ruleResult.passes, 3);
assert.lengthOf(ruleResult.violations, 0);
});
it('should assign FAIL if there are no passing anys checks', function() {
var ruleResult = axe.utils.aggregateNodeResults( createTestResults(
{ any: false },
{ any: false },
{ any: false }
));
assert.equal(ruleResult.result, FAIL);
assert.lengthOf(ruleResult.violations, 3);
assert.lengthOf(ruleResult.passes, 0);
});
it('should assign CANTTELL over PASS', function() {
var ruleResult = axe.utils.aggregateNodeResults( createTestResults(
{ all: true },
{ all: 0 },
{ all: 0 }
));
assert.equal(ruleResult.result, CANTTELL);
assert.lengthOf(ruleResult.incomplete, 2);
assert.lengthOf(ruleResult.passes, 1);
});
it('should provide impact on incomplete', function () {
var ruleResult = axe.utils.aggregateNodeResults( createTestResults({
none: { result: undefined, impact: 'serious' }
}));
assert.equal(ruleResult.impact, 'serious');
});
it('should raise the highest "raisedMetadata" on failing checks', function() {
/*eslint indent:0 */
var ruleResult = axe.utils.aggregateNodeResults( createTestResults({
none: { result: true, impact: 'moderate' },
any: { result: true, impact: 'minor' },
all: [
{ result: true, impact: 'critical' },
{ result: false, impact: 'serious'}
]
},
{ none: { result: undefined, impact: 'critical' }},
{ none: { result: false, impact: 'critical' }}
));
assert.equal(ruleResult.impact, 'serious');
assert.equal(ruleResult.violations[0].impact, 'serious');
assert.equal(ruleResult.incomplete[0].impact, 'critical');
assert.isNull(ruleResult.passes[0].impact);
});
});