##// END OF EJS Templates
tests: finally fix up test-fuzz-targets.t...
tests: finally fix up test-fuzz-targets.t It's been failing on my workstation for a while, since I have a new enough LLVM that I had the fuzzer goo, but not so new that I actually had FuzzedDataProvider. This is a better solution all around in my opinion. I _believe_ this should let us run these tests on most systems, even those using GCC instead of clang. That said, my one attempt to test this on my macOS laptop failed miserably, and I don't feel like doing more work on this right now. Differential Revision: https://phab.mercurial-scm.org/D7566

File last commit:

r43346:2372284d default
r44267:19da643d default
Show More
test-extensions-wrapfunction.py
79 lines | 2.1 KiB | text/x-python | PythonLexer
/ tests / test-extensions-wrapfunction.py
Jun Wu
extensions: add unwrapfunction to undo wrapfunction...
r29765 from __future__ import absolute_import, print_function
from mercurial import extensions
Augie Fackler
formatting: blacken the codebase...
r43346
Jun Wu
extensions: add unwrapfunction to undo wrapfunction...
r29765 def genwrapper(x):
def f(orig, *args, **kwds):
return [x] + orig(*args, **kwds)
Augie Fackler
formatting: blacken the codebase...
r43346
Jun Wu
extensions: add unwrapfunction to undo wrapfunction...
r29765 f.x = x
return f
Augie Fackler
formatting: blacken the codebase...
r43346
Jun Wu
extensions: add unwrapfunction to undo wrapfunction...
r29765 def getid(wrapper):
return getattr(wrapper, 'x', '-')
Augie Fackler
formatting: blacken the codebase...
r43346
Jun Wu
extensions: add unwrapfunction to undo wrapfunction...
r29765 wrappers = [genwrapper(i) for i in range(5)]
Augie Fackler
formatting: blacken the codebase...
r43346
Jun Wu
extensions: add unwrapfunction to undo wrapfunction...
r29765 class dummyclass(object):
def getstack(self):
return ['orig']
Augie Fackler
formatting: blacken the codebase...
r43346
Jun Wu
extensions: add unwrapfunction to undo wrapfunction...
r29765 dummy = dummyclass()
Augie Fackler
formatting: blacken the codebase...
r43346
Jun Wu
extensions: add unwrapfunction to undo wrapfunction...
r29765 def batchwrap(wrappers):
for w in wrappers:
extensions.wrapfunction(dummy, 'getstack', w)
print('wrap %d: %s' % (getid(w), dummy.getstack()))
Augie Fackler
formatting: blacken the codebase...
r43346
Jun Wu
extensions: add unwrapfunction to undo wrapfunction...
r29765 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))
Augie Fackler
formatting: blacken the codebase...
r43346
Jun Wu
extensions: add unwrapfunction to undo wrapfunction...
r29765 batchwrap(wrappers + [wrappers[0]])
Augie Fackler
formatting: blacken the codebase...
r43346 batchunwrap(
[
(wrappers[i] if i is not None and i >= 0 else None)
for i in [3, None, 0, 4, 0, 2, 1, None]
]
)
Martin von Zweigbergk
extensions: add wrappedfunction() context manager...
r34016
wrap0 = extensions.wrappedfunction(dummy, 'getstack', wrappers[0])
wrap1 = extensions.wrappedfunction(dummy, 'getstack', wrappers[1])
# Use them in a different order from how they were created to check that
# the wrapping happens in __enter__, not in __init__
print('context manager', dummy.getstack())
with wrap1:
print('context manager', dummy.getstack())
with wrap0:
print('context manager', dummy.getstack())
# Bad programmer forgets to unwrap the function, but the context
# managers still unwrap their wrappings.
extensions.wrapfunction(dummy, 'getstack', wrappers[2])
print('context manager', dummy.getstack())
print('context manager', dummy.getstack())
print('context manager', dummy.getstack())
Yuya Nishihara
extensions: fix wrapcommand/function of class instance...
r34130
# Wrap callable object which has no __name__
class callableobj(object):
def __call__(self):
return ['orig']
Augie Fackler
formatting: blacken the codebase...
r43346
Yuya Nishihara
extensions: fix wrapcommand/function of class instance...
r34130 dummy.cobj = callableobj()
extensions.wrapfunction(dummy, 'cobj', wrappers[0])
print('wrap callable object', dummy.cobj())