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