(self)
| 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): |
nothing calls this directly
no test coverage detected