summaryrefslogtreecommitdiffstats
path: root/Lib/test/support/testcase.py
diff options
context:
space:
mode:
authorƁukasz Langa <lukasz@langa.pl>2023-04-24 22:17:02 (GMT)
committerGitHub <noreply@github.com>2023-04-24 22:17:02 (GMT)
commit22bed58e531ce780d91f3364c5ace98fad28c2e8 (patch)
tree09719c749f02573ed8f47cb5f682651596f008e8 /Lib/test/support/testcase.py
parent19e4f757de8c7cf2b4b9b4cbb32e376d0e50d2d4 (diff)
downloadcpython-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.py25
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)