mirror of
https://github.com/python/cpython.git
synced 2025-11-01 18:51:43 +00:00
Issue #24206: Fixed __eq__ and __ne__ methods of inspect classes.
This commit is contained in:
parent
d113c967b4
commit
3018cc49e8
3 changed files with 66 additions and 38 deletions
|
|
@ -76,6 +76,10 @@ def generator_function_example(self):
|
|||
for i in range(2):
|
||||
yield i
|
||||
|
||||
class EqualsToAll:
|
||||
def __eq__(self, other):
|
||||
return True
|
||||
|
||||
class TestPredicates(IsTestBase):
|
||||
def test_sixteen(self):
|
||||
count = len([x for x in dir(inspect) if x.startswith('is')])
|
||||
|
|
@ -2459,47 +2463,62 @@ class TestSignatureObject(unittest.TestCase):
|
|||
|
||||
def test_signature_equality(self):
|
||||
def foo(a, *, b:int) -> float: pass
|
||||
self.assertNotEqual(inspect.signature(foo), 42)
|
||||
self.assertFalse(inspect.signature(foo) == 42)
|
||||
self.assertTrue(inspect.signature(foo) != 42)
|
||||
self.assertTrue(inspect.signature(foo) == EqualsToAll())
|
||||
self.assertFalse(inspect.signature(foo) != EqualsToAll())
|
||||
|
||||
def bar(a, *, b:int) -> float: pass
|
||||
self.assertEqual(inspect.signature(foo), inspect.signature(bar))
|
||||
self.assertTrue(inspect.signature(foo) == inspect.signature(bar))
|
||||
self.assertFalse(inspect.signature(foo) != inspect.signature(bar))
|
||||
|
||||
def bar(a, *, b:int) -> int: pass
|
||||
self.assertNotEqual(inspect.signature(foo), inspect.signature(bar))
|
||||
self.assertFalse(inspect.signature(foo) == inspect.signature(bar))
|
||||
self.assertTrue(inspect.signature(foo) != inspect.signature(bar))
|
||||
|
||||
def bar(a, *, b:int): pass
|
||||
self.assertNotEqual(inspect.signature(foo), inspect.signature(bar))
|
||||
self.assertFalse(inspect.signature(foo) == inspect.signature(bar))
|
||||
self.assertTrue(inspect.signature(foo) != inspect.signature(bar))
|
||||
|
||||
def bar(a, *, b:int=42) -> float: pass
|
||||
self.assertNotEqual(inspect.signature(foo), inspect.signature(bar))
|
||||
self.assertFalse(inspect.signature(foo) == inspect.signature(bar))
|
||||
self.assertTrue(inspect.signature(foo) != inspect.signature(bar))
|
||||
|
||||
def bar(a, *, c) -> float: pass
|
||||
self.assertNotEqual(inspect.signature(foo), inspect.signature(bar))
|
||||
self.assertFalse(inspect.signature(foo) == inspect.signature(bar))
|
||||
self.assertTrue(inspect.signature(foo) != inspect.signature(bar))
|
||||
|
||||
def bar(a, b:int) -> float: pass
|
||||
self.assertNotEqual(inspect.signature(foo), inspect.signature(bar))
|
||||
self.assertFalse(inspect.signature(foo) == inspect.signature(bar))
|
||||
self.assertTrue(inspect.signature(foo) != inspect.signature(bar))
|
||||
def spam(b:int, a) -> float: pass
|
||||
self.assertNotEqual(inspect.signature(spam), inspect.signature(bar))
|
||||
self.assertFalse(inspect.signature(spam) == inspect.signature(bar))
|
||||
self.assertTrue(inspect.signature(spam) != inspect.signature(bar))
|
||||
|
||||
def foo(*, a, b, c): pass
|
||||
def bar(*, c, b, a): pass
|
||||
self.assertEqual(inspect.signature(foo), inspect.signature(bar))
|
||||
self.assertTrue(inspect.signature(foo) == inspect.signature(bar))
|
||||
self.assertFalse(inspect.signature(foo) != inspect.signature(bar))
|
||||
|
||||
def foo(*, a=1, b, c): pass
|
||||
def bar(*, c, b, a=1): pass
|
||||
self.assertEqual(inspect.signature(foo), inspect.signature(bar))
|
||||
self.assertTrue(inspect.signature(foo) == inspect.signature(bar))
|
||||
self.assertFalse(inspect.signature(foo) != inspect.signature(bar))
|
||||
|
||||
def foo(pos, *, a=1, b, c): pass
|
||||
def bar(pos, *, c, b, a=1): pass
|
||||
self.assertEqual(inspect.signature(foo), inspect.signature(bar))
|
||||
self.assertTrue(inspect.signature(foo) == inspect.signature(bar))
|
||||
self.assertFalse(inspect.signature(foo) != inspect.signature(bar))
|
||||
|
||||
def foo(pos, *, a, b, c): pass
|
||||
def bar(pos, *, c, b, a=1): pass
|
||||
self.assertNotEqual(inspect.signature(foo), inspect.signature(bar))
|
||||
self.assertFalse(inspect.signature(foo) == inspect.signature(bar))
|
||||
self.assertTrue(inspect.signature(foo) != inspect.signature(bar))
|
||||
|
||||
def foo(pos, *args, a=42, b, c, **kwargs:int): pass
|
||||
def bar(pos, *args, c, b, a=42, **kwargs:int): pass
|
||||
self.assertEqual(inspect.signature(foo), inspect.signature(bar))
|
||||
self.assertTrue(inspect.signature(foo) == inspect.signature(bar))
|
||||
self.assertFalse(inspect.signature(foo) != inspect.signature(bar))
|
||||
|
||||
def test_signature_unhashable(self):
|
||||
def foo(a): pass
|
||||
|
|
@ -2629,11 +2648,17 @@ class TestParameterObject(unittest.TestCase):
|
|||
P = inspect.Parameter
|
||||
p = P('foo', default=42, kind=inspect.Parameter.KEYWORD_ONLY)
|
||||
|
||||
self.assertEqual(p, p)
|
||||
self.assertNotEqual(p, 42)
|
||||
self.assertTrue(p == p)
|
||||
self.assertFalse(p != p)
|
||||
self.assertFalse(p == 42)
|
||||
self.assertTrue(p != 42)
|
||||
self.assertTrue(p == EqualsToAll())
|
||||
self.assertFalse(p != EqualsToAll())
|
||||
|
||||
self.assertEqual(p, P('foo', default=42,
|
||||
kind=inspect.Parameter.KEYWORD_ONLY))
|
||||
self.assertTrue(p == P('foo', default=42,
|
||||
kind=inspect.Parameter.KEYWORD_ONLY))
|
||||
self.assertFalse(p != P('foo', default=42,
|
||||
kind=inspect.Parameter.KEYWORD_ONLY))
|
||||
|
||||
def test_signature_parameter_unhashable(self):
|
||||
p = inspect.Parameter('foo', default=42,
|
||||
|
|
@ -2936,19 +2961,26 @@ class TestBoundArguments(unittest.TestCase):
|
|||
def test_signature_bound_arguments_equality(self):
|
||||
def foo(a): pass
|
||||
ba = inspect.signature(foo).bind(1)
|
||||
self.assertEqual(ba, ba)
|
||||
self.assertTrue(ba == ba)
|
||||
self.assertFalse(ba != ba)
|
||||
self.assertTrue(ba == EqualsToAll())
|
||||
self.assertFalse(ba != EqualsToAll())
|
||||
|
||||
ba2 = inspect.signature(foo).bind(1)
|
||||
self.assertEqual(ba, ba2)
|
||||
self.assertTrue(ba == ba2)
|
||||
self.assertFalse(ba != ba2)
|
||||
|
||||
ba3 = inspect.signature(foo).bind(2)
|
||||
self.assertNotEqual(ba, ba3)
|
||||
self.assertFalse(ba == ba3)
|
||||
self.assertTrue(ba != ba3)
|
||||
ba3.arguments['a'] = 1
|
||||
self.assertEqual(ba, ba3)
|
||||
self.assertTrue(ba == ba3)
|
||||
self.assertFalse(ba != ba3)
|
||||
|
||||
def bar(b): pass
|
||||
ba4 = inspect.signature(bar).bind(1)
|
||||
self.assertNotEqual(ba, ba4)
|
||||
self.assertFalse(ba == ba4)
|
||||
self.assertTrue(ba != ba4)
|
||||
|
||||
|
||||
class TestSignaturePrivateHelpers(unittest.TestCase):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue