tests/smoke.mjs: 8 teste @campanie implementate complet (test.skip inlaturat): - E2E 5 camere cu stiluri rotite → final stele+litere - Resume safeStore+djb2 (D3+D11) - Camera moartă — timeout 4s → skip-banner+cod - Eroare post-ready (D5 semantica ORICAND) - Dublu-click idempotent (T4+D4) - $/$& replace-functie (D1) - 8+ camere beep (D2) - 320x568 chrome-40px fara overflow (T6+TD4) CLAUDE.md: ## Testing actualizat — comenzi npx directe, fara npm scripts; 21/21 status curent documentat. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.7 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Ce este
Generator de jocuri escape room: un singur fișier HTML (escape-builder.html), fără backend, fără build, fără dependențe. Același set de puzzle-uri se exportă în 5 stiluri de joc diferite (clasic/quiz, terminal retro, arcade pixel, story chat, point-and-click).
Dezvoltare
Nu există build sau lint. Produsul (HTML files) e vanilla HTML/CSS/JS, zero-dependențe.
# Verificare: deschide direct în browser (merge de pe file://)
# sau servește local:
python3 -m http.server 8000
Testarea manuală: deschide escape-builder.html, schimbă "Stil joc" și verifică preview-ul live (iframe), apoi exportă și verifică jocul standalone. Testele automate → vezi ## Testing.
Arhitectură
Toată aplicația trăiește în escape-builder.html, organizată în secțiuni comentate (stare, editor, preview, template-urile jocului exportat):
- Stare: obiectul
state(titlu, poveste, culoare,style, listăpuzzles), persistat automat înlocalStoragesub cheiaescape-builder-v1. Export/import ca JSON. - Editor (stânga): formularele scriu direct în
stateviadata-g; orice modificare cheamăonChange()→ persist + refresh preview cu debounce 400ms. - Preview (dreapta):
refreshPreview()seteazăiframe.srcdoc = gameHTML(cleanState())— preview-ul este exact jocul exportat, jucabil. - Generare joc:
gameHTML(cfg)face dispatch pecfg.stylecătre cele 5 motoare:gameClassic,gameTerminal,gameArcade,gameChat,gamePoint. Fiecare motor returnează un string HTML complet, standalone (jocul exportat merge offline).
Cod partajat între motoare (injectat în HTML-ul generat):
libJS(cfg):CFG(config serializat),norm(normalizare răspuns: fără diacritice/majuscule, virgulă→punct),checkAnswer,starsFor(3/2/1 stele după încercări/indiciu),finalWord(literele puzzle-urilor formează cuvântul final),beep(WebAudio),confetti.SNIP.*: fragmente de template partajate —baseCss, modal de întrebare (modalCss/Html/Js, folosit de arcade și point) și ecranul final (finalCss/Html/Js).
Tipuri de puzzle: free (răspuns liber), tf (adevărat/fals), choice (variante pe linii separate în choices, cea corectă prefixată cu *).
Testing
Harness Playwright în tests/smoke.mjs. Nu există package.json commitat — produsul rămâne zero-dependențe. Instalare dev o singură dată:
npm i -D @playwright/test && npx playwright install chromium
Rulare (fără npm scripts — direct npx):
npx playwright test tests/smoke.mjs --grep "@regresie" # regresie: 13 teste
npx playwright test tests/smoke.mjs --grep "@campanie" # campanie E2E: 8 teste
npx playwright test tests/smoke.mjs # suita completă: 21 teste
Status curent: 21/21 trec (13 @regresie + 8 @campanie).
Atenție la editare
- Motoarele de joc sunt template literals mari — backslash-urile din codul generat trebuie dublate (
\\u0300,\\n), iar codul generat foloseștevar/functionclasic intenționat. - O schimbare în
libJS/SNIPafectează toate cele 5 motoare; verifică fiecare stil în preview. exemplu-*.htmlsunt jocuri demo exportate din builder (câte unul per stil). Nu le edita manual — după modificări la motoare, regenerează-le prin exportul din builder.index.htmle doar pagina de landing care leagă builder-ul și demo-urile.node_modules/(gitignored) e doar dev tooling Playwright. Produsul (fișierele HTML) rămâne zero-dependențe — merge offline de pefile://.