54 lines
2.7 KiB
JavaScript
54 lines
2.7 KiB
JavaScript
const assert = require("node:assert/strict");
|
|
const fs = require("node:fs");
|
|
const path = require("node:path");
|
|
const vm = require("node:vm");
|
|
|
|
const source = fs.readFileSync(path.resolve(__dirname,
|
|
"../../quickshell/.config/quickshell/labfy-sway/osd/Observation.js"), "utf8")
|
|
.replace(/^\.pragma library\s*/, "");
|
|
const model = {};
|
|
vm.createContext(model);
|
|
vm.runInContext(source, model);
|
|
|
|
const sink = {};
|
|
let result = model.observe(null, sink, true, 0.57, false);
|
|
assert.equal(result.changed, false); // Première lecture : référence seulement.
|
|
result = model.observe(result.state, sink, true, 0.57, false);
|
|
assert.equal(result.changed, false);
|
|
result = model.observe(result.state, sink, true, 0.571, false);
|
|
assert.equal(result.volumeChanged, true); // Même pourcentage arrondi, autre valeur brute.
|
|
result = model.observe(result.state, sink, true, 0.571, true);
|
|
assert.equal(result.muteChanged, true);
|
|
let microphone = model.observe(null, "source A", true, 0.36, false);
|
|
assert.equal(microphone.changed, false); // Page Audio jamais ouverte.
|
|
microphone = model.observe(microphone.state, "source A", true, 0.36, true);
|
|
assert.equal(microphone.muteChanged, true);
|
|
microphone = model.observe(microphone.state, "source B", true, 0.2, false);
|
|
assert.equal(microphone.changed, false);
|
|
result = model.observe(result.state, {}, true, 0.25, false);
|
|
assert.equal(result.changed, false); // Nouveau défaut : état initial ignoré.
|
|
result = model.observe(result.state, null, false, NaN, false);
|
|
assert.equal(result.state, null);
|
|
result = model.observe(result.state, sink, true, 0.57, false);
|
|
assert.equal(result.changed, false); // Reconnexion : nouvelle référence.
|
|
|
|
const screen = { name: "sortie-test" };
|
|
let card = model.nextCard(null, "volume", 57, false, screen, 0);
|
|
card = model.nextCard(card, "volume", 58, false, screen, 500);
|
|
assert.equal(card.deadline, 2000);
|
|
assert.equal(model.expire(card, 1, 1500), false);
|
|
card = model.nextCard(card, "brightness", 42, false, screen, 800);
|
|
assert.equal(card.kind, "brightness");
|
|
assert.equal(model.expire(card, 2, 2000), false); // Ancien timer.
|
|
assert.equal(model.expire(card, 3, 2299), false);
|
|
assert.equal(model.expire(card, 3, 2300), true);
|
|
const other = { name: "autre-sortie" };
|
|
assert.equal(model.screenForEvent([screen, other], other.name, null, "volume", 0), other);
|
|
assert.equal(model.screenForEvent([screen, other], other.name,
|
|
{ kind: "volume", screen, until: 100 }, "volume", 50), screen);
|
|
assert.equal(model.screenForEvent([screen, other], other.name,
|
|
{ kind: "volume", screen, until: 100 }, "volume", 101), other);
|
|
assert.equal(model.pageShows("brightness", 0), true);
|
|
assert.equal(model.pageShows("microphone", 0), false);
|
|
assert.equal(model.pageShows("microphone", 15), true);
|
|
console.log("OSD observation et minuteur: PASS");
|