diff options
| author | Ćukasz Langa <lukasz@langa.pl> | 2023-04-24 22:17:02 (GMT) |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-24 22:17:02 (GMT) |
| commit | 22bed58e531ce780d91f3364c5ace98fad28c2e8 (patch) | |
| tree | 09719c749f02573ed8f47cb5f682651596f008e8 /Lib/test/support/testcase.py | |
| parent | 19e4f757de8c7cf2b4b9b4cbb32e376d0e50d2d4 (diff) | |
| download | cpython-22bed58e531ce780d91f3364c5ace98fad28c2e8.zip cpython-22bed58e531ce780d91f3364c5ace98fad28c2e8.tar.gz cpython-22bed58e531ce780d91f3364c5ace98fad28c2e8.tar.bz2 | |
gh-103791: Make contextlib.suppress also act on exceptions within an ExceptionGroup (#103792)
Co-authored-by: Irit Katriel <1055913+iritkatriel@users.noreply.github.com>
Diffstat (limited to 'Lib/test/support/testcase.py')
| -rw-r--r-- | Lib/test/support/testcase.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/Lib/test/support/testcase.py b/Lib/test/support/testcase.py new file mode 100644 index 0000000..1e4363b --- /dev/null +++ b/Lib/test/support/testcase.py @@ -0,0 +1,25 @@ +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) |
