diff options
| author | Danilo M. <danix@danix.xyz> | 2026-11-06 17:42:18 +0100 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-11-06 17:42:18 +0100 |
| commit | 187682aa4bd212632204d23706c5cb317028b5d3 (patch) | |
| tree | ab30ae7394eedbfa007a2f7e9a2fb3ed1a55266b /desktop/modules/appearance/test_transitions.js | |
| parent | 2ae4deaf7ac420ad5871e3957fb027a856ce7edf (diff) | |
| download | quickshell-187682aa4bd212632204d23706c5cb317028b5d3.tar.gz quickshell-187682aa4bd212632204d23706c5cb317028b5d3.zip | |
wallpaper: choose a transition, by name or at random
A named pick plays as it is; random draws from the ticked pool and skips
what played last while anything else is there. Saved values are checked
here too, so a stale or hand-edited name lands on something playable. A
JS library rather than QML, to test it under node as Shuffle.js is.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'desktop/modules/appearance/test_transitions.js')
| -rw-r--r-- | desktop/modules/appearance/test_transitions.js | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/desktop/modules/appearance/test_transitions.js b/desktop/modules/appearance/test_transitions.js new file mode 100644 index 0000000..c703703 --- /dev/null +++ b/desktop/modules/appearance/test_transitions.js @@ -0,0 +1,51 @@ +// Copyright (C) 2026 Danilo M. <danix@danix.xyz> +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Run: node desktop/modules/appearance/test_transitions.js +// TransitionPick.js is a QML library, so its .pragma line is stripped before +// node evaluates it. + +const fs = require("fs"); +const assert = require("assert"); + +const src = fs.readFileSync(__dirname + "/TransitionPick.js", "utf8").replace(/^\.pragma library$/m, ""); +const T = new Function(src + "\nreturn { choose, clean };")(); + +// A named pick is returned as it is, whatever the pool holds. +assert.strictEqual(T.choose("melt", [], "melt"), "melt"); + +// Random stays in the pool and never plays the same one twice running. +const pool = ["ink", "melt", "blinds"]; +let last = ""; +const seen = {}; +for (let i = 0; i < 500; i++) { + const n = T.choose("random", pool, last); + assert.ok(pool.indexOf(n) >= 0, `${n} is not in the pool`); + assert.notStrictEqual(n, last, `${n} twice running`); + seen[n] = true; + last = n; +} +assert.strictEqual(Object.keys(seen).length, 3); + +// A pool of one has to repeat, and an empty one falls back. +assert.strictEqual(T.choose("random", ["ink"], "ink"), "ink"); +assert.strictEqual(T.choose("random", [], "ink"), "burn"); + +// Saved values: missing, wrong and unknown all land on something playable, +// and the pool comes back in the list's order. +const names = ["burn", "ink", "melt"]; +assert.deepStrictEqual(T.clean(null, names), { pick: "burn", pool: names }); +assert.deepStrictEqual(T.clean({ pick: "gone", pool: "x" }, names), { pick: "burn", pool: names }); +assert.deepStrictEqual(T.clean({ pick: "random", pool: ["melt", "gone", "burn"] }, names), + { pick: "random", pool: ["burn", "melt"] }); +assert.deepStrictEqual(T.clean({ pick: "ink", pool: [] }, names), { pick: "ink", pool: [] }); + +console.log("ok"); |
