test-demandimport.py
111 lines
| 3.1 KiB
| text/x-python
|
PythonLexer
/ tests / test-demandimport.py
Augie Fackler
|
r33919 | from __future__ import absolute_import, print_function | ||
Pulkit Goyal
|
r28948 | |||
Martin Geisler
|
r8449 | from mercurial import demandimport | ||
demandimport.enable() | ||||
Augie Fackler
|
r23643 | import os | ||
timeless
|
r29868 | import subprocess | ||
import sys | ||||
# Only run if demandimport is allowed | ||||
if subprocess.call(['python', '%s/hghave' % os.environ['TESTDIR'], | ||||
'demandimport']): | ||||
sys.exit(80) | ||||
Augie Fackler
|
r23643 | if os.name != 'nt': | ||
try: | ||||
import distutils.msvc9compiler | ||||
Pulkit Goyal
|
r28948 | print('distutils.msvc9compiler needs to be an immediate ' | ||
'importerror on non-windows platforms') | ||||
Augie Fackler
|
r23643 | distutils.msvc9compiler | ||
except ImportError: | ||||
pass | ||||
Martin Geisler
|
r8449 | import re | ||
rsub = re.sub | ||||
def f(obj): | ||||
l = repr(obj) | ||||
l = rsub("0x[0-9a-fA-F]+", "0x?", l) | ||||
l = rsub("from '.*'", "from '?'", l) | ||||
Dan Villiom Podlaski Christiansen
|
r13083 | l = rsub("'<[a-z]*>'", "'<whatever>'", l) | ||
Martin Geisler
|
r8449 | return l | ||
Martin von Zweigbergk
|
r36255 | demandimport.disable() | ||
os.environ['HGDEMANDIMPORT'] = 'disable' | ||||
# this enable call should not actually enable demandimport! | ||||
demandimport.enable() | ||||
from mercurial import node | ||||
print("node =", f(node)) | ||||
# now enable it for real | ||||
del os.environ['HGDEMANDIMPORT'] | ||||
demandimport.enable() | ||||
Martin von Zweigbergk
|
r36265 | # Test access to special attributes through demandmod proxy | ||
from mercurial import error as errorproxy | ||||
print("errorproxy =", f(errorproxy)) | ||||
print("errorproxy.__doc__ = %r" | ||||
% (' '.join(errorproxy.__doc__.split()[:3]) + ' ...')) | ||||
print("errorproxy.__name__ = %r" % errorproxy.__name__) | ||||
# __name__ must be accessible via __dict__ so the relative imports can be | ||||
# resolved | ||||
print("errorproxy.__dict__['__name__'] = %r" % errorproxy.__dict__['__name__']) | ||||
print("errorproxy =", f(errorproxy)) | ||||
Martin Geisler
|
r8449 | import os | ||
Pulkit Goyal
|
r28948 | print("os =", f(os)) | ||
print("os.system =", f(os.system)) | ||||
print("os =", f(os)) | ||||
Martin Geisler
|
r8449 | |||
Matt Harbison
|
r37983 | from mercurial.utils import procutil | ||
Martin Geisler
|
r8449 | |||
Matt Harbison
|
r37983 | print("procutil =", f(procutil)) | ||
print("procutil.system =", f(procutil.system)) | ||||
print("procutil =", f(procutil)) | ||||
print("procutil.system =", f(procutil.system)) | ||||
Martin Geisler
|
r8449 | |||
Bryan O'Sullivan
|
r27535 | from mercurial import hgweb | ||
Pulkit Goyal
|
r28948 | print("hgweb =", f(hgweb)) | ||
print("hgweb_mod =", f(hgweb.hgweb_mod)) | ||||
print("hgweb =", f(hgweb)) | ||||
Bryan O'Sullivan
|
r27535 | |||
Martin Geisler
|
r8449 | import re as fred | ||
Pulkit Goyal
|
r28948 | print("fred =", f(fred)) | ||
Martin Geisler
|
r8449 | |||
Yuya Nishihara
|
r32447 | import re as remod | ||
print("remod =", f(remod)) | ||||
Martin Geisler
|
r8449 | import sys as re | ||
Pulkit Goyal
|
r28948 | print("re =", f(re)) | ||
Martin Geisler
|
r8449 | |||
Pulkit Goyal
|
r28948 | print("fred =", f(fred)) | ||
print("fred.sub =", f(fred.sub)) | ||||
print("fred =", f(fred)) | ||||
Martin Geisler
|
r8449 | |||
Yuya Nishihara
|
r32447 | remod.escape # use remod | ||
print("remod =", f(remod)) | ||||
Pulkit Goyal
|
r28948 | print("re =", f(re)) | ||
print("re.stderr =", f(re.stderr)) | ||||
print("re =", f(re)) | ||||
Mads Kiilerich
|
r21025 | |||
Yuya Nishihara
|
r30022 | import contextlib | ||
print("contextlib =", f(contextlib)) | ||||
try: | ||||
from contextlib import unknownattr | ||||
print('no demandmod should be created for attribute of non-package ' | ||||
'module:\ncontextlib.unknownattr =', f(unknownattr)) | ||||
except ImportError as inst: | ||||
Yuya Nishihara
|
r30647 | print('contextlib.unknownattr = ImportError: %s' | ||
% rsub(r"'", '', str(inst))) | ||||
Matt Harbison
|
r37983 | from mercurial import util | ||
Yuya Nishihara
|
r30647 | # Unlike the import statement, __import__() function should not raise | ||
# ImportError even if fromlist has an unknown item | ||||
# (see Python/import.c:import_module_level() and ensure_fromlist()) | ||||
contextlibimp = __import__('contextlib', globals(), locals(), ['unknownattr']) | ||||
print("__import__('contextlib', ..., ['unknownattr']) =", f(contextlibimp)) | ||||
print("hasattr(contextlibimp, 'unknownattr') =", | ||||
util.safehasattr(contextlibimp, 'unknownattr')) | ||||