|
1 | 1 | import os
|
2 | 2 | import subprocess
|
3 | 3 | import sys
|
| 4 | +import types |
4 | 5 | from functools import partial
|
5 | 6 |
|
6 | 7 | import pytest
|
@@ -182,3 +183,59 @@ def test_unknown_args_before_double_dash_raises(mocker: MockFixture):
|
182 | 183 | assert "Invalid commitizen arguments were found before -- separator" in str(
|
183 | 184 | excinfo.value
|
184 | 185 | )
|
| 186 | + |
| 187 | + |
| 188 | +def test_commitizen_excepthook_non_commitizen_exception(mocker: MockFixture): |
| 189 | + """Test that commitizen_excepthook delegates to original_excepthook for non-CommitizenException.""" |
| 190 | + # Mock the original excepthook |
| 191 | + mock_original_excepthook = mocker.Mock() |
| 192 | + mocker.patch("commitizen.cli.original_excepthook", mock_original_excepthook) |
| 193 | + |
| 194 | + # Create a regular exception |
| 195 | + test_exception = ValueError("test error") |
| 196 | + |
| 197 | + # Call commitizen_excepthook with the regular exception |
| 198 | + cli.commitizen_excepthook(ValueError, test_exception, None) |
| 199 | + |
| 200 | + # Verify original_excepthook was called with correct arguments |
| 201 | + mock_original_excepthook.assert_called_once_with(ValueError, test_exception, None) |
| 202 | + |
| 203 | + |
| 204 | +def test_commitizen_excepthook_non_commitizen_exception_with_traceback( |
| 205 | + mocker: MockFixture, |
| 206 | +): |
| 207 | + """Test that commitizen_excepthook handles traceback correctly for non-CommitizenException.""" |
| 208 | + # Mock the original excepthook |
| 209 | + mock_original_excepthook = mocker.Mock() |
| 210 | + mocker.patch("commitizen.cli.original_excepthook", mock_original_excepthook) |
| 211 | + |
| 212 | + # Create a regular exception with a traceback |
| 213 | + test_exception = ValueError("test error") |
| 214 | + test_traceback = mocker.Mock(spec=types.TracebackType) |
| 215 | + |
| 216 | + # Call commitizen_excepthook with the regular exception and traceback |
| 217 | + cli.commitizen_excepthook(ValueError, test_exception, test_traceback) |
| 218 | + |
| 219 | + # Verify original_excepthook was called with correct arguments including traceback |
| 220 | + mock_original_excepthook.assert_called_once_with( |
| 221 | + ValueError, test_exception, test_traceback |
| 222 | + ) |
| 223 | + |
| 224 | + |
| 225 | +def test_commitizen_excepthook_non_commitizen_exception_with_invalid_traceback( |
| 226 | + mocker: MockFixture, |
| 227 | +): |
| 228 | + """Test that commitizen_excepthook handles invalid traceback correctly for non-CommitizenException.""" |
| 229 | + # Mock the original excepthook |
| 230 | + mock_original_excepthook = mocker.Mock() |
| 231 | + mocker.patch("commitizen.cli.original_excepthook", mock_original_excepthook) |
| 232 | + |
| 233 | + # Create a regular exception with an invalid traceback |
| 234 | + test_exception = ValueError("test error") |
| 235 | + test_traceback = mocker.Mock() # Not a TracebackType |
| 236 | + |
| 237 | + # Call commitizen_excepthook with the regular exception and invalid traceback |
| 238 | + cli.commitizen_excepthook(ValueError, test_exception, test_traceback) |
| 239 | + |
| 240 | + # Verify original_excepthook was called with None as traceback |
| 241 | + mock_original_excepthook.assert_called_once_with(ValueError, test_exception, None) |
0 commit comments