axe-core
Version:
Accessibility engine for automated Web UI testing
746 lines (707 loc) • 13.8 kB
JavaScript
describe('axe.utils.publishMetaData', function () {
'use strict';
afterEach(function () {
axe._audit = null;
});
it('should be a function', function () {
assert.isFunction(axe.utils.publishMetaData);
});
it('should pull data from rules from axe._audit.data', function () {
var expected = {
foo: 'bar',
bob: 'loblaw'
};
axe._load({
rules: [],
data: {
rules: {
cats: expected
}
}
});
var result = {
id: 'cats',
nodes: []
};
axe.utils.publishMetaData(result);
assert.equal(result.foo, expected.foo);
assert.equal(result.bob, expected.bob);
});
it('should pull data from checks from axe._audit.data', function () {
var expected = {
foo: 'bar',
bob: 'loblaw'
};
axe._load({
rules: [],
data: {
checks: {
cats: expected
}
}
});
var result = {
id: 'foo',
nodes: [{
any: [{
id: 'cats'
}],
all: [],
none: []
}]
};
axe.utils.publishMetaData(result);
assert.equal(result.nodes[0].any[0].foo, expected.foo);
assert.equal(result.nodes[0].any[0].bar, expected.bar);
});
it('should execute messages', function () {
axe._load({
rules: [],
data: {
rules: {
cats: {
help: function () {
return 'cats-rule';
}
}
},
checks: {
'cats-NONE': {
messages: {
fail: function () {
return 'fail-NONE';
},
pass: function () {
return 'pass-NONE';
}
}
},
'cats-ANY': {
messages: {
fail: function () {
return 'fail-ANY';
},
pass: function () {
return 'pass-ANY';
}
}
},
'cats-ALL': {
messages: {
fail: function () {
return 'fail-ALL';
},
pass: function () {
return 'pass-ALL';
}
}
}
}
}
});
var result = {
id: 'cats',
nodes: [{
any: [{
result: false,
id: 'cats-ANY'
}],
none: [{
result: true,
id: 'cats-NONE'
}],
all: [{
result: false,
id: 'cats-ALL'
}]
}, {
any: [{
result: true,
id: 'cats-ANY'
}],
none: [{
result: false,
id: 'cats-NONE'
}],
all: [{
result: true,
id: 'cats-ALL'
}]
}]
};
axe.utils.publishMetaData(result);
assert.deepEqual(result, {
id: 'cats',
help: 'cats-rule',
tags: [],
nodes: [{
any: [{
result: false,
id: 'cats-ANY',
message: 'fail-ANY'
}],
none: [{
result: true,
id: 'cats-NONE',
message: 'fail-NONE'
}],
all: [{
result: false,
id: 'cats-ALL',
message: 'fail-ALL'
}]
}, {
any: [{
result: true,
id: 'cats-ANY',
message: 'pass-ANY'
}],
none: [{
result: false,
id: 'cats-NONE',
message: 'pass-NONE'
}],
all: [{
result: true,
id: 'cats-ALL',
message: 'pass-ALL'
}]
}]
});
});
it('should return default incomplete message with no reason specified by the check', function () {
axe._load({
rules: [],
data: {
rules: {
cats: {
help: function () {
return 'cats-rule';
}
}
},
checks: {
'cats-NONE': {
messages: {
fail: function () {
return 'fail-NONE';
},
pass: function () {
return 'pass-NONE';
},
incomplete: {
'incomplete-NONE-reason1': 'We couldn\'t tell because of some reason',
'incomplete-NONE-reason2': 'Some other reason',
'default': 'Fallback message for no reason'
}
}
},
'cats-ANY': {
messages: {
fail: function () {
return 'fail-ANY';
},
pass: function () {
return 'pass-ANY';
},
incomplete: {
'incomplete-ANY-reason1': 'We couldn\'t tell because of some reason',
'incomplete-ANY-reason2': 'Some other reason',
'default': 'Fallback message for no reason'
}
}
},
'cats-ALL': {
messages: {
fail: function () {
return 'fail-ALL';
},
pass: function () {
return 'pass-ALL';
},
incomplete: {
'incomplete-ALL-reason1': 'We couldn\'t tell because of some reason',
'incomplete-ALL-reason2': 'Some other reason',
'default': 'Fallback message for no reason'
}
}
}
}
}
});
var result = {
id: 'cats',
nodes: [{
any: [{
result: undefined,
id: 'cats-ANY',
data: {}
}],
none: [{
result: undefined,
id: 'cats-NONE',
data: {}
}],
all: [{
result: undefined,
id: 'cats-ALL',
data: {}
}]
}]
};
axe.utils.publishMetaData(result);
assert.deepEqual(result, {
id: 'cats',
help: 'cats-rule',
tags: [],
nodes: [{
any: [{
result: undefined,
id: 'cats-ANY',
message: 'Fallback message for no reason',
data: {}
}],
none: [{
result: undefined,
id: 'cats-NONE',
message: 'Fallback message for no reason',
data: {}
}],
all: [{
result: undefined,
id: 'cats-ALL',
message: 'Fallback message for no reason',
data: {}
}]
}]
});
});
it('should fall back to a generic message if incomplete object fails', function () {
axe._load({
rules: [],
data: {
incompleteFallbackMessage: function() {
return 'Dogs are the best';
},
rules: {
cats: {
help: function () {
return 'cats-rule';
}
}
},
checks: {
'cats-NONE': {
messages: {
fail: function () {
return 'fail-NONE';
},
pass: function () {
return 'pass-NONE';
},
incomplete: {}
}
},
'cats-ANY': {
messages: {
fail: function () {
return 'fail-ANY';
},
pass: function () {
return 'pass-ANY';
},
incomplete: {}
}
},
'cats-ALL': {
messages: {
fail: function () {
return 'fail-ALL';
},
pass: function () {
return 'pass-ALL';
},
incomplete: {}
}
}
}
}
});
var result = {
id: 'cats',
nodes: [{
any: [{
result: undefined,
id: 'cats-ANY',
data: {}
}],
none: [{
result: undefined,
id: 'cats-NONE',
data: {}
}],
all: [{
result: undefined,
id: 'cats-ALL',
data: {}
}]
}]
};
axe.utils.publishMetaData(result);
assert.deepEqual(result, {
id: 'cats',
help: 'cats-rule',
tags: [],
nodes: [{
any: [{
result: undefined,
id: 'cats-ANY',
message: 'Dogs are the best',
data: {}
}],
none: [{
result: undefined,
id: 'cats-NONE',
message: 'Dogs are the best',
data: {}
}],
all: [{
result: undefined,
id: 'cats-ALL',
message: 'Dogs are the best',
data: {}
}]
}]
});
});
it('should handle incomplete reasons', function () {
axe._load({
rules: [],
data: {
rules: {
cats: {
help: function () {
return 'cats-rule';
}
}
},
checks: {
'cats-NONE': {
messages: {
fail: function () {
return 'fail-NONE';
},
pass: function () {
return 'pass-NONE';
},
incomplete: {
'incomplete-NONE-reason1': 'We couldn\'t tell because of some reason',
'incomplete-NONE-reason2': 'Some other reason',
'default': 'Fallback message for no reason'
}
}
},
'cats-ANY': {
messages: {
fail: function () {
return 'fail-ANY';
},
pass: function () {
return 'pass-ANY';
},
incomplete: {
'incomplete-ANY-reason1': 'We couldn\'t tell because of some reason',
'incomplete-ANY-reason2': 'Some other reason',
'default': 'Fallback message for no reason'
}
}
},
'cats-ALL': {
messages: {
fail: function () {
return 'fail-ALL';
},
pass: function () {
return 'pass-ALL';
},
incomplete: {
'incomplete-ALL-reason1': 'We couldn\'t tell because of some reason',
'incomplete-ALL-reason2': 'Some other reason',
'default': 'Fallback message for no reason'
}
}
}
}
}
});
var result = {
id: 'cats',
nodes: [{
any: [{
result: undefined,
id: 'cats-ANY',
data: {
missingData: 'incomplete-ANY-reason1'
}
}],
none: [{
result: undefined,
id: 'cats-NONE',
data: {
missingData: 'incomplete-NONE-reason1'
}
}],
all: [{
result: undefined,
id: 'cats-ALL',
data: {
missingData: 'incomplete-ALL-reason1'
}
}]
}]
};
axe.utils.publishMetaData(result);
assert.deepEqual(result, {
id: 'cats',
help: 'cats-rule',
tags: [],
nodes: [{
any: [{
result: undefined,
id: 'cats-ANY',
message: 'We couldn\'t tell because of some reason',
data: {
missingData: 'incomplete-ANY-reason1'
}
}],
none: [{
result: undefined,
id: 'cats-NONE',
message: 'We couldn\'t tell because of some reason',
data: {
missingData: 'incomplete-NONE-reason1'
}
}],
all: [{
result: undefined,
id: 'cats-ALL',
message: 'We couldn\'t tell because of some reason',
data: {
missingData: 'incomplete-ALL-reason1'
}
}]
}]
});
});
it('should handle incomplete reasons with backwards compatibility', function () {
axe._load({
rules: [],
data: {
rules: {
cats: {
help: function () {
return 'cats-rule';
}
}
},
checks: {
'cats-NONE': {
messages: {
fail: function () {
return 'fail-NONE';
},
pass: function () {
return 'pass-NONE';
},
incomplete: {
'incomplete-NONE-reason1': 'We couldn\'t tell because of reason #1',
'incomplete-NONE-reason2': 'Some other reason',
'default': 'Fallback message for no reason'
}
}
},
'cats-ANY': {
messages: {
fail: function () {
return 'fail-ANY';
},
pass: function () {
return 'pass-ANY';
},
incomplete: {
'incomplete-ANY-reason1': 'We couldn\'t tell because of reason #1',
'incomplete-ANY-reason2': 'Some other reason',
'default': 'Fallback message for no reason'
}
}
},
'cats-ALL': {
messages: {
fail: function () {
return 'fail-ALL';
},
pass: function () {
return 'pass-ALL';
},
incomplete: {
'incomplete-ALL-reason1': 'We couldn\'t tell because of reason #1',
'incomplete-ALL-reason2': 'Some other reason',
'default': 'Fallback message for no reason'
}
}
}
}
}
});
var result = {
id: 'cats',
nodes: [{
any: [{
result: undefined,
id: 'cats-ANY',
data: {
missingData: [{
reason: 'incomplete-ANY-reason1'
}]
}
}],
none: [{
result: undefined,
id: 'cats-NONE',
data: {
missingData: [{
reason: 'incomplete-NONE-reason1'
}]
}
}],
all: [{
result: undefined,
id: 'cats-ALL',
data: {
missingData: [{
reason: 'incomplete-ALL-reason1'
}]
}
}]
}]
};
axe.utils.publishMetaData(result);
assert.deepEqual(result, {
id: 'cats',
help: 'cats-rule',
tags: [],
nodes: [{
any: [{
result: undefined,
id: 'cats-ANY',
message: 'We couldn\'t tell because of reason #1',
data: {
missingData: [{
reason: 'incomplete-ANY-reason1'
}]
}
}],
none: [{
result: undefined,
id: 'cats-NONE',
message: 'We couldn\'t tell because of reason #1',
data: {
missingData: [{
reason: 'incomplete-NONE-reason1'
}]
}
}],
all: [{
result: undefined,
id: 'cats-ALL',
message: 'We couldn\'t tell because of reason #1',
data: {
missingData: [{
reason: 'incomplete-ALL-reason1'
}]
}
}]
}]
});
});
it('should not modify base configuration', function () {
axe._load({
rules: [],
data: {
rules: {
cats: {
help: function () {
return 'cats-rule';
}
}
},
checks: {
'cats-PASS': {
failureMessage: function () {
return 'cats-check';
}
},
'cats-ANY': {
failureMessage: function () {
return 'cats-check2';
}
},
'cats-ALL': {
failureMessage: function () {
return 'cats-check2';
}
}
}
}
});
axe.utils.publishMetaData({
id: 'cats',
nodes: [{
any: [{
result: false,
id: 'cats-PASS'
}],
none: [{
result: true,
id: 'cats-FAIL'
}],
all: [{
result: false,
id: 'cats-ALL'
}]
}]
});
assert.isNotNull(axe._audit.data.checks['cats-PASS'].failureMessage);
assert.isNotNull(axe._audit.data.checks['cats-ANY'].failureMessage);
assert.isNotNull(axe._audit.data.checks['cats-ALL'].failureMessage);
});
it('should pull tags off rule object', function () {
var expected = {
foo: 'bar',
bob: 'loblaw'
};
axe._load({
rules: [{
id: 'foo',
tags: ['hai']
}],
data: {
checks: {
cats: expected
}
}
});
var result = {
id: 'foo',
nodes: [{
any: [{
id: 'cats'
}],
all: [],
none: []
}]
};
axe.utils.publishMetaData(result);
assert.deepEqual(result.tags, ['hai']);
});
});