Add tests for mode-aware prompts
This commit is contained in:
parent
dde166f89c
commit
f45d391e3c
1 changed files with 327 additions and 0 deletions
|
|
@ -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 > "
|
||||
|
|
|
|||
Loading…
Reference in a new issue