46 lines
2.1 KiB
TypeScript
46 lines
2.1 KiB
TypeScript
// 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<string>();
|
|
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");
|
|
});
|