MCPcopy Index your code
hub / github.com/python/cpython / test_issubclass_bad_arguments

Method test_issubclass_bad_arguments

Lib/test/test_abc.py:414–461  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

412 self.assertIsInstance(42, (A,))
413
414 def test_issubclass_bad_arguments(self):
415 class A(metaclass=abc_ABCMeta):
416 pass
417
418 with self.assertRaises(TypeError):
419 issubclass({}, A) # unhashable
420
421 with self.assertRaises(TypeError):
422 issubclass(42, A) # No __mro__
423
424 # Python version supports any iterable as __mro__.
425 # But it's implementation detail and don't emulate it in C version.
426 class C:
427 __mro__ = 42 # __mro__ is not tuple
428
429 with self.assertRaises(TypeError):
430 issubclass(C(), A)
431
432 # bpo-34441: Check that issubclass() doesn't crash on bogus
433 # classes.
434 bogus_subclasses = [
435 None,
436 lambda x: [],
437 lambda: 42,
438 lambda: [42],
439 ]
440
441 for i, func in enumerate(bogus_subclasses):
442 class S(metaclass=abc_ABCMeta):
443 __subclasses__ = func
444
445 with self.subTest(i=i):
446 with self.assertRaises(TypeError):
447 issubclass(int, S)
448
449 # Also check that issubclass() propagates exceptions raised by
450 # __subclasses__.
451 class CustomError(Exception): ...
452 exc_msg = "exception from __subclasses__"
453
454 def raise_exc():
455 raise CustomError(exc_msg)
456
457 class S(metaclass=abc_ABCMeta):
458 __subclasses__ = raise_exc
459
460 with self.assertRaisesRegex(CustomError, exc_msg):
461 issubclass(int, S)
462
463 def test_subclasshook(self):
464 class A(metaclass=abc.ABCMeta):

Callers

nothing calls this directly

Calls 5

enumerateFunction · 0.85
assertRaisesRegexMethod · 0.80
CClass · 0.70
assertRaisesMethod · 0.45
subTestMethod · 0.45

Tested by

no test coverage detected