Public Access
100 lines
5.3 KiB
Markdown
100 lines
5.3 KiB
Markdown
# GameTest suites
|
|
|
|
The default dedicated-server run is a small smoke suite. Its Rivencraft tests
|
|
cover core linking, deterministic Age definition, writing persistence, legacy
|
|
data migration, workstation transactions, and forged/replayed menu actions.
|
|
|
|
```shell
|
|
./gradlew runGameTestServer
|
|
```
|
|
|
|
The remaining Rivencraft tests are archived, not deleted. They cover
|
|
completed milestone details such as every Age terrain profile, Notebook and
|
|
Desk surface interactions, refill edge cases, book assembly controls, and
|
|
workstation break/drop behavior. Run only the relevant archive alongside the
|
|
core tests when investigating an issue:
|
|
|
|
```shell
|
|
./gradlew runGameTestServer -ParchivedGameTestSuites=desk
|
|
./gradlew runGameTestServer -ParchivedGameTestSuites=grammar,binder
|
|
```
|
|
|
|
Available suite names are `linking`, `environment`, `writing`, `grammar`, `desk`,
|
|
`binder`, `mixer`, and `recipe`. Run all Rivencraft tests before a
|
|
release or after broad cross-system changes:
|
|
|
|
```shell
|
|
./gradlew runGameTestServer -PwithArchivedGameTests=true
|
|
```
|
|
|
|
Each archive is selected by its `rivencraft_archive_<suite>` GameTest namespace.
|
|
The suites share the normal empty test structure and do not need Create, Ponder, or
|
|
Immersive Portals. The core suite delegates to the original regression methods
|
|
for its selected cases, so the two suites do not maintain duplicate test logic.
|
|
|
|
GameTest Ages are created in `build/gametest-run/world`, not in a development
|
|
client save. Every default GameTest invocation starts with a fresh world.
|
|
Minecraft 1.21.1's GameTest server uses the fixed seed `0`. Gradle deletes the
|
|
world after every run, whether tests pass or fail. A forcibly killed run may
|
|
leave `world` behind; the next run deletes it before starting.
|
|
Logs and configuration remain available. Cleanup never targets a custom
|
|
`-PgameTestRunDir` or a player world; callers using a custom directory manage
|
|
it themselves. The full suite should still be run
|
|
before shipping changes in the archived systems.
|
|
|
|
If a new GameTest stalls the server, stop that run, remove the offending
|
|
automated check, and hand its exact scenario to the player for in-game
|
|
verification. Do not keep retrying a stalled test or leave its process running.
|
|
Keep the narrower non-stalling plan, persistence, and runtime checks automated.
|
|
|
|
## Manual Age unload/reload check
|
|
|
|
The automated suite does not unload a freshly generated Age. Minecraft can
|
|
queue point-of-interest block updates after generation; closing that Age's
|
|
region storage while a queued update is still pending can leave the dedicated
|
|
GameTest server waiting forever in `SectionStorage.readColumn`. Plan save/load,
|
|
terrain generation, and safe spawn remain automated; runtime unload/reload is
|
|
checked in a normal game session:
|
|
|
|
1. Back up the test world. Bind one Link-Panel-only Descriptive Book and one
|
|
Descriptive Book with a terrain page (for example, Island), using distinct
|
|
names. Bring a working way back to the Overworld.
|
|
2. Travel through each book, confirm the named Age and expected terrain, then
|
|
return to the Overworld. Close book screens and wait a few seconds.
|
|
3. With cheats enabled, run `/rivencraft age list` and record each Age's
|
|
`rivencraft:age/...` dimension ID. Run `/rivencraft age unload <dimension>`
|
|
for one Age at a time, then list again to confirm it is unloaded.
|
|
4. Reopen the same Descriptive Books and travel back. Confirm each book reaches
|
|
its original Age, the terrain and safe arrival remain intact, and no extra
|
|
Age entry was created. Save, restart the world, and repeat the book check.
|
|
|
|
## Manual feature-generation check (Milestone 5, issue #35)
|
|
|
|
The automated suite verifies feature pages, compiled and saved feature IDs,
|
|
vanilla registry mappings, unsupported combinations, and the runtime generator.
|
|
An automated scan across many newly generated chunks stalled the GameTest
|
|
server, so physical placement is handed to the player for in-game verification:
|
|
|
|
1. In a fresh world, bind a Descriptive Book with Link Panel, Standard Terrain,
|
|
Plains Biome, Single Biome, Caves, and Rocks pages in that order.
|
|
Missing weather/lighting/celestial branches may be seed-filled. Travel to
|
|
the Age and explore several fresh surface chunks: boulders made from one
|
|
seed-selected full-collision block should appear among the plains terrain.
|
|
Then explore underground in fresh
|
|
chunks; the Caves page should add a second cave-carving pass to Standard
|
|
terrain, not switch the Age to Cave terrain.
|
|
2. Make a second book with Flat Terrain and Caves. The Binder should mark the
|
|
Caves page unsupported and prevent assembly. Cave Terrain plus Caves should
|
|
be accepted; Cave Terrain plus Rocks should be rejected.
|
|
3. Return, save, and restart the world. Re-enter the first Age and explore
|
|
*new* chunks. The authored decorations should continue without rebinding.
|
|
Previously generated chunks are intentionally unchanged.
|
|
4. Title-derived terrain regression (with Create installed): with no Terrain Page, assemble Link Panel,
|
|
Glowstone, Rocks, Chocolate, Small Lakes in that order and name the Age
|
|
`glow`. The Binder should accept it and generate compatible surface terrain;
|
|
Glowstone should be the rock material and Chocolate should appear in authored
|
|
Small Lakes across fresh chunks. Ordinary vanilla lava lakes may still occur.
|
|
Repeat
|
|
with `gl` or `glo` to confirm names do not change page validity. An explicit
|
|
Flat or Cave Terrain Page with Rocks should still be rejected.
|