--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-extensions-wrapfunction.py Wed Aug 10 16:27:33 2016 +0100
@@ -0,0 +1,39 @@
+from __future__ import absolute_import, print_function
+
+from mercurial import extensions
+
+def genwrapper(x):
+ def f(orig, *args, **kwds):
+ return [x] + orig(*args, **kwds)
+ f.x = x
+ return f
+
+def getid(wrapper):
+ return getattr(wrapper, 'x', '-')
+
+wrappers = [genwrapper(i) for i in range(5)]
+
+class dummyclass(object):
+ def getstack(self):
+ return ['orig']
+
+dummy = dummyclass()
+
+def batchwrap(wrappers):
+ for w in wrappers:
+ extensions.wrapfunction(dummy, 'getstack', w)
+ print('wrap %d: %s' % (getid(w), dummy.getstack()))
+
+def batchunwrap(wrappers):
+ for w in wrappers:
+ result = None
+ try:
+ result = extensions.unwrapfunction(dummy, 'getstack', w)
+ msg = str(dummy.getstack())
+ except (ValueError, IndexError) as e:
+ msg = e.__class__.__name__
+ print('unwrap %s: %s: %s' % (getid(w), getid(result), msg))
+
+batchwrap(wrappers + [wrappers[0]])
+batchunwrap([(wrappers[i] if i >= 0 else None)
+ for i in [3, None, 0, 4, 0, 2, 1, None]])