Plein écran : attente bornée, repli tourné si l'écran reste en portrait, paysage forcé en mode immersif ; plan : résultat et corrections de la recette
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
b8c2997ec0
commit
155a953c3b
+27
-8
@@ -539,6 +539,9 @@ async function openMenu() {
|
||||
* le journal de la partie quittée. */
|
||||
async function newGameFromMenu() {
|
||||
const before = await savedJournal();
|
||||
const started = () =>
|
||||
page.evaluate(() => JSON.parse(localStorage.getItem("ustagammon.settings") ?? "{}").gamesStarted);
|
||||
const startedBefore = await started();
|
||||
await openMenu();
|
||||
const start = Date.now();
|
||||
await page.click("#menu-new-game");
|
||||
@@ -548,8 +551,11 @@ async function newGameFromMenu() {
|
||||
check(!(await page.isVisible("#menu")), "le menu reste ouvert après « Nouvelle partie »");
|
||||
await waitForPlayer();
|
||||
const after = await savedJournal();
|
||||
check(after.head !== before.head && !after.events.some((e) => e.type === "MovePlayed" &&
|
||||
e.side === "player"), "« Nouvelle partie » n'a pas commencé de partie");
|
||||
// (Les identifiants d'événements se suivent : une partie neuve peut avoir
|
||||
// la même tête que la précédente ; on compte les parties commencées.)
|
||||
check((await started()) === startedBefore + 1 &&
|
||||
!after.events.some((e) => e.type === "MovePlayed" && e.side === "player"),
|
||||
"« Nouvelle partie » n'a pas commencé de partie");
|
||||
log(`nouvelle partie commencée en ${Date.now() - start} ms, sans confirmation`);
|
||||
return before;
|
||||
}
|
||||
@@ -579,7 +585,8 @@ let releaseEngine;
|
||||
const engineHeld = new Promise((resolve) => {
|
||||
releaseEngine = resolve;
|
||||
});
|
||||
await page.route("**/wasm/engine.data", async (route) => {
|
||||
// (Au niveau du contexte : le Web Worker du moteur fait la demande.)
|
||||
await context.route("**/wasm/engine.data", async (route) => {
|
||||
await engineHeld;
|
||||
await route.continue();
|
||||
});
|
||||
@@ -603,9 +610,13 @@ await page.waitForSelector("#board polygon[data-point]");
|
||||
log(`plateau dessiné en ${Date.now() - start} ms, avant le moteur (${loading.checkers} pions)`);
|
||||
}
|
||||
await checkStable("chargement");
|
||||
await review("1-chargement");
|
||||
// Firefox ne laisse pas toujours retenir la demande du Worker : la revue de
|
||||
// l'écran de chargement (six vues) se fait dans Chromium.
|
||||
if (fullReview) {
|
||||
await review("1-chargement");
|
||||
}
|
||||
releaseEngine();
|
||||
await page.unroute("**/wasm/engine.data");
|
||||
await context.unroute("**/wasm/engine.data");
|
||||
let todo = await waitForPlayer();
|
||||
log(`moteur chargé, partie prête en ${Date.now() - start} ms (${todo})`);
|
||||
await checkStable("moteur chargé");
|
||||
@@ -774,7 +785,13 @@ for (let actions = 0; ; actions++) {
|
||||
// l'orientation, d'où le repli par rotation CSS de tout l'écran.
|
||||
rotatedChecked = true;
|
||||
await page.click("#fullscreen-button");
|
||||
await sleep(300);
|
||||
for (let i = 0; i < 40; i++) {
|
||||
if (await page.evaluate(() => document.documentElement.classList.contains("landscape"))) {
|
||||
break;
|
||||
}
|
||||
await sleep(100);
|
||||
}
|
||||
await sleep(200);
|
||||
const view = await page.evaluate(() => {
|
||||
const r = document.getElementById("board").getBoundingClientRect();
|
||||
return {
|
||||
@@ -783,7 +800,9 @@ for (let actions = 0; ; actions++) {
|
||||
board: [r.x, r.y, r.width, r.height].map(Math.round),
|
||||
};
|
||||
});
|
||||
check(view.landscape, "plein écran : pas de vue paysage");
|
||||
check(view.landscape, `plein écran : pas de vue paysage (${await page.evaluate(() =>
|
||||
`${document.documentElement.className} ; plein écran ${document.fullscreenElement !== null} ; ` +
|
||||
`portrait ${matchMedia("(orientation: portrait)").matches}`)})`);
|
||||
if (view.rotated) {
|
||||
check(JSON.stringify(view.board) === JSON.stringify([0, 0, 412, 915]),
|
||||
`repli tourné : plateau ${view.board}`);
|
||||
@@ -806,7 +825,7 @@ for (let actions = 0; ; actions++) {
|
||||
check(!(await page.evaluate(() => document.documentElement.classList.contains("landscape"))),
|
||||
"plein écran quitté : la vue paysage reste");
|
||||
log(`plein écran : ${view.rotated ? "repli par rotation CSS" : "paysage verrouillé"}, ` +
|
||||
"dés lancés en touchant le plateau tourné, sortie par le menu");
|
||||
"dés lancés en touchant le plateau, sortie par le menu");
|
||||
continue;
|
||||
}
|
||||
// Dés : au clavier (Espace), en les touchant (d'un côté puis de
|
||||
|
||||
Reference in New Issue
Block a user