[Python-checkins] Increase test coverage of Objects/exceptions.c (GH-94674)
iritkatriel
webhook-mailer at python.org
Fri Jul 8 14:01:57 EDT 2022
https://github.com/python/cpython/commit/4bed0db7c222f8df1b4e31107c0305214caf3f56
commit: 4bed0db7c222f8df1b4e31107c0305214caf3f56
branch: main
author: Irit Katriel <1055913+iritkatriel at users.noreply.github.com>
committer: iritkatriel <1055913+iritkatriel at users.noreply.github.com>
date: 2022-07-08T19:01:47+01:00
summary:
Increase test coverage of Objects/exceptions.c (GH-94674)
files:
M Lib/test/test_exception_group.py
M Lib/test/test_exceptions.py
diff --git a/Lib/test/test_exception_group.py b/Lib/test/test_exception_group.py
index 3ea5dff5c379a..aa28e16bedfa6 100644
--- a/Lib/test/test_exception_group.py
+++ b/Lib/test/test_exception_group.py
@@ -758,6 +758,18 @@ def test_split_does_not_copy_non_sequence_notes(self):
self.assertFalse(hasattr(match, '__notes__'))
self.assertFalse(hasattr(rest, '__notes__'))
+ def test_drive_invalid_return_value(self):
+ class MyEg(ExceptionGroup):
+ def derive(self, excs):
+ return 42
+
+ eg = MyEg('eg', [TypeError(1), ValueError(2)])
+ msg = "derive must return an instance of BaseExceptionGroup"
+ with self.assertRaisesRegex(TypeError, msg):
+ eg.split(TypeError)
+ with self.assertRaisesRegex(TypeError, msg):
+ eg.subgroup(TypeError)
+
class NestedExceptionGroupSubclassSplitTest(ExceptionGroupSplitTestBase):
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py
index d91308572b27c..f8b05128e3f8b 100644
--- a/Lib/test/test_exceptions.py
+++ b/Lib/test/test_exceptions.py
@@ -546,6 +546,29 @@ def testAttributes(self):
'pickled "%r", attribute "%s' %
(e, checkArgName))
+ def test_setstate(self):
+ e = Exception(42)
+ e.blah = 53
+ self.assertEqual(e.args, (42,))
+ self.assertEqual(e.blah, 53)
+ self.assertRaises(AttributeError, getattr, e, 'a')
+ self.assertRaises(AttributeError, getattr, e, 'b')
+ e.__setstate__({'a': 1 , 'b': 2})
+ self.assertEqual(e.args, (42,))
+ self.assertEqual(e.blah, 53)
+ self.assertEqual(e.a, 1)
+ self.assertEqual(e.b, 2)
+ e.__setstate__({'a': 11, 'args': (1,2,3), 'blah': 35})
+ self.assertEqual(e.args, (1,2,3))
+ self.assertEqual(e.blah, 35)
+ self.assertEqual(e.a, 11)
+ self.assertEqual(e.b, 2)
+
+ def test_invalid_setstate(self):
+ e = Exception(42)
+ with self.assertRaisesRegex(TypeError, "state is not a dictionary"):
+ e.__setstate__(42)
+
def test_notes(self):
for e in [BaseException(1), Exception(2), ValueError(3)]:
with self.subTest(e=e):
@@ -602,11 +625,30 @@ def testInvalidTraceback(self):
else:
self.fail("No exception raised")
- def testInvalidAttrs(self):
- self.assertRaises(TypeError, setattr, Exception(), '__cause__', 1)
- self.assertRaises(TypeError, delattr, Exception(), '__cause__')
- self.assertRaises(TypeError, setattr, Exception(), '__context__', 1)
- self.assertRaises(TypeError, delattr, Exception(), '__context__')
+ def test_invalid_setattr(self):
+ TE = TypeError
+ exc = Exception()
+ msg = "'int' object is not iterable"
+ self.assertRaisesRegex(TE, msg, setattr, exc, 'args', 1)
+ msg = "__traceback__ must be a traceback or None"
+ self.assertRaisesRegex(TE, msg, setattr, exc, '__traceback__', 1)
+ msg = "exception cause must be None or derive from BaseException"
+ self.assertRaisesRegex(TE, msg, setattr, exc, '__cause__', 1)
+ msg = "exception context must be None or derive from BaseException"
+ self.assertRaisesRegex(TE, msg, setattr, exc, '__context__', 1)
+
+ def test_invalid_delattr(self):
+ TE = TypeError
+ try:
+ raise IndexError(4)
+ except Exception as e:
+ exc = e
+
+ msg = "may not be deleted"
+ self.assertRaisesRegex(TE, msg, delattr, exc, 'args')
+ self.assertRaisesRegex(TE, msg, delattr, exc, '__traceback__')
+ self.assertRaisesRegex(TE, msg, delattr, exc, '__cause__')
+ self.assertRaisesRegex(TE, msg, delattr, exc, '__context__')
def testNoneClearsTracebackAttr(self):
try:
More information about the Python-checkins
mailing list