31 lines
1.2 KiB
JavaScript
31 lines
1.2 KiB
JavaScript
const assert = require('node:assert/strict');
|
|
const fs = require('node:fs');
|
|
const path = require('node:path');
|
|
const vm = require('node:vm');
|
|
|
|
const template = fs.readFileSync(path.join(__dirname, '../app/home/view/public/site_nav.html'), 'utf8');
|
|
const script = template.match(/<script id="ac-mobile-menu-dismiss">([\s\S]*?)<\/script>/);
|
|
assert.ok(script, 'Shared navigation must include the menu dismiss handler');
|
|
|
|
const summary = {};
|
|
const link = {};
|
|
const outside = {};
|
|
const menu = { open: true, contains: target => target === summary || target === link };
|
|
let click;
|
|
vm.runInNewContext(script[1], {
|
|
document: {
|
|
querySelector: () => menu,
|
|
addEventListener: (type, handler) => { if (type === 'click') click = handler; },
|
|
},
|
|
});
|
|
|
|
click({ target: summary });
|
|
assert.equal(menu.open, true, 'Summary clicks must keep native toggling intact');
|
|
click({ target: link });
|
|
assert.equal(menu.open, true, 'Menu links must keep their normal click behavior');
|
|
click({ target: outside });
|
|
assert.equal(menu.open, false, 'Outside clicks must close the open menu');
|
|
click({ target: outside });
|
|
assert.equal(menu.open, false, 'Outside clicks must not reopen a closed menu');
|
|
console.log('PASS: mobile menu outside-click dismissal');
|