diff options
| -rw-r--r-- | repo_logging.py | 4 | ||||
| -rw-r--r-- | tests/test_repo_logging.py | 37 |
2 files changed, 39 insertions, 2 deletions
diff --git a/repo_logging.py b/repo_logging.py index 20a53429..639382a2 100644 --- a/repo_logging.py +++ b/repo_logging.py | |||
| @@ -39,8 +39,8 @@ class _LogColoring(Coloring): | |||
| 39 | 39 | ||
| 40 | def __init__(self, config): | 40 | def __init__(self, config): |
| 41 | super().__init__(config, "logs") | 41 | super().__init__(config, "logs") |
| 42 | self.error = self.colorer("error", fg="red") | 42 | self.error = self.nofmt_colorer("error", fg="red") |
| 43 | self.warning = self.colorer("warn", fg="yellow") | 43 | self.warning = self.nofmt_colorer("warn", fg="yellow") |
| 44 | self.levelMap = { | 44 | self.levelMap = { |
| 45 | "WARNING": self.warning, | 45 | "WARNING": self.warning, |
| 46 | "ERROR": self.error, | 46 | "ERROR": self.error, |
diff --git a/tests/test_repo_logging.py b/tests/test_repo_logging.py index 0f6a3355..e072039e 100644 --- a/tests/test_repo_logging.py +++ b/tests/test_repo_logging.py | |||
| @@ -13,9 +13,14 @@ | |||
| 13 | # limitations under the License. | 13 | # limitations under the License. |
| 14 | 14 | ||
| 15 | """Unit test for repo_logging module.""" | 15 | """Unit test for repo_logging module.""" |
| 16 | |||
| 17 | import contextlib | ||
| 18 | import io | ||
| 19 | import logging | ||
| 16 | import unittest | 20 | import unittest |
| 17 | from unittest import mock | 21 | from unittest import mock |
| 18 | 22 | ||
| 23 | from color import SetDefaultColoring | ||
| 19 | from error import RepoExitError | 24 | from error import RepoExitError |
| 20 | from repo_logging import RepoLogger | 25 | from repo_logging import RepoLogger |
| 21 | 26 | ||
| @@ -62,3 +67,35 @@ class TestRepoLogger(unittest.TestCase): | |||
| 62 | mock.call("Repo command failed: %s", "RepoExitError"), | 67 | mock.call("Repo command failed: %s", "RepoExitError"), |
| 63 | ] | 68 | ] |
| 64 | ) | 69 | ) |
| 70 | |||
| 71 | def test_log_with_format_string(self): | ||
| 72 | """Test different log levels with format strings.""" | ||
| 73 | |||
| 74 | # Set color output to "always" for consistent test results. | ||
| 75 | # This ensures the logger's behavior is uniform across different | ||
| 76 | # environments and git configurations. | ||
| 77 | SetDefaultColoring("always") | ||
| 78 | |||
| 79 | # Regex pattern to match optional ANSI color codes. | ||
| 80 | # \033 - Escape character | ||
| 81 | # \[ - Opening square bracket | ||
| 82 | # [0-9;]* - Zero or more digits or semicolons | ||
| 83 | # m - Ending 'm' character | ||
| 84 | # ? - Makes the entire group optional | ||
| 85 | opt_color = r"(\033\[[0-9;]*m)?" | ||
| 86 | |||
| 87 | for level in (logging.INFO, logging.WARN, logging.ERROR): | ||
| 88 | name = logging.getLevelName(level) | ||
| 89 | |||
| 90 | with self.subTest(level=level, name=name): | ||
| 91 | output = io.StringIO() | ||
| 92 | |||
| 93 | with contextlib.redirect_stderr(output): | ||
| 94 | logger = RepoLogger(__name__) | ||
| 95 | logger.log(level, "%s", "100% pass") | ||
| 96 | |||
| 97 | self.assertRegex( | ||
| 98 | output.getvalue().strip(), | ||
| 99 | f"^{opt_color}100% pass{opt_color}$", | ||
| 100 | f"failed for level {name}", | ||
| 101 | ) | ||
