deer-flow/backend/tests/test_tui_transparent.py
Felix Wang 61c153ff09
feat(tui): add transparent terminal background (#4631)
Co-authored-by: Willem Jiang <willem.jiang@gmail.com>
2026-08-05 08:15:28 +08:00

50 lines
1.7 KiB
Python

"""Tests for opt-in terminal-background rendering in the TUI."""
import pytest
from deerflow.tui.app import DeerFlowTUI, SelectScreen
from deerflow.tui.cli import LaunchPlan
from deerflow.tui.theme import THEME
class _FakeClient:
def list_models(self):
return {"models": []}
def list_skills(self, enabled_only=False):
return {"skills": []}
class _FakeSession:
client = _FakeClient()
def resolve_thread(self, plan):
return None
@pytest.mark.asyncio
async def test_transparent_tui_uses_terminal_default_for_background_surfaces():
app = DeerFlowTUI(_FakeSession(), LaunchPlan(mode="tui", transparent=True))
async with app.run_test() as pilot:
await pilot.pause()
assert app.ansi_color is True
assert app.screen.styles.background.hex == "ansi_default"
for selector in ("#header", "#scroll", "#status", "#palette", "#composer"):
assert app.screen.query_one(selector).styles.background.hex == "ansi_default"
app.push_screen(SelectScreen("Pick one", [("one", "One")]))
await pilot.pause()
assert app.screen.styles.background.hex == "ansi_default"
assert app.screen.query_one("#dialog").styles.background.hex == "ansi_default"
assert app.screen.query_one("OptionList").styles.background.hex == "ansi_default"
@pytest.mark.asyncio
async def test_default_tui_keeps_solid_theme_backgrounds():
app = DeerFlowTUI(_FakeSession(), LaunchPlan(mode="tui"))
async with app.run_test() as pilot:
await pilot.pause()
assert app.screen.styles.background.hex.lower() == THEME.bg
assert app.screen.query_one("#header").styles.background.hex.lower() == THEME.panel