Private
Public Access
32 lines
2.2 KiB
JavaScript
32 lines
2.2 KiB
JavaScript
const assert=require('assert');
|
|
const fs=require('fs');
|
|
const path=require('path');
|
|
const vm=require('vm');
|
|
const handlers={},windowHandlers={};
|
|
const doc={activeElement:null,addEventListener(type,handler){handlers[type]=handler;}};
|
|
const buttons=['start','stop','refresh','autostart','handover'].map(id=>({
|
|
id,disabled:id==='handover',clicks:0,handlers:{},
|
|
addEventListener(type,handler){this.handlers[type]=handler;},
|
|
focus(){doc.activeElement=this;this.handlers.focus();},
|
|
click(){this.clicks++;}
|
|
}));
|
|
const context={};vm.createContext(context);
|
|
vm.runInContext(fs.readFileSync(path.join(__dirname,'../app/remote.js'),'utf8'),context);
|
|
context.setupRemoteNavigation(buttons,doc,{addEventListener(type,handler){windowHandlers[type]=handler;}});
|
|
function key(code,type='keydown',repeat=false){let prevented=false;handlers[type]({keyCode:code,repeat,preventDefault(){prevented=true;}});return prevented;}
|
|
buttons[0].focus();assert(key(39));assert.equal(doc.activeElement.id,'stop');
|
|
key(37);assert.equal(doc.activeElement.id,'start');key(37);assert.equal(doc.activeElement.id,'autostart');
|
|
key(39);assert.equal(doc.activeElement.id,'start');
|
|
buttons[1].disabled=true;key(39);assert.equal(doc.activeElement.id,'refresh');
|
|
key(13);assert.equal(buttons[2].clicks,1);key(13);key(13,'keydown',true);assert.equal(buttons[2].clicks,1);
|
|
key(13,'keyup');key(13);assert.equal(buttons[2].clicks,2);key(13,'keyup');
|
|
buttons[3].handlers.mouseenter();assert.equal(doc.activeElement.id,'autostart');key(37);assert.equal(doc.activeElement.id,'refresh');
|
|
doc.activeElement=null;key(39);assert.equal(doc.activeElement.id,'refresh');
|
|
assert(!key(461));assert(!key(65));
|
|
key(40);assert.equal(doc.activeElement.id,'autostart');key(38);assert.equal(doc.activeElement.id,'refresh');
|
|
key(13);windowHandlers.blur();key(13);assert.equal(buttons[2].clicks,4);
|
|
buttons[4].disabled=false;buttons[3].focus();key(39);assert.equal(doc.activeElement.id,'handover');
|
|
key(39);assert.equal(doc.activeElement.id,'start');key(37);assert.equal(doc.activeElement.id,'handover');
|
|
buttons.forEach(button=>button.disabled=true);assert(key(39));
|
|
console.log('PASS: arrow navigation, wraparound, disabled controls, OK once per press, pointer handoff, focus recovery, Back preserved');
|