test: add test suite for player, api and widgets
This commit is contained in:
1 parent
237de2efe9
commit
8eb22ea52c
11 files changed
+1069
No files matched your search
@@ -0,0 +1,70 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from somafm_tui.app import SomaFMApp
|
||||
from somafm_tui.widgets.header import HeaderBar
|
||||
from somafm_tui.widgets.search import SearchInput
|
||||
from somafm_tui.widgets.spectrum import SpectrumPanel
|
||||
from somafm_tui.widgets.stage import StagePanel
|
||||
from somafm_tui.widgets.station_list import StationList
|
||||
from somafm_tui.widgets.status import StatusBar
|
||||
|
||||
PACKAGE = Path(__file__).resolve().parents[1] / "somafm_tui"
|
||||
|
||||
|
||||
def test_no_rgb_colors_in_source() -> None:
|
||||
"""The app must follow the terminal palette, not force its own RGB colours."""
|
||||
pattern = re.compile(r"#[0-9a-fA-F]{6}")
|
||||
offenders = [
|
||||
str(path.relative_to(PACKAGE))
|
||||
for path in PACKAGE.rglob("*")
|
||||
if path.suffix in {".py", ".tcss"} and pattern.search(path.read_text())
|
||||
]
|
||||
assert not offenders, offenders
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_backgrounds_use_terminal_default_and_borders_are_ansi() -> None:
|
||||
app = SomaFMApp(autoplay=False, offline=True, audio=False)
|
||||
async with app.run_test(size=(100, 30)) as pilot:
|
||||
await pilot.pause()
|
||||
|
||||
assert app.theme == "terminal"
|
||||
assert app.ansi_color is True
|
||||
assert app.native_ansi_color is True
|
||||
assert app.screen.styles.background.ansi == -1 # SGR 49, terminal default
|
||||
assert app.screen.styles.color.ansi == -1
|
||||
for widget_type in (
|
||||
HeaderBar,
|
||||
SearchInput,
|
||||
StationList,
|
||||
StagePanel,
|
||||
SpectrumPanel,
|
||||
StatusBar,
|
||||
):
|
||||
widget = app.query_one(widget_type)
|
||||
assert widget.styles.background.ansi == -1, widget_type
|
||||
assert widget.styles.color.ansi == -1, widget_type
|
||||
|
||||
border = app.query_one(StationList).styles.border.top
|
||||
assert border[1].ansi is not None # an ANSI palette index, not RGB
|
||||
|
||||
await pilot.press("slash")
|
||||
await pilot.pause()
|
||||
search = app.query_one(SearchInput)
|
||||
assert search.styles.background.ansi == -1
|
||||
assert search.styles.background_tint.a == 0
|
||||
assert search.styles.color.ansi == -1 # ansi_default
|
||||
await pilot.press("escape")
|
||||
await pilot.pause()
|
||||
|
||||
await pilot.press("question_mark")
|
||||
await pilot.pause()
|
||||
assert app.screen.styles.background.ansi == -1
|
||||
assert app.screen.query_one("#help").styles.background.ansi == -1
|
||||
await pilot.press("x")
|
||||
await pilot.pause()
|
||||
Reference in new issue
Block a user