Skip to content

Commit

Permalink
[3.12] gh-106300: Improve assertRaises(Exception) usages in tests (G…
Browse files Browse the repository at this point in the history
…H-106302) (GH-106534)

gh-106300: Improve `assertRaises(Exception)` usages in tests (GH-106302)
(cherry picked from commit 6e6a4cd)

Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
  • Loading branch information
miss-islington and sobolevn committed Jul 7, 2023
1 parent 7e883d7 commit 2ade2fc
Show file tree
Hide file tree
Showing 7 changed files with 20 additions and 12 deletions.
5 changes: 3 additions & 2 deletions Lib/test/test_abc.py
Expand Up @@ -448,15 +448,16 @@ class S(metaclass=abc_ABCMeta):

# Also check that issubclass() propagates exceptions raised by
# __subclasses__.
class CustomError(Exception): ...
exc_msg = "exception from __subclasses__"

def raise_exc():
raise Exception(exc_msg)
raise CustomError(exc_msg)

class S(metaclass=abc_ABCMeta):
__subclasses__ = raise_exc

with self.assertRaisesRegex(Exception, exc_msg):
with self.assertRaisesRegex(CustomError, exc_msg):
issubclass(int, S)

def test_subclasshook(self):
Expand Down
5 changes: 3 additions & 2 deletions Lib/test/test_codecs.py
Expand Up @@ -2822,14 +2822,15 @@ def test_binary_to_text_denylists_text_transforms(self):
def test_custom_zlib_error_is_noted(self):
# Check zlib codec gives a good error for malformed input
msg = "decoding with 'zlib_codec' codec failed"
with self.assertRaises(Exception) as failure:
with self.assertRaises(zlib.error) as failure:
codecs.decode(b"hello", "zlib_codec")
self.assertEqual(msg, failure.exception.__notes__[0])

def test_custom_hex_error_is_noted(self):
# Check hex codec gives a good error for malformed input
import binascii
msg = "decoding with 'hex_codec' codec failed"
with self.assertRaises(Exception) as failure:
with self.assertRaises(binascii.Error) as failure:
codecs.decode(b"hello", "hex_codec")
self.assertEqual(msg, failure.exception.__notes__[0])

Expand Down
6 changes: 4 additions & 2 deletions Lib/test/test_email/test_message.py
Expand Up @@ -696,14 +696,16 @@ def subtype_as_add(self, method, subtype, outcome):
self.assertIsNone(part['Content-Disposition'])

class _TestSetRaisingContentManager:
class CustomError(Exception):
pass
def set_content(self, msg, content, *args, **kw):
raise Exception('test')
raise self.CustomError('test')

def test_default_content_manager_for_add_comes_from_policy(self):
cm = self._TestSetRaisingContentManager()
m = self.message(policy=self.policy.clone(content_manager=cm))
for method in ('add_related', 'add_alternative', 'add_attachment'):
with self.assertRaises(Exception) as ar:
with self.assertRaises(self._TestSetRaisingContentManager.CustomError) as ar:
getattr(m, method)('')
self.assertEqual(str(ar.exception), 'test')

Expand Down
2 changes: 1 addition & 1 deletion Lib/test/test_importlib/test_main.py
Expand Up @@ -69,7 +69,7 @@ def test_abc_enforced(self):
dict(name=''),
)
def test_invalid_inputs_to_from_name(self, name):
with self.assertRaises(Exception):
with self.assertRaises(ValueError):
Distribution.from_name(name)


Expand Down
7 changes: 5 additions & 2 deletions Lib/test/test_mailbox.py
Expand Up @@ -116,10 +116,13 @@ def test_add_nonascii_string_header_raises(self):
self.assertMailboxEmpty()

def test_add_that_raises_leaves_mailbox_empty(self):
class CustomError(Exception): ...
exc_msg = "a fake error"

def raiser(*args, **kw):
raise Exception("a fake error")
raise CustomError(exc_msg)
support.patch(self, email.generator.BytesGenerator, 'flatten', raiser)
with self.assertRaises(Exception):
with self.assertRaisesRegex(CustomError, exc_msg):
self._box.add(email.message_from_string("From: Alphöso"))
self.assertEqual(len(self._box), 0)
self._box.close()
Expand Down
2 changes: 1 addition & 1 deletion Lib/test/test_shutil.py
Expand Up @@ -2739,7 +2739,7 @@ def test_regular_copy(self):
def test_same_file(self):
self.addCleanup(self.reset)
with self.get_files() as (src, dst):
with self.assertRaises(Exception):
with self.assertRaises((OSError, _GiveupOnFastCopy)):
self.zerocopy_fun(src, src)
# Make sure src file is not corrupted.
self.assertEqual(read_file(TESTFN, binary=True), self.FILEDATA)
Expand Down
5 changes: 3 additions & 2 deletions Lib/test/test_unittest/testmock/testasync.py
Expand Up @@ -436,9 +436,10 @@ async def addition(self, var): pass
self.assertEqual(output, 10)

async def test_add_side_effect_exception(self):
class CustomError(Exception): pass
async def addition(var): pass
mock = AsyncMock(addition, side_effect=Exception('err'))
with self.assertRaises(Exception):
mock = AsyncMock(addition, side_effect=CustomError('side-effect'))
with self.assertRaisesRegex(CustomError, 'side-effect'):
await mock(5)

async def test_add_side_effect_coroutine(self):
Expand Down

0 comments on commit 2ade2fc

Please sign in to comment.