@schukai/monster
Version:
Monster is a simple library for creating fast, robust and lightweight websites.
110 lines (83 loc) • 3.56 kB
JavaScript
;
import {expect} from "chai";
import {FocusManager} from "../../../source/dom/focusmanager.mjs";
import {cleanupDOMFromTesting, initMutationObserverForTesting} from "../../util/cleanupdom.mjs";
import {initJSDOM} from "../../util/jsdom.mjs";
describe('FocusManager', function () {
before(function (done) {
initJSDOM().then(() => {
done()
});
});
beforeEach(() => {
initMutationObserverForTesting()
})
afterEach(() => {
cleanupDOMFromTesting();
document.getElementById('mocks').innerHTML = ''
})
describe('new', function () {
it('should instance of FocusManager', function () {
expect(new FocusManager()).is.instanceof(FocusManager);
})
})
describe('store and restore', function () {
let manager;
beforeEach(() => {
manager = new FocusManager();
document.getElementById('mocks').innerHTML = `
<input class="testit" id="tx1">
<input class="testit" id="tx2">
<input class="testit" id="tx3" disabled>
<input class="testit" id="tx4">
<p class="testit" tabindex="2" id="tx5">hello</p>
<input class="testit" id="tx6" aria-hidden="true">
<button class="testit" id="tx7"></button>
`;
for (const [, element] of Object.entries(document.querySelectorAll('.testit'))) {
element.getBoundingClientRect = () => ({
width: 200,
height: 200,
top: 0,
left: 0,
right: 200,
bottom: 200,
});
}
})
it('run ist', function () {
manager.focus(document.getElementById('tx1'));
manager.storeFocus();
const e1 = manager.getActive();
expect(e1.getAttribute('id'), 'error1').to.be.equal('tx1');
manager.focus(document.getElementById('tx2'));
manager.storeFocus();
expect(manager.getActive().getAttribute('id'), 'error2').to.be.equal('tx2');
manager.focusNext();
expect(manager.getActive().getAttribute('id'), 'error3').to.be.equal('tx4');
manager.focusNext();
expect(manager.getActive().getAttribute('id'), 'error4').to.be.equal('tx5');
manager.restoreFocus();
expect(manager.getActive().getAttribute('id'), 'error5').to.be.equal('tx2');
manager.restoreFocus();
expect(manager.getActive().getAttribute('id'), 'error6').to.be.equal('tx1');
manager.restoreFocus();
expect(manager.getActive().getAttribute('id'), 'error7').to.be.equal('tx1');
})
})
describe('returntype', function () {
let focusmanager;
beforeEach(() => {
focusmanager = new FocusManager();
})
it('check returns', function () {
expect(focusmanager.getFocusable()).is.instanceof(Array);
expect(focusmanager.getActive()).is.instanceof(HTMLElement);
expect(focusmanager.focusNext()).is.instanceof(FocusManager);
expect(focusmanager.focusPrev()).is.instanceof(FocusManager);
expect(focusmanager.storeFocus()).is.instanceof(FocusManager);
expect(focusmanager.focus(document.body)).is.instanceof(FocusManager);
expect(focusmanager.restoreFocus()).is.instanceof(FocusManager);
})
})
});