// Copyright (C) 2026 Danilo M. // // 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");