sapling/eden/scm/tests/test-demandimport.py
Xavier Deguillard b192e0b54b demandimport: re-enable
Summary:
Partially backport upstream
https://www.mercurial-scm.org/repo/hg/rev/f81c17ec303c to enable lazy loading
of python code contained in edenscmdeps3.zip.

Also, temporarily disabling the demandimport on Python3 is a bit tricky, for
the reasons mentioned in the deactivated function. Thus, instead of using the
disabled function, let's use the deactivated one.

Reviewed By: DurhamG

Differential Revision: D19672866

fbshipit-source-id: c9e39ed044121d962af1cc46745bdec72629c579
2020-02-05 11:23:29 -08:00

128 lines
3.0 KiB
Python

from __future__ import absolute_import, print_function
# isort:skip_file
from edenscm.mercurial import demandimport
demandimport.enable()
import os
import subprocess
import sys
from hghave import require
require(["py2"])
# Only run if demandimport is allowed
if subprocess.call(["python", "%s/hghave" % os.environ["TESTDIR"], "demandimport"]):
sys.exit(80)
if os.name != "nt":
try:
import distutils.msvc9compiler
print(
"distutils.msvc9compiler needs to be an immediate "
"importerror on non-windows platforms"
)
distutils.msvc9compiler
except ImportError:
pass
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)
l = rsub("'<[a-z]*>'", "'<whatever>'", l)
return l
import os
print("os =", f(os))
print("os.system =", f(os.system))
print("os =", f(os))
from edenscm.mercurial import util
print("util =", f(util))
print("util.system =", f(util.system))
print("util =", f(util))
print("util.system =", f(util.system))
from edenscm.mercurial import hgweb
print("hgweb =", f(hgweb))
print("hgweb_mod =", f(hgweb.hgweb_mod))
print("hgweb =", f(hgweb))
import re as fred
print("fred =", f(fred))
import re as remod
print("remod =", f(remod))
import sys as re
print("re =", f(re))
print("fred =", f(fred))
print("fred.sub =", f(fred.sub))
print("fred =", f(fred))
remod.escape # use remod
print("remod =", f(remod))
print("re =", f(re))
print("re.stderr =", f(re.stderr))
print("re =", f(re))
# Test access to special attributes through demandmod proxy
from edenscm.mercurial import pvec as pvecproxy
print("pvecproxy =", f(pvecproxy))
print("pvecproxy.__doc__ = %r" % (" ".join(pvecproxy.__doc__.split()[:3]) + " ..."))
print("pvecproxy.__name__ = %r" % pvecproxy.__name__)
# __name__ must be accessible via __dict__ so the relative imports can be
# resolved
print("pvecproxy.__dict__['__name__'] = %r" % pvecproxy.__dict__["__name__"])
print("pvecproxy =", f(pvecproxy))
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:
print("contextlib.unknownattr = ImportError: %s" % rsub(r"'", "", str(inst)))
# 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"),
)
os.environ["HGDEMANDIMPORT"] = "disable"
# this enable call should not actually enable demandimport!
demandimport.enable()
from edenscm.mercurial import node
print("node =", f(node))