diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_repo_logging.py | 37 |
1 files changed, 37 insertions, 0 deletions
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 | ) | ||
