Dotfiles_ArchAP/tests/quickshell/test_scroll_steps.js

50 lines
2.1 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/status/ScrollSteps.js"), "utf8");
const context = {};
vm.createContext(context);
vm.runInContext(source, context);
const advance = context.advance;
const empty = () => ({ remainder: 0, source: "" });
let state = empty();
for (const part of [3, 4, 5, 7, 8]) state = advance(state, part, 0, false, 2, false);
assert.equal(state.steps, 0);
state = advance(state, 5, 120, false, 2, false);
assert.equal(state.steps, 1); // pixelDelta a priorité, sans compter angleDelta.
assert.equal(state.remainder, 0);
state = advance(empty(), 0, 120, false, 0, false);
assert.equal(state.steps, 1); // Un cran de souris = un point.
state = advance(empty(), 0, -240, false, 0, false);
assert.equal(state.steps, -2);
state = advance(empty(), -32, 0, false, 2, true);
assert.equal(state.steps, 1); // Deltas ASUS normalisés : geste haut = hausse.
state = advance(empty(), 32, 0, false, 2, true);
assert.equal(state.steps, -1); // Geste bas = baisse.
state = advance(empty(), 32, 0, true, 2, true);
assert.equal(state.steps, 1); // inverted est traité une seule fois.
state = advance(empty(), 0, -120, false, 0, true);
assert.equal(state.steps, 1); // Touchpad à delta angulaire seul.
state = advance({ remainder: 20, source: "pixel" }, -16, 0, false, 2, false);
assert.equal(state.steps, 0);
assert.equal(state.remainder, -16); // Direction inversée : ancien reliquat abandonné.
state = advance({ remainder: 20, source: "pixel" }, 0, 120, false, 0, false);
assert.equal(state.steps, 1); // Changement de source : reliquat incomparable abandonné.
state = advance({ remainder: 20, source: "pixel" }, 0, 0, false, 3, false);
assert.equal(state.remainder, 0); // Fin de geste.
state = empty();
let total = 0;
for (let i = 0; i < 320; i++) {
state = advance(state, 1, 0, false, 2, false);
total += state.steps;
}
assert.equal(total, 10);
assert.equal(state.remainder, 0); // Dix points réguliers, sans accélération.
console.log("ScrollSteps: PASS");