forked from genewildish/Mainline
Implements phase-aware (REVEAL/HOLD/DISSOLVE) ANSI cursor-positioning overlay renderer for figment glyphs, with deterministic shuffle seeding and gradient coloring via _color_codes_to_ansi(). Includes 6 TDD tests. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
"""Tests for render_figment_overlay in engine.layers."""
|
|
|
|
from effects_plugins.figment import FigmentPhase, FigmentState
|
|
from engine.layers import render_figment_overlay
|
|
|
|
|
|
def _make_state(phase=FigmentPhase.HOLD, progress=0.5):
|
|
return FigmentState(
|
|
phase=phase,
|
|
progress=progress,
|
|
rows=["█▀▄ █", " ▄█▀ ", "█ █"],
|
|
gradient=[46, 40, 34, 28, 22, 22, 34, 40, 46, 82, 118, 231],
|
|
center_row=10,
|
|
center_col=37,
|
|
)
|
|
|
|
|
|
class TestRenderFigmentOverlay:
|
|
def test_returns_list_of_strings(self):
|
|
state = _make_state()
|
|
result = render_figment_overlay(state, 80, 24)
|
|
assert isinstance(result, list)
|
|
assert all(isinstance(s, str) for s in result)
|
|
|
|
def test_contains_ansi_positioning(self):
|
|
state = _make_state()
|
|
result = render_figment_overlay(state, 80, 24)
|
|
# Should contain cursor positioning escape codes
|
|
assert any("\033[" in s for s in result)
|
|
|
|
def test_reveal_phase_partial(self):
|
|
state = _make_state(phase=FigmentPhase.REVEAL, progress=0.0)
|
|
result = render_figment_overlay(state, 80, 24)
|
|
# At progress 0.0, very few cells should be visible
|
|
# Result should still be a valid list
|
|
assert isinstance(result, list)
|
|
|
|
def test_hold_phase_full(self):
|
|
state = _make_state(phase=FigmentPhase.HOLD, progress=0.5)
|
|
result = render_figment_overlay(state, 80, 24)
|
|
# During hold, content should be present
|
|
assert len(result) > 0
|
|
|
|
def test_dissolve_phase(self):
|
|
state = _make_state(phase=FigmentPhase.DISSOLVE, progress=0.9)
|
|
result = render_figment_overlay(state, 80, 24)
|
|
# At high dissolve progress, most cells are gone
|
|
assert isinstance(result, list)
|
|
|
|
def test_empty_rows(self):
|
|
state = FigmentState(
|
|
phase=FigmentPhase.HOLD,
|
|
progress=0.5,
|
|
rows=[],
|
|
gradient=[46] * 12,
|
|
center_row=0,
|
|
center_col=0,
|
|
)
|
|
result = render_figment_overlay(state, 80, 24)
|
|
assert result == []
|