From f647ef0d31c560ac557ee41c6899db811fde6397 Mon Sep 17 00:00:00 2001 From: olliesilvester Date: Thu, 18 Apr 2024 15:55:50 +0000 Subject: [PATCH] proper tests for logs with colour --- src/ophyd_async/core/log.py | 4 ++-- tests/core/test_log.py | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/ophyd_async/core/log.py b/src/ophyd_async/core/log.py index 9fb46b69e4..9ca452c9d9 100644 --- a/src/ophyd_async/core/log.py +++ b/src/ophyd_async/core/log.py @@ -1,4 +1,4 @@ -# The LogFormatter is adapted light from tornado, which is licensed under +# The LogFormatter is adapted light from tornado, which is licensed unders # Apache 2.0. See other_licenses/ in the repository directory. import logging @@ -106,7 +106,7 @@ def __init__( self._colors = {} if color and _stderr_supports_color(): - if curses is not None: + if "curses" in sys.modules: # The curses module has some str/bytes confusion in # python3. Until version 3.2.3, most methods return # bytes, but only accept strings. In addition, we want to diff --git a/tests/core/test_log.py b/tests/core/test_log.py index 22ad00eafc..14cc7aeb11 100644 --- a/tests/core/test_log.py +++ b/tests/core/test_log.py @@ -42,6 +42,29 @@ def test_logger_adapter_ophyd_async_device(): assert log_buffer.getvalue().endswith("[test_device] here is a warning\n") +def test_formatter_with_colour(): + log_buffer = io.StringIO() + log_stream = logging.StreamHandler(stream=log_buffer) + with ( + patch("ophyd_async.core.log._stderr_supports_color", return_value=True), + patch("curses.tigetstr", return_value=bytes(4)), + patch("curses.tparm", return_value=bytes(4)), + ): + log_stream.setFormatter(log.LogFormatter()) + + +def test_formatter_with_colour_no_curses(monkeypatch): + log_buffer = io.StringIO() + log_stream = logging.StreamHandler(stream=log_buffer) + with ( + patch("ophyd_async.core.log._stderr_supports_color", return_value=True), + patch("curses.tigetstr", return_value=bytes(4)), + patch("curses.tparm", return_value=bytes(4)), + ): + monkeypatch.delitem(sys.modules, "curses", raising=False) + log_stream.setFormatter(log.LogFormatter()) + + def test_stderr_supports_color_not_atty(): with patch("sys.stderr.isatty", return_value=False): assert not _stderr_supports_color()