Stockage ouvert pendant le chargement du moteur ; test navigateur : nombre de parties

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre MARTIN
2026-11-03 20:29:18 +01:00
co-authored by Claude Opus 5.5
parent 71ee3605d4
commit e3aaa0b3a3
3 changed files with 71 additions and 26 deletions
+28 -3
View File
@@ -154,6 +154,26 @@ async function readJournal() {
);
}
/** Le nombre de parties enregistrées dans IndexedDB. */
async function savedGameCount() {
await savedJournal(); // les enregistrements en cours terminés
return page.evaluate(
() =>
new Promise((resolve, reject) => {
const open = indexedDB.open("ustagammon");
open.onerror = () => reject(open.error);
open.onsuccess = () => {
const db = open.result;
const count = db.transaction("games").objectStore("games").count();
count.onsuccess = () => {
db.close();
resolve(count.result);
};
};
}),
);
}
/** Le journal enregistré, une fois les enregistrements en cours terminés
* (l'application enregistre sans attendre) : deux lectures identiques. */
async function savedJournal() {
@@ -1057,6 +1077,7 @@ for (let actions = 0; ; actions++) {
check(await page.isVisible("#menu"), "M n'ouvre pas le menu");
await page.keyboard.press("Escape");
const pips = await page.textContent("#strip-player .count");
const games = await savedGameCount();
const old = await newGameFromMenu();
await page.click("#resume-old");
await waitForPlayer();
@@ -1066,6 +1087,8 @@ for (let actions = 0; ; actions++) {
check((await page.textContent("#strip-player .count")) === pips,
"« Reprendre l'ancienne » : plateau différent");
check(!(await page.isVisible("#banner")), "le bandeau reste après la reprise");
check((await savedGameCount()) === games,
"« Reprendre l'ancienne » : la nouvelle partie n'a pas été supprimée");
log(`nouvelle partie puis « Reprendre l'ancienne » : journal identique (${old.events.length} événements)`);
}
}
@@ -1142,8 +1165,10 @@ step("mes parties");
await page.waitForSelector("#games-veil:not([hidden]) .games-item");
check(!(await page.isVisible("#menu")), "le menu reste ouvert sous « Mes parties »");
const items = page.locator("#games .games-item");
// La partie abandonnée par « Reprendre l'ancienne » a été supprimée.
check((await items.count()) === 2, `${await items.count()} parties listées au lieu de 2`);
// Toutes les parties enregistrées, la dernière jouée d'abord : la
// nouvelle, puis celle qui vient de finir.
const listed = await items.count();
check(listed >= 2 && listed === (await savedGameCount()), `${listed} parties listées`);
check(!(await items.nth(0).locator('[data-action="remove"]').isVisible()),
"la partie à l'écran peut être supprimée");
const oldest = items.nth(1);
@@ -1173,7 +1198,7 @@ step("mes parties");
"la page a été rechargée");
await page.click("#panel-secondary");
log(
`mes parties : 2 parties listées (${branchCount} branche(s) pour la première), ` +
`mes parties : ${listed} parties listées (${branchCount} branche(s) pour la première), ` +
`SGF exporté (${sgf.length} octets), première partie reprise sans rechargement`,
);
}