|
6 | 6 |
|
7 | 7 | """Unit tests for abc.py.""" |
8 | 8 |
|
| 9 | +import abc |
9 | 10 | import unittest |
| 11 | +from inspect import isabstract |
10 | 12 |
|
11 | | -import abc |
12 | 13 | import _py_abc |
13 | | -from inspect import isabstract |
| 14 | + |
14 | 15 |
|
15 | 16 | def test_factory(abc_ABCMeta, abc_get_cache_token): |
16 | 17 | class TestLegacyAPI(unittest.TestCase): |
@@ -488,27 +489,49 @@ class MyInt(int): |
488 | 489 |
|
489 | 490 | def test_custom_subclasses(self): |
490 | 491 | class A: pass |
491 | | - class B: pass |
| 492 | + class B(A): pass |
| 493 | + |
| 494 | + class C: pass |
| 495 | + class D(C): pass |
| 496 | + |
| 497 | + class Root(metaclass=abc_ABCMeta): pass |
492 | 498 |
|
493 | | - class Parent1(metaclass=abc_ABCMeta): |
| 499 | + class Parent1(Root): |
494 | 500 | @classmethod |
495 | 501 | def __subclasses__(cls): |
496 | 502 | return [A] |
497 | 503 |
|
498 | | - class Parent2(metaclass=abc_ABCMeta): |
| 504 | + class Parent2(Root): |
499 | 505 | __subclasses__ = lambda: [A] |
500 | 506 |
|
501 | 507 | # trigger caching |
502 | 508 | for _ in range(2): |
503 | 509 | self.check_isinstance(A(), Parent1) |
| 510 | + self.check_isinstance(B(), Parent1) |
504 | 511 | self.check_issubclass(A, Parent1) |
505 | | - self.check_not_isinstance(B(), Parent1) |
506 | | - self.check_not_issubclass(B, Parent1) |
| 512 | + self.check_issubclass(B, Parent1) |
| 513 | + self.check_not_isinstance(C(), Parent1) |
| 514 | + self.check_not_isinstance(D(), Parent1) |
| 515 | + self.check_not_issubclass(C, Parent1) |
| 516 | + self.check_not_issubclass(D, Parent1) |
507 | 517 |
|
508 | 518 | self.check_isinstance(A(), Parent2) |
| 519 | + self.check_isinstance(B(), Parent2) |
509 | 520 | self.check_issubclass(A, Parent2) |
510 | | - self.check_not_isinstance(B(), Parent2) |
511 | | - self.check_not_issubclass(B, Parent2) |
| 521 | + self.check_issubclass(B, Parent2) |
| 522 | + self.check_not_isinstance(C(), Parent2) |
| 523 | + self.check_not_isinstance(D(), Parent2) |
| 524 | + self.check_not_issubclass(C, Parent2) |
| 525 | + self.check_not_issubclass(D, Parent2) |
| 526 | + |
| 527 | + self.check_isinstance(A(), Root) |
| 528 | + self.check_isinstance(B(), Root) |
| 529 | + self.check_issubclass(A, Root) |
| 530 | + self.check_issubclass(B, Root) |
| 531 | + self.check_not_isinstance(C(), Root) |
| 532 | + self.check_not_isinstance(D(), Root) |
| 533 | + self.check_not_issubclass(C, Root) |
| 534 | + self.check_not_issubclass(D, Root) |
512 | 535 |
|
513 | 536 | def test_issubclass_bad_arguments(self): |
514 | 537 | class A(metaclass=abc_ABCMeta): |
|
0 commit comments