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); });