46 lines
2.3 KiB
JavaScript
46 lines
2.3 KiB
JavaScript
const assert = require('node:assert/strict');
|
|
const fs = require('node:fs');
|
|
const vm = require('node:vm');
|
|
const path = require('node:path');
|
|
function load(file) {
|
|
const context=vm.createContext({});
|
|
vm.runInContext(fs.readFileSync(path.join(__dirname,'../../quickshell/.config/quickshell/labfy-sway',file),'utf8')
|
|
.replace(/^\.pragma library\s*\n/,''),context);
|
|
return context;
|
|
}
|
|
const hide=load('dock/AutoHide.js');
|
|
let phase='hidden';
|
|
const input={suppressed:false,held:false,body:false,edge:false};
|
|
const event=(name='input') => phase=hide.next(phase,name,input);
|
|
assert.equal(event(),'hidden');
|
|
input.edge=true; assert.equal(event(),'arming');
|
|
input.edge=false; assert.equal(event(),'hidden');
|
|
input.edge=true; event(); assert.equal(event('deadline'),'shown');
|
|
input.edge=false; assert.equal(event(),'waiting');
|
|
input.body=true; assert.equal(event(),'shown');
|
|
input.body=false; event(); input.held=true; assert.equal(event(),'held');
|
|
assert.equal(event('deadline'),'held');
|
|
input.held=false; assert.equal(event(),'waiting');
|
|
assert.equal(event('deadline'),'hidden');
|
|
input.held=true; event(); input.suppressed=true; assert.equal(event(),'hidden');
|
|
assert.equal(hide.influence(0),1);
|
|
assert.ok(hide.influence(55)>hide.influence(100));
|
|
assert.equal(hide.influence(115),0);
|
|
const model=load('applications/WindowModel.js');
|
|
const apps=[{id:'kitty.desktop',aliases:['kitty'],iconSource:'file:///tela/kitty.svg'},
|
|
{id:'org.app.desktop',aliases:['startup-class','executable']},
|
|
{id:'org.other.desktop',aliases:['executable']}];
|
|
assert.equal(model.match(apps,{appId:'kitty'}).id,'kitty.desktop');
|
|
assert.equal(model.match(apps,{wmClass:'Startup-Class'}).id,'org.app.desktop');
|
|
assert.equal(model.match(apps,{appId:'executable'}),null);
|
|
assert.equal(model.match(apps,{title:'kitty'}),null);
|
|
let entries=model.entries(apps,['absent.desktop','kitty.desktop'],[{id:'10',appId:'kitty'},{id:'11',appId:'kitty'},
|
|
{id:'12',appId:'unknown'}]);
|
|
assert.equal(entries[0].missing,true);
|
|
assert.equal(entries[1].windows.length,2);
|
|
assert.equal(entries[1].iconSource,apps[0].iconSource);
|
|
assert.equal(entries[2].pinned,false);
|
|
assert.equal(model.entries(apps,[],[]).length,0);
|
|
assert.equal(model.entries(apps,[],[{id:'11',appId:'kitty'}])[0].pinned,false);
|
|
assert.equal(model.entries(apps,['kitty.desktop'],[])[0].windows.length,0);
|
|
console.log('Dock state and window models: PASS');
|