tests/test-extensions-wrapfunction.py
changeset 29765 19578bb84731
child 34014 47e52f079a57
equal deleted inserted replaced
29764:8bf97c4c6c2a 29765:19578bb84731
       
     1 from __future__ import absolute_import, print_function
       
     2 
       
     3 from mercurial import extensions
       
     4 
       
     5 def genwrapper(x):
       
     6     def f(orig, *args, **kwds):
       
     7         return [x] + orig(*args, **kwds)
       
     8     f.x = x
       
     9     return f
       
    10 
       
    11 def getid(wrapper):
       
    12     return getattr(wrapper, 'x', '-')
       
    13 
       
    14 wrappers = [genwrapper(i) for i in range(5)]
       
    15 
       
    16 class dummyclass(object):
       
    17     def getstack(self):
       
    18         return ['orig']
       
    19 
       
    20 dummy = dummyclass()
       
    21 
       
    22 def batchwrap(wrappers):
       
    23     for w in wrappers:
       
    24         extensions.wrapfunction(dummy, 'getstack', w)
       
    25         print('wrap %d: %s' % (getid(w), dummy.getstack()))
       
    26 
       
    27 def batchunwrap(wrappers):
       
    28     for w in wrappers:
       
    29         result = None
       
    30         try:
       
    31             result = extensions.unwrapfunction(dummy, 'getstack', w)
       
    32             msg = str(dummy.getstack())
       
    33         except (ValueError, IndexError) as e:
       
    34             msg = e.__class__.__name__
       
    35         print('unwrap %s: %s: %s' % (getid(w), getid(result), msg))
       
    36 
       
    37 batchwrap(wrappers + [wrappers[0]])
       
    38 batchunwrap([(wrappers[i] if i >= 0 else None)
       
    39              for i in [3, None, 0, 4, 0, 2, 1, None]])