Feature nou (vocea nu exista deloc). Opt-in via checkbox 'voice' in builder
(off implicit), buton toggle in bara chrome a campaniei (parintele detine).
Voicing orchestrator-only, uniform pe toate 5 motoarele (fara dublu-citit):
povestea la 'Incepe aventura', intrebarea camerei la roomReady, mesajul final.
Edge cases (toate tratate):
- getVoices() gol sincron -> re-citire la onvoiceschanged.
- fara voce ro-* -> vocea default a sistemului (doar u.lang='ro-RO').
- speechSynthesis.cancel() in hideAll() -> fara replici fantoma la schimbarea scenei.
- fara 'speechSynthesis' in window -> buton ascuns, totul no-op.
- window.voiceSay expus pe parinte pt. viitor (replici motoare cu guard typeof).
Bug prins de test: #btn-voice{display:inline-flex} batea UA [hidden] ->
adaugat #btn-voice[hidden]{display:none}.
Test nou smoke #9b (voce opt-in: buton, citeste poveste/intrebare, cancel,
toggle) + asertare buton-ascuns cand voice=false. Suita 25/25. Demo regenerat.
AGENTS.md/TODOS actualizate.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1.8 KiB
1.8 KiB
tests/ — Harness Playwright
Purpose
Smoke + regresie + campanie E2E pentru jocurile generate. Verifică faptic: fiecare stil se rezolvă până la ecranul final, fără erori de consolă.
Ownership
tests/smoke.mjs— unicul fișier de teste (~25 teste).playwright.config.mjs(la root, gitignored) — config dev.
Local Contracts
- NU commita
package.json/package-lock.json/playwright.config.mjs— produsul rămâne zero-dependențe. Instalarea dev e o singură dată:npm i -D @playwright/test && npx playwright install chromium. - Fără npm scripts — se rulează direct cu
npx. - Teste pe
file://— helper-ulfileURL(name)mapează cale relativă lafile://; campania scrie HTML temp generat via builder (gameHTML) și-l încarcă de pefile://. - Zero erori consolă = invariant.
trackErrors(page)colecteazăconsole.error+pageerror; fiecare test aserteazăerrors.length === 0la final. - Tag-uri:
@regresie(14 — exemplu-*.html + edge cases + mobil 320px + regenerare via gameHTML + bomberman gameplay) și@campanie(11 — intro→hartă→camere→final, resume, cameră moartă, idempotență ușă,$/$&, beep, mobil, audio S1, voce/narațiune D10, navigare overworld). - Status țintă: 25/25 PASS.
Work Guidance
- După modificări la motoare (
escape-builder.html): rulează suita completă; extinde@regresiedacă adaugi/schimbi un stil,@campaniepentru contractul de montare. - Nu testa pe screenshot-uri de pixeli — asertează stare/text/erori.
Verification
npx playwright test tests/smoke.mjs # 25/25
npx playwright test tests/smoke.mjs --grep @regresie
npx playwright test tests/smoke.mjs --grep @campanie
Child DOX Index
(none — leaf)