@@ -291,46 +291,7 @@ def bar(): return 42
291291 self .assertEqual (bar (), 42 )
292292 self .assertEqual (actions , expected_actions )
293293
294- def test_wrapped_descriptor_inside_classmethod (self ):
295- class BoundWrapper :
296- def __init__ (self , wrapped ):
297- self .__wrapped__ = wrapped
298-
299- def __call__ (self , * args , ** kwargs ):
300- return self .__wrapped__ (* args , ** kwargs )
301-
302- class Wrapper :
303- def __init__ (self , wrapped ):
304- self .__wrapped__ = wrapped
305-
306- def __get__ (self , instance , owner ):
307- bound_function = self .__wrapped__ .__get__ (instance , owner )
308- return BoundWrapper (bound_function )
309-
310- def decorator (wrapped ):
311- return Wrapper (wrapped )
312-
313- class Class :
314- @decorator
315- @classmethod
316- def inner (cls ):
317- # This should already work.
318- return 'spam'
319-
320- @classmethod
321- @decorator
322- def outer (cls ):
323- # Raised TypeError with a message saying that the 'Wrapper'
324- # object is not callable.
325- return 'eggs'
326-
327- self .assertEqual (Class .inner (), 'spam' )
328- self .assertEqual (Class .outer (), 'eggs' )
329- self .assertEqual (Class ().inner (), 'spam' )
330- self .assertEqual (Class ().outer (), 'eggs' )
331-
332- # TODO: RUSTPYTHON
333- @unittest .expectedFailure
294+ @unittest .expectedFailure # TODO: RUSTPYTHON
334295 def test_bound_function_inside_classmethod (self ):
335296 class A :
336297 def foo (self , cls ):
@@ -341,91 +302,6 @@ class B:
341302
342303 self .assertEqual (B .bar (), 'spam' )
343304
344- def test_wrapped_classmethod_inside_classmethod (self ):
345- class MyClassMethod1 :
346- def __init__ (self , func ):
347- self .func = func
348-
349- def __call__ (self , cls ):
350- if hasattr (self .func , '__get__' ):
351- return self .func .__get__ (cls , cls )()
352- return self .func (cls )
353-
354- def __get__ (self , instance , owner = None ):
355- if owner is None :
356- owner = type (instance )
357- return MethodType (self , owner )
358-
359- class MyClassMethod2 :
360- def __init__ (self , func ):
361- if isinstance (func , classmethod ):
362- func = func .__func__
363- self .func = func
364-
365- def __call__ (self , cls ):
366- return self .func (cls )
367-
368- def __get__ (self , instance , owner = None ):
369- if owner is None :
370- owner = type (instance )
371- return MethodType (self , owner )
372-
373- for myclassmethod in [MyClassMethod1 , MyClassMethod2 ]:
374- class A :
375- @myclassmethod
376- def f1 (cls ):
377- return cls
378-
379- @classmethod
380- @myclassmethod
381- def f2 (cls ):
382- return cls
383-
384- @myclassmethod
385- @classmethod
386- def f3 (cls ):
387- return cls
388-
389- @classmethod
390- @classmethod
391- def f4 (cls ):
392- return cls
393-
394- @myclassmethod
395- @MyClassMethod1
396- def f5 (cls ):
397- return cls
398-
399- @myclassmethod
400- @MyClassMethod2
401- def f6 (cls ):
402- return cls
403-
404- self .assertIs (A .f1 (), A )
405- self .assertIs (A .f2 (), A )
406- self .assertIs (A .f3 (), A )
407- self .assertIs (A .f4 (), A )
408- self .assertIs (A .f5 (), A )
409- self .assertIs (A .f6 (), A )
410- a = A ()
411- self .assertIs (a .f1 (), A )
412- self .assertIs (a .f2 (), A )
413- self .assertIs (a .f3 (), A )
414- self .assertIs (a .f4 (), A )
415- self .assertIs (a .f5 (), A )
416- self .assertIs (a .f6 (), A )
417-
418- def f (cls ):
419- return cls
420-
421- self .assertIs (myclassmethod (f ).__get__ (a )(), A )
422- self .assertIs (myclassmethod (f ).__get__ (a , A )(), A )
423- self .assertIs (myclassmethod (f ).__get__ (A , A )(), A )
424- self .assertIs (myclassmethod (f ).__get__ (A )(), type (A ))
425- self .assertIs (classmethod (f ).__get__ (a )(), A )
426- self .assertIs (classmethod (f ).__get__ (a , A )(), A )
427- self .assertIs (classmethod (f ).__get__ (A , A )(), A )
428- self .assertIs (classmethod (f ).__get__ (A )(), type (A ))
429305
430306class TestClassDecorators (unittest .TestCase ):
431307
0 commit comments