Flag opt-in `adventure` (default off) — zero regresie non-adventure.
E0: `adventure:false` in defaultState + checkbox builder + `ADVENTURE` in orchestrator.
E1: `_lastGiven` in libJS; `checkAnswer` captureaza raspunsul; `campaignDone`
calculeaza cheia branch ('*'/text-tf/index-choice) si o adauga in payload nextRoom.
E2: `resolveBranch(idx,key)` + rutare nextRoom: 'end'→owExitUnlocked+showOverworld;
numar→owUnlocked[dest]+showOverworld(dest). Non-adventure: comportament existent.
E3: `owCheckEnter` blocheaza usi incuiate (ADVENTURE&&!owUnlocked); exit via
owExitUnlocked. `owRefreshDoors`: stil `.locked` (dim+lock). `__ow.state`:
expune owUnlocked/owExitUnlocked.
E4: `saveProgress` adauga doneList+owUnlocked+owExitUnlocked+target; `tryResume`
reconstruieste din doneList non-contiguu (nu bucla liniara 0..idx).
E5: `buildDiploma`: ADVENTURE&&!roomDone[i] → 'neexplorata' (nu stele inselatoare).
E6: Builder UI — `normalizePuzzle` garanteaza p.branch={}; `cleanState` clampa
tintele+strip branch cand !adventure; `puzzleCard` afiseaza dropdown-uri
ramificare per-puzzle (free=1, tf=2, choice=1/optiune); `data-fb` handler;
`adventure` change → renderPuzzles().
Smoke 35/35 (4 teste noi: branch-jump, resume non-contiguu, regression, tf branch).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.0 KiB
2.0 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 (~35 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(16 — exemplu-*.html + edge cases + mobil 320px + regenerare via gameHTML + stil top-level invalid la import + bomberman gameplay + bomberman rază/powerup-uri) și@campanie(21 — intro→hartă→camere→final, resume, cameră moartă, idempotență ușă,$/$&, beep, mobil, audio S1, voce/narațiune D10, a11y tap/aria/reduced-motion, navigare overworld, timer calm T10, muzica ambient T10, diploma A4, adventure branch-jump, adventure resume non-contiguu, adventure regression non-adventure, adventure branch tf). - Status țintă: 35/35 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 # 35/35
npx playwright test tests/smoke.mjs --grep @regresie
npx playwright test tests/smoke.mjs --grep @campanie
Child DOX Index
(none — leaf)