// Les gestes du plateau qui se vérifient sans navigateur : le double toucher // et l'ordre des pions et des cases au clavier. Le glisser-déposer lui-même // est joué dans un navigateur (tests/browser/plateau.mjs). // // Copyright (C) 2026 les auteurs d'Ustagammon. // Licence : GPLv3 ou ultérieure (voir LICENSE). import assert from "node:assert/strict"; import { test } from "node:test"; import { createDoubleTap, DOUBLE_TAP_MS, nextPlace } from "../src/ui/board-gestures.js"; import type { Place } from "../src/ui/board-model.js"; test("double toucher : deux touchers rapprochés sur le même endroit", () => { const taps = createDoubleTap(); let firsts = 0; const first = () => { firsts++; return `premier ${firsts}`; }; assert.equal(taps.tap("p8", 0, first), null); assert.equal(taps.tap("p8", DOUBLE_TAP_MS - 1, first), "premier 1"); // Le troisième toucher recommence un double toucher. assert.equal(taps.tap("p8", DOUBLE_TAP_MS, first), null); // Trop lent : un nouveau premier toucher. assert.equal(taps.tap("p8", 3 * DOUBLE_TAP_MS, first), null); // Un autre endroit : un nouveau premier toucher. assert.equal(taps.tap("p6", 3 * DOUBLE_TAP_MS + 10, first), null); assert.equal(taps.tap("p6", 3 * DOUBLE_TAP_MS + 20, first), "premier 4"); assert.equal(firsts, 4); }); test("clavier : les pions dans le sens de la course, en boucle", () => { const places: Place[] = ["p6", "bar-player", "p13", "p8"]; assert.equal(nextPlace(places, null, 1), "bar-player"); assert.equal(nextPlace(places, null, -1), "p6"); assert.equal(nextPlace(places, "bar-player", 1), "p13"); assert.equal(nextPlace(places, "p8", 1), "p6"); assert.equal(nextPlace(places, "p6", 1), "bar-player"); assert.equal(nextPlace(places, "bar-player", -1), "p6"); // Un endroit qui n'est plus jouable : on repart du début. assert.equal(nextPlace(places, "p24", 1), "bar-player"); assert.equal(nextPlace([], null, 1), null); // Les cases d'arrivée, sortie comprise. assert.equal(nextPlace(["off-player", "p2"], "p2", 1), "off-player"); });