"""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 == []