forked from genewildish/Mainline
feat(figment): add render_figment_overlay() to layers.py
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>
This commit is contained in:
60
tests/test_figment_overlay.py
Normal file
60
tests/test_figment_overlay.py
Normal file
@@ -0,0 +1,60 @@
|
||||
"""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 == []
|
||||
Reference in New Issue
Block a user