|
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]]) |