Private
Public Access
Add Magic Remote directional navigation and OK activation
This commit is contained in:
1 parent
f3a9c0a0d8
commit
3160cf005b
11 files changed
+75
-12
No files matched your search
@@ -0,0 +1,29 @@
|
||||
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'].map(id=>({
|
||||
id,disabled:false,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.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');
|
||||
Reference in new issue
Block a user