Fusion d'origin/main (MR !44) ; 1c faite, plan clos

Conflits : l'aide garde l'approche de main (défilement sur la carte du
terme) ; styles des deux côtés conservés.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre MARTIN
2026-11-10 00:14:58 +01:00
co-authored by Claude Opus 5.5
17 changed files with 378 additions and 190 deletions
@@ -113,11 +113,11 @@ Then("le tutoriel salue votre coup", () => {
assert.ok(screen.right.length > 0);
});
When("vous répondez « Je passe »", async () => {
When("vous répondez « Passer »", async () => {
answeredRight = (await shouldTake(engine, screen.position)) === false;
});
When("vous répondez « Je prends »", async () => {
When("vous répondez « Prendre »", async () => {
answeredRight = (await shouldTake(engine, screen.position)) === true;
});
+18 -7
View File
@@ -20,7 +20,7 @@ import { memoryStorage } from "../../src/storage/open-library.js";
import { BANNER_MS } from "../../src/ui/app.js";
import { createHaptics } from "../../src/ui/haptics.js";
import { nextTheme, parseSettings, type Settings } from "../../src/ui/settings.js";
import { updateBannerShown } from "../../src/ui/updates.js";
import { betweenTurns, updateBannerShown } from "../../src/ui/updates.js";
import { loadNodeEngine } from "../support/node-engine.js";
setDefaultTimeout(30_000);
@@ -164,23 +164,34 @@ Then("il passe à clair, puis à sombre, puis revient à automatique", () => {
// ------------------------------------------------------------ Mise à jour
// Le bandeau dépend de deux choses : une version attend (le service worker
// l'a installée), et aucun coup n'est en cours de saisie. La partie est
// celle du domaine, sur le vrai moteur.
// l'a installée), et la partie est entre deux tours. La partie est celle du
// domaine, sur le vrai moteur.
let updateAvailable = false;
Given("une nouvelle version d'Ustagammon est disponible", () => {
updateAvailable = true;
});
Given("vous avez déjà déplacé un pion de votre coup", async () => {
const shownNow = (otherBanner = false) =>
updateBannerShown(
updateAvailable,
betweenTurns(game.state.phase, game.pendingHalfMoves.length),
otherBanner,
);
Given("vous avez des dés à jouer", () => {
// Jet d'ouverture 3-1 : vous commencez.
game = Game.start(engine, { dice: fixedDice([3, 1, 6, 4, 5, 2]), level: "0ply" });
assert.equal(game.state.turn, "player");
assert.equal(game.state.phase, "moving");
});
When("vous déplacez un pion de votre coup", async () => {
assert.ok(await game.playHalfMove({ from: 8, to: 5 }));
});
Then("l'application ne vous propose pas encore de mettre à jour", () => {
assert.ok(!updateBannerShown(updateAvailable, game.pendingHalfMoves.length > 0, false));
assert.ok(!shownNow());
});
When("vous avez joué votre coup", async () => {
@@ -189,7 +200,7 @@ When("vous avez joué votre coup", async () => {
});
Then("l'application vous propose de mettre à jour", () => {
assert.ok(updateBannerShown(updateAvailable, game.pendingHalfMoves.length > 0, false));
assert.ok(shownNow());
// Jamais par-dessus le bandeau « Reprendre l'ancienne ».
assert.ok(!updateBannerShown(updateAvailable, false, true));
assert.ok(!shownNow(true));
});