from os import terminal_size from rich.console import Console from rich.tree import Tree from browser_cli.commands import rendering def test_shorten_uses_ellipsis(): assert rendering.shorten("abcdef", 4) == "abc…" assert rendering.shorten("abc", 4) == "abc" def test_terminal_width_prefers_shell_width_when_rich_is_redirected(monkeypatch): monkeypatch.setattr(rendering.shutil, "get_terminal_size", lambda fallback: terminal_size((140, 20))) assert rendering.terminal_width(Console(width=80)) == 140 def test_tab_tree_label_is_reusable_no_wrap_text(): tab = type("Tab", (), {"id": 1, "title": "abcdef", "active": True, "url": "https://example.com"})() label = rendering.tab_tree_label(tab, title_limit=4, show_urls=True, url_limit=12) assert label.no_wrap is True assert label.overflow == "ellipsis" assert "abc…" in label.plain assert "https://exa…" in label.plain def test_print_tree_uses_detected_width(monkeypatch): widths = [] class CapturingConsole(Console): def __init__(self, *args, **kwargs): widths.append(kwargs.get("width")) super().__init__(*args, **kwargs) monkeypatch.setattr(rendering, "Console", CapturingConsole) monkeypatch.setattr(rendering, "terminal_width", lambda console=None: 132) rendering.print_tree(Tree("Root")) assert widths == [132]