fix(cli): require --round-cap >= 1
This commit is contained in:
@@ -92,7 +92,7 @@ usage: pf1e-sim [-h] --map MAP [--side NAME [FILE ...]] [--runs RUNS]
|
||||
| `--side NAME [FILE ...]` | Camp `NAME` avec un ou plusieurs JSON de monstres ; répétable pour chaque camp | — |
|
||||
| `--runs RUNS` | Nombre de combats simulés | `1000` |
|
||||
| `--seed SEED` | Graine du générateur aléatoire | `1` |
|
||||
| `--round-cap ROUND_CAP` | Plafond de rounds par combat (au-delà, combat nul) | `100` |
|
||||
| `--round-cap ROUND_CAP` | Plafond de rounds par combat, entier ≥ 1 (au-delà, combat nul) | `100` |
|
||||
| `--transcript` | Imprimer le déroulé du premier combat **en tableau** avant le rapport (voir ci-dessous) | désactivé |
|
||||
| `--simple-monster-death` | Mort simplifiée des monstres : `hp ≤ 0` au lieu de `hp ≤ -CON` (les PJ ne sont jamais affectés) | désactivé |
|
||||
|
||||
|
||||
@@ -105,6 +105,9 @@ def render_transcript_table(transcript: Sequence[str]) -> str:
|
||||
|
||||
|
||||
def _build_spec(args: argparse.Namespace) -> EncounterSpec:
|
||||
if args.round_cap < 1:
|
||||
msg = f"--round-cap must be >= 1, got {args.round_cap}"
|
||||
raise CliError(msg)
|
||||
map_spec = load_map(args.map)
|
||||
provided = [tuple(raw) for raw in args.side]
|
||||
provided_names = {raw[0] for raw in provided}
|
||||
@@ -189,7 +192,7 @@ def main(argv: list[str] | None = None) -> int:
|
||||
"--round-cap",
|
||||
type=int,
|
||||
default=100,
|
||||
help="max rounds per battle (default: 100)",
|
||||
help="max rounds per battle, >= 1 (default: 100)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--transcript",
|
||||
|
||||
@@ -84,6 +84,48 @@ def test_cli_rejects_duplicate_side_names(capsys: pytest.CaptureFixture[str]) ->
|
||||
assert "players" in err
|
||||
|
||||
|
||||
def test_cli_rejects_negative_round_cap(capsys: pytest.CaptureFixture[str]) -> None:
|
||||
rc = main(
|
||||
[
|
||||
"--map",
|
||||
str(MAP),
|
||||
"--side",
|
||||
"players",
|
||||
str(GOBLIN),
|
||||
"--side",
|
||||
"monsters",
|
||||
str(ORC),
|
||||
"--runs",
|
||||
"10",
|
||||
"--round-cap",
|
||||
"-3",
|
||||
]
|
||||
)
|
||||
assert rc == 2
|
||||
assert "--round-cap must be >= 1" in capsys.readouterr().err
|
||||
|
||||
|
||||
def test_cli_rejects_zero_round_cap(capsys: pytest.CaptureFixture[str]) -> None:
|
||||
rc = main(
|
||||
[
|
||||
"--map",
|
||||
str(MAP),
|
||||
"--side",
|
||||
"players",
|
||||
str(GOBLIN),
|
||||
"--side",
|
||||
"monsters",
|
||||
str(ORC),
|
||||
"--runs",
|
||||
"10",
|
||||
"--round-cap",
|
||||
"0",
|
||||
]
|
||||
)
|
||||
assert rc == 2
|
||||
assert "--round-cap must be >= 1" in capsys.readouterr().err
|
||||
|
||||
|
||||
def test_cli_transcript_prints_first_battle_log(capsys: pytest.CaptureFixture[str]) -> None:
|
||||
rc = main(
|
||||
[
|
||||
|
||||
Reference in New Issue
Block a user