Add tests for mode-aware prompts

This commit is contained in:
Jared Miller 2026-02-14 21:09:11 -05:00
parent dde166f89c
commit f45d391e3c
Signed by: shmup
GPG key ID: 22B5C6D66A38B06C

View file

@ -474,3 +474,330 @@ def test_combat_state_shows_state_when_in_combat():
result = render_prompt(player)
assert result == "[telegraph] > "
def test_terrain_variable_grass():
"""Terrain variable shows 'grass' for '.' tile."""
from mudlib.zone import Zone
terrain = [["." for _ in range(5)] for _ in range(5)]
zone = Zone(
name="testzone",
width=5,
height=5,
toroidal=True,
terrain=terrain,
impassable=set(),
)
player = Player(
name="Test",
stamina=50.0,
max_stamina=100.0,
pl=200.0,
mode_stack=["normal"],
x=2,
y=2,
location=zone,
prompt_template="{terrain} > ",
caps=ClientCaps(ansi=False),
)
result = render_prompt(player)
assert result == "grass > "
def test_terrain_variable_forest():
"""Terrain variable shows 'forest' for 'T' tile."""
from mudlib.zone import Zone
terrain = [["." for _ in range(5)] for _ in range(5)]
terrain[2][2] = "T" # Forest at player position
zone = Zone(
name="testzone",
width=5,
height=5,
toroidal=True,
terrain=terrain,
impassable=set(),
)
player = Player(
name="Test",
stamina=50.0,
max_stamina=100.0,
pl=200.0,
mode_stack=["normal"],
x=2,
y=2,
location=zone,
prompt_template="{terrain} > ",
caps=ClientCaps(ansi=False),
)
result = render_prompt(player)
assert result == "forest > "
def test_terrain_variable_mountain():
"""Terrain variable shows 'mountain' for '^' tile."""
from mudlib.zone import Zone
terrain = [["." for _ in range(5)] for _ in range(5)]
terrain[2][2] = "^" # Mountain at player position
zone = Zone(
name="testzone",
width=5,
height=5,
toroidal=True,
terrain=terrain,
impassable={"^"},
)
player = Player(
name="Test",
stamina=50.0,
max_stamina=100.0,
pl=200.0,
mode_stack=["normal"],
x=2,
y=2,
location=zone,
prompt_template="{terrain} > ",
caps=ClientCaps(ansi=False),
)
result = render_prompt(player)
assert result == "mountain > "
def test_terrain_variable_unknown_char():
"""Terrain variable shows raw char for unknown tile."""
from mudlib.zone import Zone
terrain = [["." for _ in range(5)] for _ in range(5)]
terrain[2][2] = "," # Custom unknown tile
zone = Zone(
name="testzone",
width=5,
height=5,
toroidal=True,
terrain=terrain,
impassable=set(),
)
player = Player(
name="Test",
stamina=50.0,
max_stamina=100.0,
pl=200.0,
mode_stack=["normal"],
x=2,
y=2,
location=zone,
prompt_template="{terrain} > ",
caps=ClientCaps(ansi=False),
)
result = render_prompt(player)
assert result == ", > "
def test_terrain_variable_no_location():
"""Terrain variable shows 'unknown' when player has no location."""
player = Player(
name="Test",
stamina=50.0,
max_stamina=100.0,
pl=200.0,
mode_stack=["normal"],
x=2,
y=2,
location=None,
prompt_template="{terrain} > ",
caps=ClientCaps(ansi=False),
)
result = render_prompt(player)
assert result == "unknown > "
def test_paint_mode_prompt():
"""Paint mode uses paint template showing brush and SURVEYING."""
player = Player(
name="Test",
stamina=50.0,
max_stamina=100.0,
pl=200.0,
mode_stack=["normal"],
paint_mode=True,
painting=False,
paint_brush=".",
x=10,
y=5,
caps=ClientCaps(ansi=False),
)
result = render_prompt(player)
# Expected: <50%> <200/100> (10,5) [brush: .] SURVEYING
assert "<50%> <200/100> (10,5) [brush: .] SURVEYING " in result
def test_paint_mode_painting():
"""Paint mode shows PAINTING when painting is True."""
player = Player(
name="Test",
stamina=50.0,
max_stamina=100.0,
pl=200.0,
mode_stack=["normal"],
paint_mode=True,
painting=True,
paint_brush=".",
x=10,
y=5,
caps=ClientCaps(ansi=False),
)
result = render_prompt(player)
# Expected: <50%> <200/100> (10,5) [brush: .] PAINTING
assert "<50%> <200/100> (10,5) [brush: .] PAINTING " in result
def test_paint_mode_custom_brush():
"""Paint mode shows custom brush character."""
player = Player(
name="Test",
stamina=50.0,
max_stamina=100.0,
pl=200.0,
mode_stack=["normal"],
paint_mode=True,
painting=False,
paint_brush="#",
x=10,
y=5,
caps=ClientCaps(ansi=False),
)
result = render_prompt(player)
# Expected: <50%> <200/100> (10,5) [brush: #] SURVEYING
assert "[brush: #]" in result
def test_admin_normal_prompt():
"""Admin in normal mode shows coordinates and terrain."""
from mudlib.zone import Zone
terrain = [["." for _ in range(5)] for _ in range(5)]
zone = Zone(
name="testzone",
width=5,
height=5,
toroidal=True,
terrain=terrain,
impassable=set(),
)
player = Player(
name="Test",
stamina=50.0,
max_stamina=100.0,
pl=200.0,
mode_stack=["normal"],
is_admin=True,
x=12,
y=7,
location=zone,
caps=ClientCaps(ansi=False),
)
result = render_prompt(player)
# Expected: <50%> <200/100> (12,7) grass
assert "<50%> <200/100> (12,7) grass " in result
def test_admin_combat_prompt():
"""Admin in combat shows coords after opponent."""
player = Player(
name="Test",
stamina=50.0,
max_stamina=100.0,
pl=200.0,
mode_stack=["normal", "combat"],
is_admin=True,
x=12,
y=7,
caps=ClientCaps(ansi=False),
)
opponent = Entity(name="Enemy", pl=150.0)
encounter = CombatEncounter(attacker=player, defender=opponent)
active_encounters.append(encounter)
result = render_prompt(player)
# Expected: <50%> <200/100> vs Enemy > (12,7)
assert "<50%> <200/100> vs Enemy > (12,7) " in result
def test_admin_with_custom_template():
"""Admin with custom template uses custom template over admin default."""
player = Player(
name="Test",
stamina=50.0,
max_stamina=100.0,
pl=200.0,
mode_stack=["normal"],
is_admin=True,
x=12,
y=7,
prompt_template="[custom] > ",
caps=ClientCaps(ansi=False),
)
result = render_prompt(player)
assert result == "[custom] > "
def test_paint_mode_overrides_admin():
"""Paint mode template takes precedence over admin template."""
player = Player(
name="Test",
stamina=50.0,
max_stamina=100.0,
pl=200.0,
mode_stack=["normal"],
is_admin=True,
paint_mode=True,
painting=False,
paint_brush=".",
x=10,
y=5,
caps=ClientCaps(ansi=False),
)
result = render_prompt(player)
# Should use paint template, not admin template
assert "[brush: .]" in result
assert "SURVEYING" in result
def test_paint_brush_variable_in_custom_template():
"""Paint brush variable works in custom template."""
player = Player(
name="Test",
stamina=50.0,
max_stamina=100.0,
pl=200.0,
mode_stack=["normal"],
paint_brush="#",
prompt_template="brush={paint_brush} > ",
caps=ClientCaps(ansi=False),
)
result = render_prompt(player)
assert result == "brush=# > "
def test_paint_state_variable_in_custom_template():
"""Paint state variable works in custom template."""
player = Player(
name="Test",
stamina=50.0,
max_stamina=100.0,
pl=200.0,
mode_stack=["normal"],
painting=False,
prompt_template="state={paint_state} > ",
caps=ClientCaps(ansi=False),
)
result = render_prompt(player)
assert result == "state=SURVEYING > "