test(ci): ANSI-strip help/error asserts in test_v0718 (FORCE_COLOR-robust)

CI (FORCE_COLOR) makes Rich/Typer split flag tokens at colorized hyphens
(--auto-download -> -auto -download) and auto-highlight `=` in error text
(name=path), so contiguous-substring asserts fail. Add the _clean_help helper
(strip ANSI + all whitespace, matching the v0.71.1 / test_v0717 pattern) and
apply it to the sae-diff / train / sleeper / interference --help asserts plus
the bad-adapter-spec name=path error assert. Reproduced + verified with
FORCE_COLOR=1 locally. No source change; test count unchanged.
This commit is contained in:
Alpamys 2026-06-03 15:19:53 +05:00
parent 823456c1a5
commit eb7655f81e
1 changed files with 18 additions and 5 deletions

View File

@ -18,6 +18,7 @@ from __future__ import annotations
import json
import os
import re
import sys
import types
@ -28,6 +29,18 @@ from typer.testing import CliRunner
runner = CliRunner()
def _clean_help(text: str) -> str:
"""Strip ANSI + remove all whitespace so flag substrings survive CI color.
Under CI (``FORCE_COLOR``) Rich/Typer renders a long flag like
``--auto-download`` with ANSI escapes between styled segments (the internal
hyphen is colorized separately) AND may line-wrap at the hyphen. Stripping
the escapes and removing every whitespace char concatenates the literal
flag back together (matches the v0.71.1 / test_v0717 pattern).
"""
return re.sub(r"\s+", "", re.sub(r"\x1b\[[0-9;]*m", "", text))
# ===========================================================================
# Tiny real-torch harness for activation capture (#215 / #217 / #219).
# ===========================================================================
@ -504,7 +517,7 @@ class TestSleeperCli215:
res = runner.invoke(app, ["sleeper", "--help"])
assert res.exit_code == 0
clean = res.output.replace("\n", " ")
clean = _clean_help(res.output)
assert "weights" in clean
@ -675,7 +688,7 @@ class TestSaeDiffCli216:
res = runner.invoke(app, ["sae-diff", "--help"])
assert res.exit_code == 0
assert "auto-download" in res.output.replace("\n", " ")
assert "auto-download" in _clean_help(res.output)
def test_auto_download_unknown_repo(self, tmp_path, monkeypatch) -> None:
monkeypatch.chdir(tmp_path)
@ -1004,7 +1017,7 @@ class TestInterferenceMeasureCli:
res = runner.invoke(app, ["interference", "--help"])
assert res.exit_code == 0
clean = res.output.replace("\n", " ")
clean = _clean_help(res.output)
assert "measure" in clean
def test_measure_requires_base_model(self, tmp_path, monkeypatch) -> None:
@ -1032,7 +1045,7 @@ class TestInterferenceMeasureCli:
"--adapter", "nope"],
)
assert res.exit_code == 2
assert "name=path" in res.output
assert "name=path" in _clean_help(res.output)
def test_measure_missing_suite(self, tmp_path, monkeypatch) -> None:
monkeypatch.chdir(tmp_path)
@ -1278,7 +1291,7 @@ class TestTrainCaptureCli:
res = runner.invoke(app, ["train", "--help"])
assert res.exit_code == 0
clean = res.output.replace("\n", " ")
clean = _clean_help(res.output)
assert "capture-activations" in clean
assert "capture-prompts" in clean