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 | — |
|
| `--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` |
|
| `--runs RUNS` | Nombre de combats simulés | `1000` |
|
||||||
| `--seed SEED` | Graine du générateur aléatoire | `1` |
|
| `--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é |
|
| `--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é |
|
| `--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:
|
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)
|
map_spec = load_map(args.map)
|
||||||
provided = [tuple(raw) for raw in args.side]
|
provided = [tuple(raw) for raw in args.side]
|
||||||
provided_names = {raw[0] for raw in provided}
|
provided_names = {raw[0] for raw in provided}
|
||||||
@@ -189,7 +192,7 @@ def main(argv: list[str] | None = None) -> int:
|
|||||||
"--round-cap",
|
"--round-cap",
|
||||||
type=int,
|
type=int,
|
||||||
default=100,
|
default=100,
|
||||||
help="max rounds per battle (default: 100)",
|
help="max rounds per battle, >= 1 (default: 100)",
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--transcript",
|
"--transcript",
|
||||||
|
|||||||
@@ -84,6 +84,48 @@ def test_cli_rejects_duplicate_side_names(capsys: pytest.CaptureFixture[str]) ->
|
|||||||
assert "players" in err
|
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:
|
def test_cli_transcript_prints_first_battle_log(capsys: pytest.CaptureFixture[str]) -> None:
|
||||||
rc = main(
|
rc = main(
|
||||||
[
|
[
|
||||||
|
|||||||
Reference in New Issue
Block a user