"""Tests for debug helpers.""" from __future__ import annotations import io from rich.console import Console from rp.debug import DEBUG_ENV_VAR, env_debug_enabled, log_debug, make_debug_logger class TestEnvDebugEnabled: """Environment-based debug mode toggles.""" def test_disabled_by_default(self) -> None: assert env_debug_enabled({}) is False def test_false_like_values_disable_debug(self) -> None: for value in ["", "0", "false", "no", "off"]: assert env_debug_enabled({DEBUG_ENV_VAR: value}) is False def test_false_like_values_are_trimmed_and_case_insensitive(self) -> None: for value in [" False ", "\tNO\n", " Off "]: assert env_debug_enabled({DEBUG_ENV_VAR: value}) is False def test_truthy_values_enable_debug(self) -> None: assert env_debug_enabled({DEBUG_ENV_VAR: "1"}) is True assert env_debug_enabled({DEBUG_ENV_VAR: "true"}) is True def test_truthy_values_are_trimmed_and_case_insensitive(self) -> None: for value in [" TRUE ", " Yes ", "\ton\n"]: assert env_debug_enabled({DEBUG_ENV_VAR: value}) is True class TestMakeDebugLogger: """Console-backed debug logger output.""" def test_logs_visible_prefix(self) -> None: stream = io.StringIO() console = Console(file=stream, force_terminal=False) logger = make_debug_logger(console, enabled=True) assert logger is not None logger("hello") assert stream.getvalue() == "[rp debug] hello\n" class TestLogDebug: """Nil-safe debug logger forwarding.""" def test_noop_when_logger_is_none(self) -> None: log_debug(None, "hello") def test_forwards_to_logger(self) -> None: messages: list[str] = [] log_debug(messages.append, "hello") assert messages == ["hello"]