@@ -4350,38 +4350,71 @@ def __init__(self):
43504350 else :
43514351 self .fail ("did not test __init__() for None return" )
43524352
4353+ def assertNotOrderable (self , a , b ):
4354+ with self .assertRaises (TypeError ):
4355+ a < b
4356+ with self .assertRaises (TypeError ):
4357+ a > b
4358+ with self .assertRaises (TypeError ):
4359+ a <= b
4360+ with self .assertRaises (TypeError ):
4361+ a >= b
4362+
43534363 def test_method_wrapper (self ):
43544364 # Testing method-wrapper objects...
43554365 # <type 'method-wrapper'> did not support any reflection before 2.5
4356-
4357- # XXX should methods really support __eq__?
4358-
43594366 l = []
4360- self .assertEqual (l .__add__ , l .__add__ )
4361- self .assertEqual (l .__add__ , [].__add__ )
4362- self .assertNotEqual (l .__add__ , [5 ].__add__ )
4363- self .assertNotEqual (l .__add__ , l .__mul__ )
4367+ self .assertTrue (l .__add__ == l .__add__ )
4368+ self .assertFalse (l .__add__ != l .__add__ )
4369+ self .assertFalse (l .__add__ == [].__add__ )
4370+ self .assertTrue (l .__add__ != [].__add__ )
4371+ self .assertFalse (l .__add__ == l .__mul__ )
4372+ self .assertTrue (l .__add__ != l .__mul__ )
4373+ self .assertNotOrderable (l .__add__ , l .__add__ )
43644374 self .assertEqual (l .__add__ .__name__ , '__add__' )
4365- if hasattr (l .__add__ , '__self__' ):
4366- # CPython
4367- self .assertIs (l .__add__ .__self__ , l )
4368- self .assertIs (l .__add__ .__objclass__ , list )
4369- else :
4370- # Python implementations where [].__add__ is a normal bound method
4371- self .assertIs (l .__add__ .im_self , l )
4372- self .assertIs (l .__add__ .im_class , list )
4375+ self .assertIs (l .__add__ .__self__ , l )
4376+ self .assertIs (l .__add__ .__objclass__ , list )
43734377 self .assertEqual (l .__add__ .__doc__ , list .__add__ .__doc__ )
4374- try :
4375- hash (l .__add__ )
4376- except TypeError :
4377- pass
4378- else :
4379- self .fail ("no TypeError from hash([].__add__)" )
4378+ # hash([].__add__) should not be based on hash([])
4379+ hash (l .__add__ )
43804380
4381- t = ()
4382- t += (7 ,)
4383- self .assertEqual (t .__add__ , (7 ,).__add__ )
4384- self .assertEqual (hash (t .__add__ ), hash ((7 ,).__add__ ))
4381+ def test_builtin_function_or_method (self ):
4382+ # Not really belonging to test_descr, but introspection and
4383+ # comparison on <type 'builtin_function_or_method'> seems not
4384+ # to be tested elsewhere
4385+ l = []
4386+ self .assertTrue (l .append == l .append )
4387+ self .assertFalse (l .append != l .append )
4388+ self .assertFalse (l .append == [].append )
4389+ self .assertTrue (l .append != [].append )
4390+ self .assertFalse (l .append == l .pop )
4391+ self .assertTrue (l .append != l .pop )
4392+ self .assertNotOrderable (l .append , l .append )
4393+ self .assertEqual (l .append .__name__ , 'append' )
4394+ self .assertIs (l .append .__self__ , l )
4395+ # self.assertIs(l.append.__objclass__, list) --- could be added?
4396+ self .assertEqual (l .append .__doc__ , list .append .__doc__ )
4397+ # hash([].append) should not be based on hash([])
4398+ hash (l .append )
4399+
4400+ def test_special_unbound_method_types (self ):
4401+ # Testing objects of <type 'wrapper_descriptor'>...
4402+ self .assertTrue (list .__add__ == list .__add__ )
4403+ self .assertFalse (list .__add__ != list .__add__ )
4404+ self .assertFalse (list .__add__ == list .__mul__ )
4405+ self .assertTrue (list .__add__ != list .__mul__ )
4406+ self .assertNotOrderable (list .__add__ , list .__add__ )
4407+ self .assertEqual (list .__add__ .__name__ , '__add__' )
4408+ self .assertIs (list .__add__ .__objclass__ , list )
4409+
4410+ # Testing objects of <type 'method_descriptor'>...
4411+ self .assertTrue (list .append == list .append )
4412+ self .assertFalse (list .append != list .append )
4413+ self .assertFalse (list .append == list .pop )
4414+ self .assertTrue (list .append != list .pop )
4415+ self .assertNotOrderable (list .append , list .append )
4416+ self .assertEqual (list .append .__name__ , 'append' )
4417+ self .assertIs (list .append .__objclass__ , list )
43854418
43864419 def test_not_implemented (self ):
43874420 # Testing NotImplemented...
0 commit comments