6 lines
1.1 KiB
JavaScript
6 lines
1.1 KiB
JavaScript
|
|
const test=require('node:test');const assert=require('node:assert/strict');const fs=require('node:fs');const vm=require('node:vm');
|
||
|
|
function setup(open=false){let listener,navigated,opened=0;const document={addEventListener:(_,f)=>listener=f,querySelector:()=>null};const window={location:{assign:url=>navigated=url}};if(open)window.openQuickTimeOnly=()=>opened++;vm.runInNewContext(fs.readFileSync('static/js/quick-time-shortcut.js','utf8'),{document,window});return {press(extra={}){let prevented=false;listener({key:'-',target:{closest:()=>null},preventDefault(){prevented=true;},...extra});return {prevented,navigated,opened};}};}
|
||
|
|
test('minus navigates directly to standalone time',()=>assert.equal(setup().press().navigated,'/sag/new?quick_time=1'));
|
||
|
|
test('creation page opens existing form',()=>assert.equal(setup(true).press().opened,1));
|
||
|
|
for(const extra of [{ctrlKey:true},{metaKey:true},{repeat:true},{isComposing:true},{target:{isContentEditable:true}},{target:{closest:()=>({})}}])test('preserve typing and other shortcuts '+JSON.stringify(extra),()=>assert.equal(setup().press(extra).prevented,false));
|