axe-core
Version:
Accessibility engine for automated Web UI testing
155 lines (123 loc) • 5.48 kB
JavaScript
describe('text.visible', function () {
'use strict';
var fixture = document.getElementById('fixture');
var shadowSupported = axe.testUtils.shadowSupport.v1;
var visibleVirtual = axe.commons.text.visibleVirtual;
afterEach(function () {
document.getElementById('fixture').innerHTML = '';
});
describe('non-screen-reader', function () {
it('should not return elements with visibility: hidden', function () {
fixture.innerHTML = 'Hello<span style="visibility: hidden;">Hi</span>';
var tree = axe.utils.getFlattenedTree(fixture);
assert.equal(visibleVirtual(tree[0]), 'Hello');
});
it('should handle implicitly recursive calls', function () {
fixture.innerHTML = 'Hello<span><span>Hi</span></span>';
var tree = axe.utils.getFlattenedTree(fixture);
assert.equal(visibleVirtual(tree[0]), 'HelloHi');
});
it('should handle explicitly recursive calls', function () {
fixture.innerHTML = 'Hello<span><span>Hi</span></span>';
var tree = axe.utils.getFlattenedTree(fixture);
assert.equal(visibleVirtual(tree[0], null, false), 'HelloHi');
});
it('should handle non-recursive calls', function () {
fixture.innerHTML = 'Hello<span><span>Hi</span></span>';
var tree = axe.utils.getFlattenedTree(fixture);
assert.equal(visibleVirtual(tree[0], null, true), 'Hello');
});
it('should know how visibility works', function () {
fixture.innerHTML = 'Hello <span style="visibility: hidden;">' +
'<span style="visibility: visible;">Hi</span>' +
'</span>';
var tree = axe.utils.getFlattenedTree(fixture);
assert.equal(visibleVirtual(tree[0]), 'Hello Hi');
});
it('should not return elements with display: none', function () {
fixture.innerHTML = 'Hello<span style="display: none;"><span>Hi</span></span>';
var tree = axe.utils.getFlattenedTree(fixture);
assert.equal(visibleVirtual(tree[0]), 'Hello');
});
it('should trim the result', function () {
fixture.innerHTML = ' \u00A0 Hello \r\n Hi \n \n \n ';
var tree = axe.utils.getFlattenedTree(fixture);
assert.equal(visibleVirtual(tree[0]), 'Hello Hi');
});
it('should ignore script and style tags', function () {
fixture.innerHTML = '<script> // hello </script><style> /*hello */</style>' +
'Hello';
var tree = axe.utils.getFlattenedTree(fixture);
assert.equal(visibleVirtual(tree[0]), 'Hello');
});
it('should not take into account position of parents', function () {
fixture.innerHTML = '<div style="position: absolute; top: -9999px;">' +
'<div style="position: absolute; top: 10000px;">Hello</div>' +
'</div>';
var tree = axe.utils.getFlattenedTree(fixture);
assert.equal(visibleVirtual(tree[0]), 'Hello');
});
it('should correctly handle slotted elements', function () {
function createContentSlotted() {
var group = document.createElement('div');
group.innerHTML = '<div id="target">Stuff<slot></slot></div>';
return group;
}
function makeShadowTree(node) {
var root = node.attachShadow({mode: 'open'});
var div = document.createElement('div');
root.appendChild(div);
div.appendChild(createContentSlotted());
}
if (shadowSupported) {
fixture.innerHTML = '<div><a>hello</a></div>';
makeShadowTree(fixture.firstChild);
var tree = axe.utils.getFlattenedTree(fixture.firstChild);
assert.equal(visibleVirtual(tree[0]), 'Stuffhello');
}
});
});
describe('screen reader', function () {
it('should not return elements with visibility: hidden', function () {
fixture.innerHTML = 'Hello<span style="visibility: hidden;">Hi</span>';
var tree = axe.utils.getFlattenedTree(fixture);
assert.equal(visibleVirtual(tree[0], true), 'Hello');
});
it('should know how visibility works', function () {
fixture.innerHTML = 'Hello <span style="visibility: hidden;">' +
'<span style="visibility: visible;">Hi</span>' +
'</span>';
var tree = axe.utils.getFlattenedTree(fixture);
assert.equal(visibleVirtual(tree[0], true), 'Hello Hi');
});
it('should not return elements with display: none', function () {
fixture.innerHTML = 'Hello<span style="display: none;"><span>Hi</span></span>';
var tree = axe.utils.getFlattenedTree(fixture);
assert.equal(visibleVirtual(tree[0], true), 'Hello');
});
it('should trim the result', function () {
fixture.innerHTML = ' \u00A0 Hello \r\n Hi \n \n \n ';
var tree = axe.utils.getFlattenedTree(fixture);
assert.equal(visibleVirtual(tree[0], true), 'Hello Hi');
});
it('should ignore script and style tags', function () {
fixture.innerHTML = '<script> // hello </script><style> /*hello */</style>' +
'Hello';
var tree = axe.utils.getFlattenedTree(fixture);
assert.equal(visibleVirtual(tree[0], true), 'Hello');
});
it('should not consider offscreen text as hidden (position)', function () {
fixture.innerHTML = '<div style="position: absolute; top: -9999px;">' +
'<div>Hello</div>' +
'</div>';
var tree = axe.utils.getFlattenedTree(fixture);
assert.equal(visibleVirtual(tree[0], true), 'Hello');
});
it('should not consider offscreen text as hidden (text-indent)', function () {
fixture.innerHTML = '<div style="text-indent: -9999px;">' +
'Hello</div>';
var tree = axe.utils.getFlattenedTree(fixture);
assert.equal(visibleVirtual(tree[0], true), 'Hello');
});
});
});