gh-134565: Use ExceptionGroup to handle multiple errors in unittest.doModuleCleanups() (GH-134566)

This commit is contained in:
Serhiy Storchaka 2025-05-23 21:07:49 +03:00 committed by GitHub
parent 77eade39f9
commit 393773ae87
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 101 additions and 15 deletions

View file

@ -223,6 +223,11 @@ class TestSuite(BaseTestSuite):
if result._moduleSetUpFailed:
try:
case.doModuleCleanups()
except ExceptionGroup as eg:
for e in eg.exceptions:
self._createClassOrModuleLevelException(result, e,
'setUpModule',
currentModule)
except Exception as e:
self._createClassOrModuleLevelException(result, e,
'setUpModule',
@ -235,15 +240,15 @@ class TestSuite(BaseTestSuite):
errorName = f'{method_name} ({parent})'
self._addClassOrModuleLevelException(result, exc, errorName, info)
def _addClassOrModuleLevelException(self, result, exception, errorName,
def _addClassOrModuleLevelException(self, result, exc, errorName,
info=None):
error = _ErrorHolder(errorName)
addSkip = getattr(result, 'addSkip', None)
if addSkip is not None and isinstance(exception, case.SkipTest):
addSkip(error, str(exception))
if addSkip is not None and isinstance(exc, case.SkipTest):
addSkip(error, str(exc))
else:
if not info:
result.addError(error, sys.exc_info())
result.addError(error, (type(exc), exc, exc.__traceback__))
else:
result.addError(error, info)
@ -273,6 +278,13 @@ class TestSuite(BaseTestSuite):
previousModule)
try:
case.doModuleCleanups()
except ExceptionGroup as eg:
if isinstance(result, _DebugResult):
raise
for e in eg.exceptions:
self._createClassOrModuleLevelException(result, e,
'tearDownModule',
previousModule)
except Exception as e:
if isinstance(result, _DebugResult):
raise