]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-25479: add unit test for __subclasshook__ in test_abc.py (GH-24034) (GH-26063)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Wed, 12 May 2021 13:45:18 +0000 (06:45 -0700)
committerGitHub <noreply@github.com>
Wed, 12 May 2021 13:45:18 +0000 (14:45 +0100)
Co-authored-by: Szymon Trapp
(cherry picked from commit 5010c044c73ee55d0fd578cfecd3f4c3f01a4140)

Co-authored-by: Karl Dubost <karl+github@la-grange.net>
Lib/test/test_abc.py

index 7e9c47b3cacb96978da60c935ac86eed724503c4..3f668e9187d9bde515af735fcb826a7e98fa34b1 100644 (file)
@@ -459,6 +459,24 @@ def test_factory(abc_ABCMeta, abc_get_cache_token):
             with self.assertRaisesRegex(Exception, exc_msg):
                 issubclass(int, S)
 
+        def test_subclasshook(self):
+            class A(metaclass=abc.ABCMeta):
+                @classmethod
+                def __subclasshook__(cls, C):
+                    if cls is A:
+                        return 'foo' in C.__dict__
+                    return NotImplemented
+            self.assertFalse(issubclass(A, A))
+            self.assertFalse(issubclass(A, (A,)))
+            class B:
+                foo = 42
+            self.assertTrue(issubclass(B, A))
+            self.assertTrue(issubclass(B, (A,)))
+            class C:
+                spam = 42
+            self.assertFalse(issubclass(C, A))
+            self.assertFalse(issubclass(C, (A,)))
+
         def test_all_new_methods_are_called(self):
             class A(metaclass=abc_ABCMeta):
                 pass