|
13 | 13 | # limitations under the License.
|
14 | 14 |
|
15 | 15 | """Unit test for repo_logging module."""
|
| 16 | + |
| 17 | +import contextlib |
| 18 | +import io |
| 19 | +import logging |
16 | 20 | import unittest
|
17 | 21 | from unittest import mock
|
18 | 22 |
|
| 23 | +from color import SetDefaultColoring |
19 | 24 | from error import RepoExitError
|
20 | 25 | from repo_logging import RepoLogger
|
21 | 26 |
|
@@ -62,3 +67,35 @@ def test_log_aggregated_errors_logs_single_error(self, mock_error):
|
62 | 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 | + ) |
0 commit comments