init: Test-&-QA
+103
@@ -0,0 +1,103 @@
|
|||||||
|
# Test & QA
|
||||||
|
|
||||||
|
Script di test headless per validare build e gameplay.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install --user Pillow pyboy opencv-python numpy
|
||||||
|
```
|
||||||
|
|
||||||
|
## Test 1 — ROM game over (isolato)
|
||||||
|
|
||||||
|
Compila una ROM minimale che porta immediatamente al game over, utile per testare la schermata death:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make build/test_gameover.gb
|
||||||
|
```
|
||||||
|
|
||||||
|
Questo crea un binario che entra direttamente in `show_death()` con un metasprite GAME OVER. Da testare con screenshot.
|
||||||
|
|
||||||
|
## Test 2 — ROM finale (isolato)
|
||||||
|
|
||||||
|
Stessa idea, ma per la schermata finale:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make build/test_finale.gb
|
||||||
|
```
|
||||||
|
|
||||||
|
Va direttamente al finale con la musica. Utile per testare la sequenza audio lunga.
|
||||||
|
|
||||||
|
## Test 3 — Movimento WRAM
|
||||||
|
|
||||||
|
`scripts/test_movement.py` legge la WRAM via PyBoy e verifica che il movimento cambi le coordinate del player:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 scripts/test_movement.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Controlla:
|
||||||
|
- Pressione DPad → player_lx/ly cambiano
|
||||||
|
- Rilascio → no input
|
||||||
|
- DAS delay funziona
|
||||||
|
- Sprint (B) consuma stamina
|
||||||
|
|
||||||
|
## Test 4 — Screenshot diff
|
||||||
|
|
||||||
|
`scripts/test_pyboy.py` cattura screenshot di ogni schermata e li salva in `assets/screenshots/`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 scripts/test_pyboy.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Produce:
|
||||||
|
- `title.png`
|
||||||
|
- `gameplay_lv1.png`
|
||||||
|
- `gameplay_lv2.png`
|
||||||
|
- `gameplay_lv3.png`
|
||||||
|
- `gameover.png`
|
||||||
|
|
||||||
|
## Test 5 — Glitch detection (OpenCV)
|
||||||
|
|
||||||
|
`scripts/opencv_analyze_tiles.py` usa OpenCV per rilevare glitch visivi (tile sballati, posizioni sbagliate):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 scripts/opencv_analyze_tiles.py assets/screenshot.png
|
||||||
|
```
|
||||||
|
|
||||||
|
Output: lista di anomalie con coordinate `(x, y)` e tipo.
|
||||||
|
|
||||||
|
## Test 6 — ROM size sanity
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ls -la build/hello_iso.gb
|
||||||
|
# deve essere esattamente 32768 bytes
|
||||||
|
```
|
||||||
|
|
||||||
|
## Test 7 — Verifica header GB
|
||||||
|
|
||||||
|
```bash
|
||||||
|
xxd build/hello_iso.gb | head -8
|
||||||
|
# deve mostrare il logo Nintendo e il titolo "HELLO_ISO" o simile
|
||||||
|
```
|
||||||
|
|
||||||
|
## Test 8 — BGB debugger
|
||||||
|
|
||||||
|
Se hai BGB (https://bgb.bircd.org/):
|
||||||
|
|
||||||
|
1. Apri `build/hello_iso.gb`
|
||||||
|
2. `Window > Tile viewer` → controlla i tile in VRAM
|
||||||
|
3. `Window > Map viewer` → controlla il BG map
|
||||||
|
4. `Window > OAM viewer` → controlla gli sprite
|
||||||
|
5. `Window > IO Map` → monitora SCX, SCY, LY, ecc.
|
||||||
|
|
||||||
|
## Continuous Integration (TODO)
|
||||||
|
|
||||||
|
Una CI con GitHub Actions potrebbe:
|
||||||
|
1. Compilare con GBDK
|
||||||
|
2. Verificare dimensione ROM
|
||||||
|
3. Lanciare i test PyBoy in CI container
|
||||||
|
4. Confrontare screenshot con baseline (visual regression)
|
||||||
|
5. Pubblicare release su tag `v*`
|
||||||
|
|
||||||
|
Per ora i test sono manuali.
|
||||||
Reference in New Issue
Block a user