inspect.signature: Check for function-like objects before builtins. Issue #17159
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index 95c1b32..0dc7451 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -14,6 +14,7 @@
 import types
 import unicodedata
 import unittest
+import unittest.mock
 
 try:
     from concurrent.futures import ThreadPoolExecutor
@@ -1836,6 +1837,21 @@
                            ('kwargs', ..., ..., "var_keyword")),
                            ...))
 
+        # Test with cython-like builtins:
+        _orig_isdesc = inspect.ismethoddescriptor
+        def _isdesc(obj):
+            if hasattr(obj, '_builtinmock'):
+                return True
+            return _orig_isdesc(obj)
+
+        with unittest.mock.patch('inspect.ismethoddescriptor', _isdesc):
+            builtin_func = funclike(func)
+            # Make sure that our mock setup is working
+            self.assertFalse(inspect.ismethoddescriptor(builtin_func))
+            builtin_func._builtinmock = True
+            self.assertTrue(inspect.ismethoddescriptor(builtin_func))
+            self.assertEqual(inspect.signature(builtin_func), sig_func)
+
     def test_signature_functionlike_class(self):
         # We only want to duck type function-like objects,
         # not classes.