Eleven files defined the same _plain (plus test_chat's _strip_ansi and test_timemachine's renderable flavour), and two of the copies had already diverged into join-without-strip. tests/conftest.plain is now the single strip-and-join reader — a list of lines or a bare string — and every file imports it; the local variants keep their names so call sites stay put (housekeeping H-003). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
45 lines
1.7 KiB
Python
45 lines
1.7 KiB
Python
"""Shared fixtures and helpers: plain-text screen reading, and pinned path rendering.
|
|
|
|
:func:`plain` is THE way a test reads a rendered screen — every screen test needs the
|
|
same move (strip the ANSI colour escapes, join the rendered lines) before it can assert
|
|
on content, and each file re-deriving it is how the copies drift.
|
|
|
|
The powerline verdict is environmental — the suite may run inside VS Code or Windows
|
|
Terminal (both chip-capable) or a bare CI shell (not) — and screen assertions must
|
|
not change with the developer's glass. ``MESHTERM_POWERLINE=0`` is the supported pin;
|
|
the cached verdict is cleared around each test so no ordering leaks it. Powerline-
|
|
specific tests pass explicit modes or monkeypatch the widget's own switch.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import re
|
|
from typing import Iterable, Iterator, Union
|
|
|
|
import pytest
|
|
|
|
from meshterm.ui.termfont import powerline_support
|
|
|
|
#: ANSI SGR escapes — the colour runs a rendered line carries between its characters.
|
|
_ANSI = re.compile(r"\x1b\[[0-9;]*m")
|
|
|
|
|
|
def plain(rendered: Union[str, Iterable[str]]) -> str:
|
|
"""The plain-text form of rendered screen output, for content assertions.
|
|
|
|
Takes what a render handed back — a list of ANSI lines (joined with newlines) or a
|
|
single already-joined string — and strips the colour escapes, so assertions read
|
|
the screen the way a viewer does.
|
|
"""
|
|
if not isinstance(rendered, str):
|
|
rendered = "\n".join(rendered)
|
|
return _ANSI.sub("", rendered)
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def _plain_path_rendering(monkeypatch: pytest.MonkeyPatch) -> Iterator[None]:
|
|
monkeypatch.setenv("MESHTERM_POWERLINE", "0")
|
|
powerline_support.cache_clear()
|
|
yield
|
|
powerline_support.cache_clear()
|