test: define tutorial focus trap for #57
This commit is contained in:
63
tests/tutorial-focus-trap.test.cjs
Normal file
63
tests/tutorial-focus-trap.test.cjs
Normal file
@@ -0,0 +1,63 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user