/
identical-links-same-purpose.js
118 lines (108 loc) · 2.99 KB
/
identical-links-same-purpose.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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
describe('identical-links-same-purpose tests', function() {
'use strict';
var fixture = document.getElementById('fixture');
var queryFixture = axe.testUtils.queryFixture;
var check = checks['identical-links-same-purpose'];
var checkContext = axe.testUtils.MockCheckContext();
var options = {};
afterEach(function() {
fixture.innerHTML = '';
checkContext.reset();
});
it('returns undefined when element does not have a resource (empty href)', function() {
var vNode = queryFixture('<a id="target" href="">Go to google.com</a>');
var actual = check.evaluate.call(
checkContext,
vNode.actualNode,
options,
vNode
);
assert.isUndefined(actual);
assert.isNull(checkContext._data);
});
it('returns undefined when element does not have a resource (onclick does not change location)', function() {
var vNode = queryFixture(
'<span id="target" role="link" tabindex="0" onclick="return false;">Link text</span>'
);
var actual = check.evaluate.call(
checkContext,
vNode.actualNode,
options,
vNode
);
assert.isUndefined(actual);
assert.isNull(checkContext._data);
});
it('returns true when element has location resource', function() {
var vNode = queryFixture(
'<a id="target" href="http://facebook.com">Follow us</a>'
);
var actual = check.evaluate.call(
checkContext,
vNode.actualNode,
options,
vNode
);
assert.isTrue(actual);
assert.hasAllKeys(checkContext._data, ['accessibleText', 'linkResource']);
});
it('returns true when element has location resource', function() {
var vNode = queryFixture(
'<span id="target" role="link" tabindex="0" onclick="location=\'/pages/index.html\'">Link text</span>'
);
var actual = check.evaluate.call(
checkContext,
vNode.actualNode,
options,
vNode
);
assert.isTrue(actual);
assert.hasAllKeys(checkContext._data, ['accessibleText', 'linkResource']);
});
describe('after', function() {
it('sets results of check result to `undefined` if links do not serve identical purpose', function() {
var checkResults = [
{
data: {
accessibleText: 'follow us',
linkResource: 'http://facebook.com'
},
result: true
},
{
data: {
accessibleText: 'follow us',
linkResource: 'http://instagram.com'
},
result: true
}
];
var results = check.after(checkResults);
assert.lengthOf(results, 2);
assert.isUndefined(results[0].result);
assert.isUndefined(results[1].result);
});
it('sets results of check result to `true` if links serve identical purpose', function() {
var checkResults = [
{
data: {
accessibleText: 'follow us',
linkResource: 'http://instagram.com/axe'
},
result: true
},
{
data: {
accessibleText: 'follow us',
linkResource: 'http://instagram.com/axe'
},
result: true
}
];
var results = check.after(checkResults);
assert.lengthOf(results, 2);
assert.isTrue(results[0].result);
assert.isTrue(results[1].result);
});
});
});