64 lines
1.7 KiB
JavaScript
64 lines
1.7 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
function createButton(id) {
|
|
return {
|
|
id,
|
|
disabled: false,
|
|
hidden: false,
|
|
offsetParent: {},
|
|
focusCalled: 0,
|
|
focus() { this.focusCalled += 1; },
|
|
};
|
|
}
|
|
|
|
test('tutorial focus trap wraps Tab from last button to first', () => {
|
|
const skip = createButton('tutorial-skip-btn');
|
|
const next = createButton('tutorial-next-btn');
|
|
const overlay = {
|
|
querySelectorAll() {
|
|
return [skip, next];
|
|
},
|
|
};
|
|
global.document = {
|
|
activeElement: next,
|
|
getElementById(id) {
|
|
return id === 'tutorial-overlay' ? overlay : null;
|
|
},
|
|
addEventListener() {},
|
|
};
|
|
|
|
const { trapTutorialFocus } = require('../js/tutorial.js');
|
|
let prevented = false;
|
|
const handled = trapTutorialFocus({ key: 'Tab', shiftKey: false, preventDefault() { prevented = true; } }, global.document);
|
|
|
|
assert.equal(handled, true);
|
|
assert.equal(prevented, true);
|
|
assert.equal(skip.focusCalled, 1);
|
|
});
|
|
|
|
test('tutorial focus trap wraps Shift+Tab from first button to last', () => {
|
|
const skip = createButton('tutorial-skip-btn');
|
|
const next = createButton('tutorial-next-btn');
|
|
const overlay = {
|
|
querySelectorAll() {
|
|
return [skip, next];
|
|
},
|
|
};
|
|
global.document = {
|
|
activeElement: skip,
|
|
getElementById(id) {
|
|
return id === 'tutorial-overlay' ? overlay : null;
|
|
},
|
|
addEventListener() {},
|
|
};
|
|
|
|
const { trapTutorialFocus } = require('../js/tutorial.js');
|
|
let prevented = false;
|
|
const handled = trapTutorialFocus({ key: 'Tab', shiftKey: true, preventDefault() { prevented = true; } }, global.document);
|
|
|
|
assert.equal(handled, true);
|
|
assert.equal(prevented, true);
|
|
assert.equal(next.focusCalled, 1);
|
|
});
|