mud/tests/test_colors.py

128 lines
4.6 KiB
Python

"""Tests for color markup engine."""
from mudlib.render.colors import colorize
class TestColorize:
"""Test the colorize markup processor."""
def test_basic_color_16(self):
"""Test basic color tag in 16-color mode."""
result = colorize("{red}hello{/}", "16")
assert result == "\033[31mhello\033[0m"
def test_bold_16(self):
"""Test bold tag in 16-color mode."""
result = colorize("{bold}test{/}", "16")
assert result == "\033[1mtest\033[0m"
def test_multiple_colors_16(self):
"""Test multiple color tags in sequence."""
result = colorize("{green}hp{/} {red}sp{/}", "16")
assert result == "\033[32mhp\033[0m \033[31msp\033[0m"
def test_no_color_support(self):
"""Test stripping tags when color_depth is None."""
result = colorize("{red}danger{/}", None)
assert result == "danger"
def test_nested_tags(self):
"""Test nested tags - bold and red together."""
result = colorize("{bold}{red}critical{/}", "16")
assert result == "\033[1m\033[31mcritical\033[0m"
def test_plain_text_passthrough(self):
"""Test plain text without tags passes through unchanged."""
result = colorize("plain text", "16")
assert result == "plain text"
def test_unknown_tags_preserved(self):
"""Test unknown tags are preserved for template substitution."""
result = colorize("{fake}text{/}", "16")
assert result == "{fake}text\033[0m"
def test_multiple_resets(self):
"""Test multiple reset tags work correctly."""
result = colorize("{red}one{/}{green}two{/}", "16")
assert result == "\033[31mone\033[0m\033[32mtwo\033[0m"
def test_reset_always_ansi_reset(self):
"""Test {/} always maps to ANSI reset code."""
result = colorize("{/}", "16")
assert result == "\033[0m"
def test_256_color_mode(self):
"""Test color tag works in 256-color mode."""
result = colorize("{green}hp{/}", "256")
# Should contain ANSI code (exact code may vary by implementation)
assert "\033[" in result
assert "hp" in result
assert "\033[0m" in result
def test_template_variables_preserved(self):
"""Test that non-color tags like {stamina_pct} are preserved."""
result = colorize("{red}HP:{/} {hp_current}/{hp_max}", "16")
assert result == "\033[31mHP:\033[0m {hp_current}/{hp_max}"
def test_all_basic_colors(self):
"""Test all basic color tags work."""
colors = ["red", "green", "yellow", "blue", "magenta", "cyan", "white", "black"]
for color in colors:
result = colorize(f"{{{color}}}text{{/}}", "16")
assert "\033[" in result
assert "text" in result
assert "\033[0m" in result
def test_dim_style(self):
"""Test dim style tag."""
result = colorize("{dim}faded{/}", "16")
assert "\033[2m" in result
assert "faded" in result
def test_no_closing_tag(self):
"""Test unclosed tag is handled gracefully."""
result = colorize("{red}no close", "16")
# Should process the opening tag even without close
assert "\033[31m" in result
assert "no close" in result
def test_color_depth_empty_string(self):
"""Test empty string color_depth strips tags like None."""
result = colorize("{red}danger{/}", "")
assert result == "danger"
def test_reset_alias(self):
"""Test {reset} works the same as {/}."""
result = colorize("{reset}", "16")
assert result == "\033[0m"
# Test in context
result2 = colorize("{red}text{reset}", "16")
assert result2 == "\033[31mtext\033[0m"
def test_bright_red_16(self):
"""Test bright red in 16-color mode."""
result = colorize("{RED}bright{/}", "16")
assert result == "\033[91mbright\033[0m"
def test_all_bright_colors_16(self):
"""Test all bright color variants work."""
bright_colors = [
"RED",
"GREEN",
"YELLOW",
"BLUE",
"MAGENTA",
"CYAN",
"WHITE",
"BLACK",
]
for color in bright_colors:
result = colorize(f"{{{color}}}text{{/}}", "16")
assert "\033[" in result
assert "text" in result
assert "\033[0m" in result
def test_bright_colors_no_support(self):
"""Test bright colors get stripped when no color support."""
result = colorize("{RED}bright{/} {GREEN}text{/}", None)
assert result == "bright text"