contextlib2/test/support/testcase.py
Alyssa Coghlan f64cf04df8
Sync with CPython 3.12.3 (#60)
* generated new diff files covering this sync
* added some helper scripts for the sync process
* fixed RTD theme regression (due to RTD changes since the last release)

Closes #43
2024-05-23 17:55:20 +10:00

33 lines
1.3 KiB
Python

"""Enough of the test.support.testcase APIs to run the contextlib test suite"""
from . import cl2_have_exception_groups
if not cl2_have_exception_groups:
# Placeholder to let the isinstance check below run on older versions
class ExceptionGroup(Exception):
pass
class ExceptionIsLikeMixin:
def assertExceptionIsLike(self, exc, template):
"""
Passes when the provided `exc` matches the structure of `template`.
Individual exceptions don't have to be the same objects or even pass
an equality test: they only need to be the same type and contain equal
`exc_obj.args`.
"""
if exc is None and template is None:
return
if template is None:
self.fail(f"unexpected exception: {exc}")
if exc is None:
self.fail(f"expected an exception like {template!r}, got None")
if not isinstance(exc, ExceptionGroup):
self.assertEqual(exc.__class__, template.__class__)
self.assertEqual(exc.args[0], template.args[0])
else:
self.assertEqual(exc.message, template.message)
self.assertEqual(len(exc.exceptions), len(template.exceptions))
for e, t in zip(exc.exceptions, template.exceptions):
self.assertExceptionIsLike(e, t)