feature/capability-based-deps (#53)

Reviewed-on: #53
Co-authored-by: David Gwilliam <dhgwilliam@gmail.com>
Co-committed-by: David Gwilliam <dhgwilliam@gmail.com>
This commit was merged in pull request #53.
This commit is contained in:
2026-03-31 01:55:21 +00:00
committed by david
parent 2650f7245e
commit 2d28e92594
190 changed files with 37860 additions and 2026 deletions

View File

@@ -0,0 +1,103 @@
"""
Tests for the FigmentOverlayEffect plugin.
"""
import pytest
from engine.effects.plugins import discover_plugins
from engine.effects.registry import get_registry
from engine.effects.types import EffectConfig, create_effect_context
from engine.pipeline.adapters import EffectPluginStage
class TestFigmentEffect:
"""Tests for FigmentOverlayEffect."""
def setup_method(self):
"""Discover plugins before each test."""
discover_plugins()
def test_figment_plugin_discovered(self):
"""Figment plugin is discovered and registered."""
registry = get_registry()
figment = registry.get("figment")
assert figment is not None
assert figment.name == "figment"
def test_figment_plugin_enabled_by_default(self):
"""Figment plugin is enabled by default."""
registry = get_registry()
figment = registry.get("figment")
assert figment.config.enabled is True
def test_figment_renders_overlay(self):
"""Figment renders SVG overlay after interval."""
registry = get_registry()
figment = registry.get("figment")
# Configure with short interval for testing
config = EffectConfig(
enabled=True,
intensity=1.0,
params={
"interval_secs": 0.1, # 100ms
"display_secs": 1.0,
"figment_dir": "figments",
},
)
figment.configure(config)
# Create test buffer
buf = [" " * 80 for _ in range(24)]
# Create context
ctx = create_effect_context(
terminal_width=80,
terminal_height=24,
frame_number=0,
)
# Process frames until figment renders
for i in range(20):
result = figment.process(buf, ctx)
if len(result) > len(buf):
# Figment rendered overlay
assert len(result) > len(buf)
# Check that overlay lines contain ANSI escape codes
overlay_lines = result[len(buf) :]
assert len(overlay_lines) > 0
# First overlay line should contain cursor positioning
assert "\x1b[" in overlay_lines[0]
assert "H" in overlay_lines[0]
return
ctx.frame_number += 1
pytest.fail("Figment did not render in 20 frames")
def test_figment_stage_capabilities(self):
"""EffectPluginStage wraps figment correctly."""
registry = get_registry()
figment = registry.get("figment")
stage = EffectPluginStage(figment, name="figment")
assert "effect.figment" in stage.capabilities
def test_figment_configure_preserves_params(self):
"""Figment configuration preserves figment_dir."""
registry = get_registry()
figment = registry.get("figment")
# Configure without figment_dir
config = EffectConfig(
enabled=True,
intensity=1.0,
params={
"interval_secs": 30.0,
"display_secs": 3.0,
},
)
figment.configure(config)
# figment_dir should be preserved
assert "figment_dir" in figment.config.params
assert figment.config.params["figment_dir"] == "figments"