Skip to content

Commit c4fe83a

Browse files
committed
gh-92810: Improve test_custom_subclasses
1 parent 854f2f6 commit c4fe83a

File tree

1 file changed

+32
-9
lines changed

1 file changed

+32
-9
lines changed

Lib/test/test_abc.py

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66

77
"""Unit tests for abc.py."""
88

9+
import abc
910
import unittest
11+
from inspect import isabstract
1012

11-
import abc
1213
import _py_abc
13-
from inspect import isabstract
14+
1415

1516
def test_factory(abc_ABCMeta, abc_get_cache_token):
1617
class TestLegacyAPI(unittest.TestCase):
@@ -488,27 +489,49 @@ class MyInt(int):
488489

489490
def test_custom_subclasses(self):
490491
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
492498

493-
class Parent1(metaclass=abc_ABCMeta):
499+
class Parent1(Root):
494500
@classmethod
495501
def __subclasses__(cls):
496502
return [A]
497503

498-
class Parent2(metaclass=abc_ABCMeta):
504+
class Parent2(Root):
499505
__subclasses__ = lambda: [A]
500506

501507
# trigger caching
502508
for _ in range(2):
503509
self.check_isinstance(A(), Parent1)
510+
self.check_isinstance(B(), Parent1)
504511
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)
507517

508518
self.check_isinstance(A(), Parent2)
519+
self.check_isinstance(B(), Parent2)
509520
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)
512535

513536
def test_issubclass_bad_arguments(self):
514537
class A(metaclass=abc_ABCMeta):

0 commit comments

Comments
 (0)