define(["require", "exports", "./modalize"], function (require, exports, modalize_1) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function getHiddenElements() {
function walkTree(el) {
if (el.getAttribute('aria-hidden') === 'true') {
hiddenIds.push(el.id);
}
Array.from(el.children).forEach(walkTree);
}
var hiddenIds = [];
walkTree(document.body);
return hiddenIds;
}
describe('modalize', function () {
afterEach(function () {
document.body.innerHTML = '';
});
var modalizeId = 'childToModalize';
it('sets and removes aria-hidden', function () {
document.body.innerHTML = "\n
\n ");
expect(getHiddenElements()).toStrictEqual([]);
// modalize the target element, verify aria-hidden is correct on all elements
var child = document.getElementById(modalizeId);
var unmodalize = (0, modalize_1.modalize)(child);
expect(getHiddenElements()).toStrictEqual(['parentBefore', 'siblingBefore', 'siblingAfter', 'parentAfter']);
// unmodalize, verify aria-hidden is correct on all elements
unmodalize();
expect(getHiddenElements()).toStrictEqual([]);
});
it('does not remove aria-hidden from initially hidden element when unmodalizing', function () {
document.body.innerHTML = "\n \n ");
expect(getHiddenElements()).toStrictEqual(['alreadyHidden']);
var child = document.getElementById(modalizeId);
var unmodalize = (0, modalize_1.modalize)(child);
expect(getHiddenElements()).toStrictEqual(['alreadyHidden', 'siblingAfter']);
unmodalize();
expect(getHiddenElements()).toStrictEqual(['alreadyHidden']);
});
it('handles if there is nothing to hide', function () {
document.body.innerHTML = "\n \n ");
var child = document.getElementById(modalizeId);
var unmodalize = (0, modalize_1.modalize)(child);
expect(getHiddenElements()).toStrictEqual([]);
unmodalize();
expect(getHiddenElements()).toStrictEqual([]);
});
it('restores original aria-hidden state (false or unset)', function () {
document.body.innerHTML = "\n \n \n \n ");
var child = document.getElementById(modalizeId);
var unmodalize = (0, modalize_1.modalize)(child);
expect(getHiddenElements()).toStrictEqual(['siblingBefore', 'siblingAfter']);
unmodalize();
expect(getHiddenElements()).toStrictEqual([]);
expect(document.getElementById('siblingBefore').getAttribute('aria-hidden')).toBe('false');
expect(document.getElementById('siblingAfter').getAttribute('aria-hidden')).toBeNull();
});
it('handles if element is direct child of body', function () {
document.body.innerHTML = "\n \n \n \n ");
var child = document.getElementById(modalizeId);
var unmodalize = (0, modalize_1.modalize)(child);
expect(getHiddenElements()).toStrictEqual(['siblingBefore', 'siblingAfter']);
unmodalize();
expect(getHiddenElements()).toStrictEqual([]);
});
it('handles text nodes', function () {
// The text nodes can't be hidden, but at least shouldn't cause exceptions
document.body.innerHTML = "\n \n some text\n \n some other text\n \n ");
var child = document.getElementById(modalizeId);
var unmodalize = (0, modalize_1.modalize)(child);
expect(getHiddenElements()).toStrictEqual(['siblingBefore', 'siblingAfter']);
unmodalize();
expect(getHiddenElements()).toStrictEqual([]);
});
it('ignores template, script, and style tags', function () {
document.body.innerHTML = "\n \n \n \n \n \n \n ");
var child = document.getElementById(modalizeId);
var unmodalize = (0, modalize_1.modalize)(child);
expect(getHiddenElements()).toStrictEqual(['siblingBefore', 'siblingAfter']);
unmodalize();
expect(getHiddenElements()).toStrictEqual([]);
});
});
});
//# sourceMappingURL=modalize.test.js.map